Message ID | 1410444228-3134-4-git-send-email-jiang.liu@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, 11 Sep 2014, Jiang Liu wrote: > Cache destination CPU APIC ID into struct irq_cfg when assigning vector > for interrupt. Upper layer just needs to read the cached APIC ID instead > of calling apic->cpu_mask_to_apicid_and(), it helps to hide APIC driver > details from IOAPIC/HPET/MSI drivers.. > > Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com> > --- > arch/x86/include/asm/hw_irq.h | 1 + > arch/x86/kernel/apic/vector.c | 4 ++++ > 2 files changed, 5 insertions(+) > > diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h > index 7624fffc2822..3d51d74d6c01 100644 > --- a/arch/x86/include/asm/hw_irq.h > +++ b/arch/x86/include/asm/hw_irq.h > @@ -116,6 +116,7 @@ struct irq_data; > struct irq_cfg { > cpumask_var_t domain; > cpumask_var_t old_domain; > + unsigned int dest_apicid; > u8 vector; > u8 move_in_progress : 1; > #ifdef CONFIG_IRQ_REMAP > diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c > index 7562cb15b3bd..287ae4e8d500 100644 > --- a/arch/x86/kernel/apic/vector.c > +++ b/arch/x86/kernel/apic/vector.c > @@ -188,6 +188,10 @@ next: > } > free_cpumask_var(tmp_mask); Lacks a comment what this call is actually doing. > + if (!err) > + err = apic->cpu_mask_to_apicid_and(mask, cfg->domain, > + &cfg->dest_apicid); > + Thanks, tglx
On 2014/9/17 1:47, Thomas Gleixner wrote: > > > On Thu, 11 Sep 2014, Jiang Liu wrote: > >> Cache destination CPU APIC ID into struct irq_cfg when assigning vector >> for interrupt. Upper layer just needs to read the cached APIC ID instead >> of calling apic->cpu_mask_to_apicid_and(), it helps to hide APIC driver >> details from IOAPIC/HPET/MSI drivers.. >> >> Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com> >> --- >> arch/x86/include/asm/hw_irq.h | 1 + >> arch/x86/kernel/apic/vector.c | 4 ++++ >> 2 files changed, 5 insertions(+) >> >> diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h >> index 7624fffc2822..3d51d74d6c01 100644 >> --- a/arch/x86/include/asm/hw_irq.h >> +++ b/arch/x86/include/asm/hw_irq.h >> @@ -116,6 +116,7 @@ struct irq_data; >> struct irq_cfg { >> cpumask_var_t domain; >> cpumask_var_t old_domain; >> + unsigned int dest_apicid; >> u8 vector; >> u8 move_in_progress : 1; >> #ifdef CONFIG_IRQ_REMAP >> diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c >> index 7562cb15b3bd..287ae4e8d500 100644 >> --- a/arch/x86/kernel/apic/vector.c >> +++ b/arch/x86/kernel/apic/vector.c >> @@ -188,6 +188,10 @@ next: >> } >> free_cpumask_var(tmp_mask); > > Lacks a comment what this call is actually doing. How about this? /* cache destination APIC IDs into cfg->dest_apicid */ Regards! Gerry > >> + if (!err) >> + err = apic->cpu_mask_to_apicid_and(mask, cfg->domain, >> + &cfg->dest_apicid); >> + > > Thanks, > > tglx >
diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h index 7624fffc2822..3d51d74d6c01 100644 --- a/arch/x86/include/asm/hw_irq.h +++ b/arch/x86/include/asm/hw_irq.h @@ -116,6 +116,7 @@ struct irq_data; struct irq_cfg { cpumask_var_t domain; cpumask_var_t old_domain; + unsigned int dest_apicid; u8 vector; u8 move_in_progress : 1; #ifdef CONFIG_IRQ_REMAP diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c index 7562cb15b3bd..287ae4e8d500 100644 --- a/arch/x86/kernel/apic/vector.c +++ b/arch/x86/kernel/apic/vector.c @@ -188,6 +188,10 @@ next: } free_cpumask_var(tmp_mask); + if (!err) + err = apic->cpu_mask_to_apicid_and(mask, cfg->domain, + &cfg->dest_apicid); + return err; }
Cache destination CPU APIC ID into struct irq_cfg when assigning vector for interrupt. Upper layer just needs to read the cached APIC ID instead of calling apic->cpu_mask_to_apicid_and(), it helps to hide APIC driver details from IOAPIC/HPET/MSI drivers.. Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com> --- arch/x86/include/asm/hw_irq.h | 1 + arch/x86/kernel/apic/vector.c | 4 ++++ 2 files changed, 5 insertions(+)