x86/platform changes for v3.6
Subsystems (4)
Linus,
Please pull the latest x86-platform-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-platform-for-linus
HEAD: 36d93d88a5396baa135f8bcde7b8501dfe3b8e53 Revert "x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()"
This tree mostly involves various APIC driver cleanups/robustization, and vSMP motivated platform callback improvements/cleanups.
out-of-topic modifications in x86-platform-for-linus:
-----------------------------------------------------
drivers/iommu/intel_irq_remapping.c# 7eb9ae0: irq/apic: Use config_enabled(CONF
# ed88bed: x86/apic/irq_remap: Silence a bog # ff16432: x86/apic: Make cpu_mask_to_apicid
drivers/iommu/irq_remapping.c # 7eb9ae0: irq/apic: Use config_enabled(CONF drivers/iommu/irq_remapping.h # 7eb9ae0: irq/apic: Use config_enabled(CONF include/linux/irq.h # 7eb9ae0: irq/apic: Use config_enabled(CONF
Thanks,
Ingo
------------------>
Alexander Gordeev (14):
x86/apic: Trivial whitespace fixes
x86/apic: Factor out default target_cpus() operation x86/apic: Factor out default cpu_mask_to_apicid() operations x86/apic: Factor out default vector_allocation_domain() operation x86/apic: Try to spread IRQ vectors to different priority levels x86/apic: Avoid useless scanning thru a cpumask in assign_irq_vector() x86/apic: Make cpu_mask_to_apicid() operations return error code x86/apic: Make cpu_mask_to_apicid() operations check cpu_online_mask x86/x2apic/cluster: Vector_allocation_domain() should return a value x86/apic: Eliminate cpu_mask_to_apicid() operation x86/apic: Fix ugly casting and branching in cpu_mask_to_apicid_and() x86/apic/es7000+summit: Fix compile warning in cpu_mask_to_apicid() x86/apic/es7000+summit: Always make valid apicid from a cpumask x86/apic/es7000: Make apicid of a cluster (not CPU) from a cpumask
Dan Carpenter (1):
x86/apic/irq_remap: Silence a bogus pr_err()
Feng Tang (1):
Revert "x86/platform: Add a wallclock_init func to x86_platforms ops"
Ido Yariv (3):
x86/platform: Introduce APIC post-initialization callback x86/vsmp: Fix linker error when CONFIG_PROC_FS is not set x86/vsmp: Fix vector_allocation_domain's return value
Ingo Molnar (1):
Revert "x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()"
Jiang Liu (1):
x86: Return IRQ_SET_MASK_OK_NOCOPY from irq affinity functions
Ravikiran Thirumalai (1):
x86/vsmp: Ignore IOAPIC IRQ affinity if possible
Shuah Khan (1):
x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()
Suresh Siddha (6):
x86/irq: Update irq_cfg domain unless the new affinity is a subset of the current domain x86/x2apic/cluster: Use all the members of one cluster specified in the smp_affinity mask for the interrupt destination irq/apic: Use config_enabled(CONFIG_SMP) checks to clean up irq_set_affinity() for UP
x86/apic: Optimize cpu traversal in __assign_irq_vector() using domain membership
x86/apic/x2apic: Limit the vector reservation to the user specified mask
x86/apic/x2apic: Use multiple cluster members for the irq destination only with the explicit affinity
arch/x86/include/asm/apic.h | 61 +++++-- arch/x86/include/asm/x2apic.h | 18 -- arch/x86/include/asm/x86_init.h | 4 +- arch/x86/kernel/apic/apic.c | 19 ++ arch/x86/kernel/apic/apic_flat_64.c | 76 +------- arch/x86/kernel/apic/apic_noop.c | 9 +- arch/x86/kernel/apic/apic_numachip.c | 50 +----- arch/x86/kernel/apic/bigsmp_32.c | 48 +---- arch/x86/kernel/apic/es7000_32.c | 51 ++---- arch/x86/kernel/apic/io_apic.c | 312 +++++++++++++++++---------------- arch/x86/kernel/apic/numaq_32.c | 30 +--- arch/x86/kernel/apic/probe_32.c | 23 +-- arch/x86/kernel/apic/probe_64.c | 11 +- arch/x86/kernel/apic/summit_32.c | 46 ++--- arch/x86/kernel/apic/x2apic_cluster.c | 82 ++++++--- arch/x86/kernel/apic/x2apic_phys.c | 39 +---- arch/x86/kernel/apic/x2apic_uv_x.c | 45 ++--- arch/x86/kernel/setup.c | 2 - arch/x86/kernel/vsmp_64.c | 44 ++++- arch/x86/kernel/x86_init.c | 2 - arch/x86/platform/uv/uv_irq.c | 9 +- drivers/iommu/intel_irq_remapping.c | 20 ++- drivers/iommu/irq_remapping.c | 5 +- drivers/iommu/irq_remapping.h | 2 - include/linux/irq.h | 2 - 25 files changed, 429 insertions(+), 581 deletions(-)
arch/x86/include/asm/apic.h +48 -13
@@ -306,7 +306,8 @@ struct apic {unsigned long (*check_apicid_used)(physid_mask_t *map,int apicid);unsigned long (*check_apicid_present)(int apicid); -void (*vector_allocation_domain)(int cpu,struct cpumask *retmask); +void (*vector_allocation_domain)(int cpu,struct cpumask *retmask, +const struct cpumask *mask);void (*init_apic_ldr)(void );void (*ioapic_phys_id_map)(physid_mask_t *phys_map,physid_mask_t *retmap);
@@ -331,9 +332,9 @@ struct apic {unsigned long (*set_apic_id)(unsigned int id);unsigned long apic_id_mask; -unsigned int (*cpu_mask_to_apicid)(const struct cpumask *cpumask); -unsigned int (*cpu_mask_to_apicid_and)(const struct cpumask *cpumask, -const struct cpumask *andmask); +int (*cpu_mask_to_apicid_and)(const struct cpumask *cpumask, +const struct cpumask *andmask, +unsigned int *apicid);/* ipi */ void (*send_IPI_mask)(const struct cpumask *mask,int vector);
@@ -537,6 +538,11 @@ static inline const struct cpumask *default_target_cpus(void)#endif } +static inline const struct cpumask *online_target_cpus (void ) +{ +return cpu_online_mask; +} +DECLARE_EARLY_PER_CPU (u16, x86_bios_cpu_apicid);
@@ -586,21 +592,50 @@ static inline int default_phys_pkg_id(int cpuid_apic, int index_msb)#endif -static inline unsigned int -default_cpu_mask_to_apicid (const struct cpumask *cpumask) +static inline int +flat_cpu_mask_to_apicid_and (const struct cpumask *cpumask, +const struct cpumask *andmask, +unsigned int *apicid) { -return cpumask_bits (cpumask)[0 ] &APIC_ALL_CPUS ; +unsigned long cpu_mask =cpumask_bits (cpumask)[0 ] & +cpumask_bits (andmask)[0 ] & +cpumask_bits (cpu_online_mask)[0 ] & +APIC_ALL_CPUS ; + +if (likely (cpu_mask)) { + *apicid = (unsigned int )cpu_mask; +return 0 ; + }else { +return -EINVAL ; + } } -static inline unsigned int +extern int default_cpu_mask_to_apicid_and (const struct cpumask *cpumask, -const struct cpumask *andmask) +const struct cpumask *andmask, +unsigned int *apicid); + +static inline void +flat_vector_allocation_domain (int cpu,struct cpumask *retmask, +const struct cpumask *mask) { -unsigned long mask1 =cpumask_bits (cpumask)[0 ]; -unsigned long mask2 =cpumask_bits (andmask)[0 ]; -unsigned long mask3 =cpumask_bits (cpu_online_mask)[0 ]; +/* Careful. Some cpus do not strictly honor the set of cpus +* specified in the interrupt destination when using lowest +* priority interrupt delivery mode. +* +* In particular there was a hyperthreading cpu observed to +* deliver interrupts to the wrong hyperthread when only one +* hyperthread was specified in the interrupt desitination. +*/ +cpumask_clear (retmask); +cpumask_bits (retmask)[0 ] =APIC_ALL_CPUS ; +} -return (unsigned int )(mask1 & mask2 & mask3); +static inline void +default_vector_allocation_domain (int cpu,struct cpumask *retmask, +const struct cpumask *mask) +{ +cpumask_copy (retmask,cpumask_of (cpu)); }static inline unsigned long default_check_apicid_used (physid_mask_t *map,int apicid)
arch/x86/include/asm/x2apic.h +0 -18
@@ -9,15 +9,6 @@#include <asm/ipi.h> #include <linux/cpumask.h> -/* -* Need to use more than cpu 0, because we need more vectors -* when MSI-X are used. -*/ -static const struct cpumask *x2apic_target_cpus (void ) -{ -return cpu_online_mask; -} -static int x2apic_apic_id_valid (int apicid) {return 1 ;
@@ -28,15 +19,6 @@ static int x2apic_apic_id_registered(void)return 1 ; } -/* -* For now each logical cpu is in its own vector allocation domain. -*/ -static void x2apic_vector_allocation_domain (int cpu,struct cpumask *retmask) -{ -cpumask_clear (retmask); -cpumask_set_cpu (cpu, retmask); -} -static void __x2apic_send_IPI_dest (unsigned int apicid,int vector,unsigned int dest) {
arch/x86/include/asm/x86_init.h +2 -2
@@ -156,7 +156,6 @@ struct x86_cpuinit_ops {/** * struct x86_platform_ops - platform specific runtime functions * @calibrate_tsc: calibrate TSC -* @wallclock_init: init the wallclock device * @get_wallclock: get time from HW clock like RTC etc. * @set_wallclock: set time back to HW clock * @is_untracked_pat_range exclude from PAT logic
@@ -164,10 +163,10 @@ struct x86_cpuinit_ops {* @i8042_detect pre-detect if i8042 controller exists * @save_sched_clock_state: save state for sched_clock() on suspend * @restore_sched_clock_state: restore state for sched_clock() on resume +* @apic_post_init: adjust apic if neeeded */ struct x86_platform_ops {unsigned long (*calibrate_tsc)(void ); -void (*wallclock_init)(void );unsigned long (*get_wallclock)(void );int (*set_wallclock)(unsigned long nowtime);void (*iommu_shutdown)(void );
@@ -177,6 +176,7 @@ struct x86_platform_ops {int (*i8042_detect)(void );void (*save_sched_clock_state)(void );void (*restore_sched_clock_state)(void ); +void (*apic_post_init)(void ); };struct pci_dev ;
arch/x86/kernel/apic/apic.c +19 -0
@@ -2123,6 +2123,25 @@ void default_init_apic_ldr(void)apic_write (APIC_LDR , val); } +int default_cpu_mask_to_apicid_and (const struct cpumask *cpumask, +const struct cpumask *andmask, +unsigned int *apicid) +{ +unsigned int cpu; + +for_each_cpu_and (cpu, cpumask, andmask) { +if (cpumask_test_cpu (cpu, cpu_online_mask)) +break ; + } + +if (likely (cpu < nr_cpu_ids)) { + *apicid =per_cpu (x86_cpu_to_apicid, cpu); +return 0 ; + } + +return -EINVAL ; +} +/* * Power management */
arch/x86/kernel/apic/apic_flat_64.c +6 -70
129 lines not on this page · raw message
arch/x86/kernel/apic/apic_noop.c +4 -5
@@ -100,12 +100,12 @@ static unsigned long noop_check_apicid_present(int bit)return physid_isset (bit, phys_cpu_present_map); } -static void noop_vector_allocation_domain (int cpu,struct cpumask *retmask) +static void noop_vector_allocation_domain (int cpu,struct cpumask *retmask, +const struct cpumask *mask) {if (cpu !=0 )pr_warning ("APIC: Vector allocated for non-BSP cpu\n" ); -cpumask_clear (retmask); -cpumask_set_cpu (cpu, retmask); +cpumask_copy (retmask,cpumask_of (cpu)); }static u32 noop_apic_read (u32 reg)
@@ -159,8 +159,7 @@ struct apic apic_noop = { .set_apic_id = NULL, .apic_id_mask = 0x0F << 24, - .cpu_mask_to_apicid = default_cpu_mask_to_apicid, - .cpu_mask_to_apicid_and = default_cpu_mask_to_apicid_and, + .cpu_mask_to_apicid_and = flat_cpu_mask_to_apicid_and, .send_IPI_mask = noop_send_IPI_mask, .send_IPI_mask_allbutself = noop_send_IPI_mask_allbutself,
arch/x86/kernel/apic/apic_numachip.c +3 -47
79 lines not on this page · raw message
arch/x86/kernel/apic/bigsmp_32.c +3 -45
83 lines not on this page · raw message
arch/x86/kernel/apic/es7000_32.c +19 -32
113 lines not on this page · raw message
arch/x86/kernel/apic/io_apic.c +162 -150
503 lines not on this page · raw message
arch/x86/kernel/apic/numaq_32.c +6 -24
@@ -406,16 +406,13 @@ static inline int numaq_check_phys_apicid_present(int phys_apicid)* We use physical apicids here, not logical, so just return the default * physical broadcast to stop people from breaking us */ -static unsigned int numaq_cpu_mask_to_apicid (const struct cpumask *cpumask) -{ -return 0x0F ; -} - -static inline unsigned int +static int numaq_cpu_mask_to_apicid_and (const struct cpumask *cpumask, -const struct cpumask *andmask) +const struct cpumask *andmask, +unsigned int *apicid) { -return 0x0F ; + *apicid =0x0F ; +return 0 ; }/* No NUMA-Q box has a HT CPU, but it can't hurt to use the default code. */
@@ -441,20 +438,6 @@ static int probe_numaq(void)return found_numaq; } -static void numaq_vector_allocation_domain (int cpu,struct cpumask *retmask) -{ -/* Careful. Some cpus do not strictly honor the set of cpus -* specified in the interrupt destination when using lowest -* priority interrupt delivery mode. -* -* In particular there was a hyperthreading cpu observed to -* deliver interrupts to the wrong hyperthread when only one -* hyperthread was specified in the interrupt desitination. -*/ -cpumask_clear (retmask); -cpumask_bits (retmask)[0 ] =APIC_ALL_CPUS ; -} -static void numaq_setup_portio_remap (void ) {int num_quads =num_online_nodes ();
@@ -491,7 +474,7 @@ static struct apic __refdata apic_numaq = { .check_apicid_used = numaq_check_apicid_used, .check_apicid_present = numaq_check_apicid_present, - .vector_allocation_domain = numaq_vector_allocation_domain, + .vector_allocation_domain = flat_vector_allocation_domain, .init_apic_ldr = numaq_init_apic_ldr, .ioapic_phys_id_map = numaq_ioapic_phys_id_map,
@@ -509,7 +492,6 @@ static struct apic __refdata apic_numaq = { .set_apic_id = NULL, .apic_id_mask = 0x0F << 24, - .cpu_mask_to_apicid = numaq_cpu_mask_to_apicid, .cpu_mask_to_apicid_and = numaq_cpu_mask_to_apicid_and, .send_IPI_mask = numaq_send_IPI_mask,
arch/x86/kernel/apic/probe_32.c +5 -18
@@ -66,21 +66,6 @@ static void setup_apic_flat_routing(void)#endif } -static void default_vector_allocation_domain (int cpu,struct cpumask *retmask) -{ -/* -* Careful. Some cpus do not strictly honor the set of cpus -* specified in the interrupt destination when using lowest -* priority interrupt delivery mode. -* -* In particular there was a hyperthreading cpu observed to -* deliver interrupts to the wrong hyperthread when only one -* hyperthread was specified in the interrupt desitination. -*/ -cpumask_clear (retmask); -cpumask_bits (retmask)[0 ] =APIC_ALL_CPUS ; -} -/* should be called last. */ static int probe_default (void ) {
@@ -105,7 +90,7 @@ static struct apic apic_default = { .check_apicid_used = default_check_apicid_used, .check_apicid_present = default_check_apicid_present, - .vector_allocation_domain = default_vector_allocation_domain, + .vector_allocation_domain = flat_vector_allocation_domain, .init_apic_ldr = default_init_apic_ldr, .ioapic_phys_id_map = default_ioapic_phys_id_map,
@@ -123,8 +108,7 @@ static struct apic apic_default = { .set_apic_id = NULL, .apic_id_mask = 0x0F << 24, - .cpu_mask_to_apicid = default_cpu_mask_to_apicid, - .cpu_mask_to_apicid_and = default_cpu_mask_to_apicid_and, + .cpu_mask_to_apicid_and = flat_cpu_mask_to_apicid_and, .send_IPI_mask = default_send_IPI_mask_logical, .send_IPI_mask_allbutself = default_send_IPI_mask_allbutself_logical,
@@ -208,6 +192,9 @@ void __init default_setup_apic_routing(void)if (apic->setup_apic_routing) apic->setup_apic_routing (); + +if (x86_platform.apic_post_init) + x86_platform.apic_post_init (); }void __init generic_apic_probe (void )
arch/x86/kernel/apic/probe_64.c +2 -9
@@ -23,11 +23,6 @@#include <asm/ipi.h> #include <asm/setup.h> -static int apicid_phys_pkg_id (int initial_apic_id,int index_msb) -{ -return hard_smp_processor_id () >> index_msb; -} -/* * Check the APIC IDs in bios_cpu_apicid and choose the APIC mode. */
@@ -48,10 +43,8 @@ void __init default_setup_apic_routing(void) } } -if (is_vsmp_box ()) { -/* need to update phys_pkg_id */ - apic->phys_pkg_id = apicid_phys_pkg_id; - } +if (x86_platform.apic_post_init) + x86_platform.apic_post_init (); }/* Same for both flat and physical. */
arch/x86/kernel/apic/summit_32.c +18 -28
95 lines not on this page · raw message
arch/x86/kernel/apic/x2apic_cluster.c +54 -28
123 lines not on this page · raw message
arch/x86/kernel/apic/x2apic_phys.c +3 -36
@@ -76,38 +76,6 @@ static void x2apic_send_IPI_all(int vector)__x2apic_send_IPI_mask (cpu_online_mask, vector,APIC_DEST_ALLINC ); } -static unsigned int x2apic_cpu_mask_to_apicid (const struct cpumask *cpumask) -{ -/* -* We're using fixed IRQ delivery, can only return one phys APIC ID. -* May as well be the first. -*/ -int cpu =cpumask_first (cpumask); - -if ((unsigned )cpu < nr_cpu_ids) -return per_cpu (x86_cpu_to_apicid, cpu); -else -return BAD_APICID ; -} - -static unsigned int -x2apic_cpu_mask_to_apicid_and (const struct cpumask *cpumask, -const struct cpumask *andmask) -{ -int cpu; - -/* -* We're using fixed IRQ delivery, can only return one phys APIC ID. -* May as well be the first. -*/ -for_each_cpu_and (cpu, cpumask, andmask) { -if (cpumask_test_cpu (cpu, cpu_online_mask)) -break ; - } - -return per_cpu (x86_cpu_to_apicid, cpu); -} -static void init_x2apic_ldr (void ) { }
@@ -131,13 +99,13 @@ static struct apic apic_x2apic_phys = { .irq_delivery_mode = dest_Fixed, .irq_dest_mode = 0, /* physical */ - .target_cpus = x2apic_target_cpus, + .target_cpus = online_target_cpus, .disable_esr = 0, .dest_logical = 0, .check_apicid_used = NULL, .check_apicid_present = NULL, - .vector_allocation_domain = x2apic_vector_allocation_domain, + .vector_allocation_domain = default_vector_allocation_domain, .init_apic_ldr = init_x2apic_ldr, .ioapic_phys_id_map = NULL,
@@ -155,8 +123,7 @@ static struct apic apic_x2apic_phys = { .set_apic_id = x2apic_set_apic_id, .apic_id_mask = 0xFFFFFFFFu, - .cpu_mask_to_apicid = x2apic_cpu_mask_to_apicid, - .cpu_mask_to_apicid_and = x2apic_cpu_mask_to_apicid_and, + .cpu_mask_to_apicid_and = default_cpu_mask_to_apicid_and, .send_IPI_mask = x2apic_send_IPI_mask, .send_IPI_mask_allbutself = x2apic_send_IPI_mask_allbutself,
arch/x86/kernel/apic/x2apic_uv_x.c +13 -32
82 lines not on this page · raw message
arch/x86/kernel/setup.c +0 -2
@@ -1031,8 +1031,6 @@ void __init setup_arch(char **cmdline_p) x86_init.timers.wallclock_init (); - x86_platform.wallclock_init (); -mcheck_init ();arch_init_ideal_nops ();
arch/x86/kernel/vsmp_64.c +40 -4
76 lines not on this page · raw message
arch/x86/kernel/x86_init.c +0 -2
@@ -29,7 +29,6 @@ void __init x86_init_uint_noop(unsigned int unused) { }void __init x86_init_pgd_noop (pgd_t *unused) { }int __init iommu_init_noop (void ) {return 0 ; }void iommu_shutdown_noop (void ) { } -void wallclock_init_noop (void ) { }/* * The platform setup functions are preset with the default functions
@@ -101,7 +100,6 @@ static int default_i8042_detect(void) { return 1; };struct x86_platform_ops x86_platform = { .calibrate_tsc = native_calibrate_tsc, - .wallclock_init = wallclock_init_noop, .get_wallclock = mach_get_cmos_time, .set_wallclock = mach_set_rtc_mmss, .iommu_shutdown = iommu_shutdown_noop,
arch/x86/platform/uv/uv_irq.c +7 -2
@@ -135,6 +135,7 @@ arch_enable_uv_irq(char *irq_name, unsigned int irq, int cpu, int mmr_blade,unsigned long mmr_value;struct uv_IO_APIC_route_entry *entry;int mmr_pnode, err; +unsigned int dest;BUILD_BUG_ON (sizeof (struct uv_IO_APIC_route_entry ) !=sizeof (unsigned long ));
@@ -143,6 +144,10 @@ arch_enable_uv_irq(char *irq_name, unsigned int irq, int cpu, int mmr_blade,if (err !=0 )return err; + err = apic->cpu_mask_to_apicid_and (eligible_cpu, eligible_cpu, &dest); +if (err !=0 ) +return err; +if (limit ==UV_AFFINITY_CPU )irq_set_status_flags (irq,IRQ_NO_BALANCING );else
@@ -159,7 +164,7 @@ arch_enable_uv_irq(char *irq_name, unsigned int irq, int cpu, int mmr_blade, entry->polarity =0 ; entry->trigger =0 ; entry->mask =0 ; - entry->dest = apic->cpu_mask_to_apicid (eligible_cpu); + entry->dest = dest; mmr_pnode =uv_blade_to_pnode (mmr_blade);uv_write_global_mmr64 (mmr_pnode, mmr_offset, mmr_value);
@@ -222,7 +227,7 @@ uv_set_irq_affinity(struct irq_data *data, const struct cpumask *mask,if (cfg->move_in_progress)send_cleanup_vector (cfg); -return 0 ; +return IRQ_SET_MASK_OK_NOCOPY ; }/*
drivers/iommu/intel_irq_remapping.c +13 -7
@@ -902,7 +902,6 @@ static int intel_setup_ioapic_entry(int irq,return 0 ; } -#ifdef CONFIG_SMP /* * Migrate the IO-APIC irq in the presence of intr-remapping. *
@@ -924,6 +923,10 @@ intel_ioapic_set_affinity(struct irq_data *data, const struct cpumask *mask,struct irq_cfg *cfg = data->chip_data;unsigned int dest, irq = data->irq;struct irte irte; +int err; + +if (!config_enabled (CONFIG_SMP )) +return -EINVAL ;if (!cpumask_intersects (mask, cpu_online_mask))return -EINVAL ;
@@ -931,10 +934,16 @@ intel_ioapic_set_affinity(struct irq_data *data, const struct cpumask *mask,if (get_irte (irq, &irte))return -EBUSY ; -if (assign_irq_vector (irq, cfg, mask)) -return -EBUSY ; + err =assign_irq_vector (irq, cfg, mask); +if (err) +return err; - dest = apic->cpu_mask_to_apicid_and (cfg->domain, mask); + err = apic->cpu_mask_to_apicid_and (cfg->domain, mask, &dest); +if (err) { +if (assign_irq_vector (irq, cfg, data->affinity)) +pr_err ("Failed to recover vector for irq %d\n" , irq); +return err; + } irte.vector = cfg->vector; irte.dest_id =IRTE_DEST (dest);
@@ -956,7 +965,6 @@ intel_ioapic_set_affinity(struct irq_data *data, const struct cpumask *mask,cpumask_copy (data->affinity, mask);return 0 ; } -#endif static void intel_compose_msi_msg(struct pci_dev *pdev, unsigned int irq, unsigned int dest,
@@ -1058,9 +1066,7 @@ struct irq_remap_ops intel_irq_remap_ops = { .reenable = reenable_irq_remapping, .enable_faulting = enable_drhd_fault_handling, .setup_ioapic_entry = intel_setup_ioapic_entry, -#ifdef CONFIG_SMP .set_affinity = intel_ioapic_set_affinity, -#endif .free_irq = free_irte, .compose_msi_msg = intel_compose_msi_msg, .msi_alloc_irq = intel_msi_alloc_irq,
drivers/iommu/irq_remapping.c +2 -3
@@ -111,16 +111,15 @@ int setup_ioapic_remapped_entry(int irq, vector, attr); } -#ifdef CONFIG_SMP int set_remapped_irq_affinity (struct irq_data *data,const struct cpumask *mask,bool force) { -if (!remap_ops || !remap_ops->set_affinity) +if (!config_enabled (CONFIG_SMP ) || !remap_ops || + !remap_ops->set_affinity)return 0 ;return remap_ops->set_affinity (data, mask, force); } -#endif void free_remapped_irq (int irq) {
drivers/iommu/irq_remapping.h +0 -2
@@ -59,11 +59,9 @@ struct irq_remap_ops { unsigned int, int, struct io_apic_irq_attr *); -#ifdef CONFIG_SMP /* Set the CPU affinity of a remapped interrupt */ int (*set_affinity)(struct irq_data *data,const struct cpumask *mask,bool force); -#endif /* Free an IRQ */ int (*free_irq)(int );
include/linux/irq.h +0 -2
@@ -150,9 +150,7 @@ struct irq_data {void *handler_data;void *chip_data;struct msi_desc *msi_desc; -#ifdef CONFIG_SMP cpumask_var_t affinity; -#endif };/*