mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 06:03:36 -04:00
[IA64] hotplug/ia64: SN Hotplug Driver: SN IRQ Fixes
This patch fixes the SN IRQ code such that cpu affinity and Hotplug can modify IRQ values. The sn_irq_info structures are now locked using a RCU lock mechanism to avoid lock contention in the lost interrupt WAR code. Signed-off-by: Prarit Bhargava <prarit@sgi.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
bd53d1270f
commit
cb4cb2cb9b
4 changed files with 162 additions and 137 deletions
|
|
@ -9,6 +9,8 @@
|
|||
#ifndef _ASM_IA64_SN_INTR_H
|
||||
#define _ASM_IA64_SN_INTR_H
|
||||
|
||||
#include <linux/rcupdate.h>
|
||||
|
||||
#define SGI_UART_VECTOR (0xe9)
|
||||
#define SGI_PCIBR_ERROR (0x33)
|
||||
|
||||
|
|
@ -33,7 +35,7 @@
|
|||
|
||||
// The SN PROM irq struct
|
||||
struct sn_irq_info {
|
||||
struct sn_irq_info *irq_next; /* sharing irq list */
|
||||
struct sn_irq_info *irq_next; /* deprecated DO NOT USE */
|
||||
short irq_nasid; /* Nasid IRQ is assigned to */
|
||||
int irq_slice; /* slice IRQ is assigned to */
|
||||
int irq_cpuid; /* kernel logical cpuid */
|
||||
|
|
@ -47,6 +49,8 @@ struct sn_irq_info {
|
|||
int irq_cookie; /* unique cookie */
|
||||
int irq_flags; /* flags */
|
||||
int irq_share_cnt; /* num devices sharing IRQ */
|
||||
struct list_head list; /* list of sn_irq_info structs */
|
||||
struct rcu_head rcu; /* rcu callback list */
|
||||
};
|
||||
|
||||
extern void sn_send_IPI_phys(int, long, int, int);
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@
|
|||
|
||||
#include <linux/pci.h>
|
||||
|
||||
extern struct sn_irq_info **sn_irq;
|
||||
|
||||
#define SN_PCIDEV_INFO(pci_dev) \
|
||||
((struct pcidev_info *)(pci_dev)->sysdata)
|
||||
|
||||
|
|
@ -50,9 +48,11 @@ struct pcidev_info {
|
|||
|
||||
struct sn_irq_info *pdi_sn_irq_info;
|
||||
struct sn_pcibus_provider *pdi_provider; /* sn pci ops */
|
||||
struct pci_dev *host_pci_dev; /* host bus link */
|
||||
};
|
||||
|
||||
extern void sn_irq_fixup(struct pci_dev *pci_dev,
|
||||
struct sn_irq_info *sn_irq_info);
|
||||
|
||||
extern void sn_irq_lh_init(void);
|
||||
#endif /* _ASM_IA64_SN_PCI_PCIDEV_H */
|
||||
|
|
|
|||
Loading…
Reference in a new issue