Message ID | 5CF14DA40200007800234108@prv1-mh.provo.novell.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | AMD/IOMMU: initialize IRQ tasklet only once | expand |
On 31/05/2019 08:52, Jan Beulich wrote: > Don't do this once per IOMMU, nor after setting up the IOMMU interrupt > (which will want to schedule this tasklet). In fact it can be > initialized at build time. > > Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
On Fri, May 31, 2019 at 09:52:04AM -0600, Jan Beulich wrote: > [CAUTION: External Email] > > Don't do this once per IOMMU, nor after setting up the IOMMU interrupt > (which will want to schedule this tasklet). In fact it can be > initialized at build time. > > Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Brian Woods <brian.woods@amd.com> > --- a/xen/drivers/passthrough/amd/iommu_init.c > +++ b/xen/drivers/passthrough/amd/iommu_init.c > @@ -31,7 +31,8 @@ > > static int __initdata nr_amd_iommus; > > -static struct tasklet amd_iommu_irq_tasklet; > +static void do_amd_iommu_irq(unsigned long data); > +static DECLARE_SOFTIRQ_TASKLET(amd_iommu_irq_tasklet, do_amd_iommu_irq, 0); > > unsigned int __read_mostly ivrs_bdf_entries; > u8 __read_mostly ivhd_type; > @@ -1056,8 +1057,6 @@ static int __init amd_iommu_init_one(str > printk("AMD-Vi: IOMMU %d Enabled.\n", nr_amd_iommus ); > nr_amd_iommus++; > > - softirq_tasklet_init(&amd_iommu_irq_tasklet, do_amd_iommu_irq, 0); > - > return 0; > > error_out: > >
--- a/xen/drivers/passthrough/amd/iommu_init.c +++ b/xen/drivers/passthrough/amd/iommu_init.c @@ -31,7 +31,8 @@ static int __initdata nr_amd_iommus; -static struct tasklet amd_iommu_irq_tasklet; +static void do_amd_iommu_irq(unsigned long data); +static DECLARE_SOFTIRQ_TASKLET(amd_iommu_irq_tasklet, do_amd_iommu_irq, 0); unsigned int __read_mostly ivrs_bdf_entries; u8 __read_mostly ivhd_type; @@ -1056,8 +1057,6 @@ static int __init amd_iommu_init_one(str printk("AMD-Vi: IOMMU %d Enabled.\n", nr_amd_iommus ); nr_amd_iommus++; - softirq_tasklet_init(&amd_iommu_irq_tasklet, do_amd_iommu_irq, 0); - return 0; error_out:
Don't do this once per IOMMU, nor after setting up the IOMMU interrupt (which will want to schedule this tasklet). In fact it can be initialized at build time. Signed-off-by: Jan Beulich <jbeulich@suse.com>