drivers/dma/idxd/device.c | 1 - 1 file changed, 1 deletion(-)
From: Minghao Chi <chi.minghao@zte.com.cn>
Calling synchronize_irq() right before free_irq() is quite useless. On one
hand the IRQ can easily fire again before free_irq() is entered, on the
other hand free_irq() itself calls synchronize_irq() internally (in a race
condition free way) before any state associated with the IRQ is freed.
Reported-by: Zeal Robot <zealci@zte.com.cn>
Signed-off-by: Minghao Chi <chi.minghao@zte.com.cn>
---
drivers/dma/idxd/device.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/dma/idxd/device.c b/drivers/dma/idxd/device.c
index 5363fb9218f2..9dd8e6bb21e6 100644
--- a/drivers/dma/idxd/device.c
+++ b/drivers/dma/idxd/device.c
@@ -1179,7 +1179,6 @@ void idxd_wq_free_irq(struct idxd_wq *wq)
struct idxd_device *idxd = wq->idxd;
struct idxd_irq_entry *ie = &wq->ie;
- synchronize_irq(ie->vector);
free_irq(ie->vector, ie);
idxd_flush_pending_descs(ie);
if (idxd->request_int_handles)
--
2.25.1
On 13-05-22, 08:16, cgel.zte@gmail.com wrote: > From: Minghao Chi <chi.minghao@zte.com.cn> > > Calling synchronize_irq() right before free_irq() is quite useless. On one > hand the IRQ can easily fire again before free_irq() is entered, on the > other hand free_irq() itself calls synchronize_irq() internally (in a race > condition free way) before any state associated with the IRQ is freed. > > Reported-by: Zeal Robot <zealci@zte.com.cn> where is this report...? > Signed-off-by: Minghao Chi <chi.minghao@zte.com.cn> > --- > drivers/dma/idxd/device.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/drivers/dma/idxd/device.c b/drivers/dma/idxd/device.c > index 5363fb9218f2..9dd8e6bb21e6 100644 > --- a/drivers/dma/idxd/device.c > +++ b/drivers/dma/idxd/device.c > @@ -1179,7 +1179,6 @@ void idxd_wq_free_irq(struct idxd_wq *wq) > struct idxd_device *idxd = wq->idxd; > struct idxd_irq_entry *ie = &wq->ie; > > - synchronize_irq(ie->vector); > free_irq(ie->vector, ie); > idxd_flush_pending_descs(ie); > if (idxd->request_int_handles) > -- > 2.25.1 > -- ~Vinod
From: Minghao Chi <chi.minghao@zte.com.cn>
Calling synchronize_irq() right before free_irq() is quite useless. On one
hand the IRQ can easily fire again before free_irq() is entered, on the
other hand free_irq() itself calls synchronize_irq() internally (in a race
condition free way), before any state associated with the IRQ is freed.
Signed-off-by: Minghao Chi <chi.minghao@zte.com.cn>
---
v1->v2:
remove Reported-by: Zeal Robot <zealci@zte.com.cn>
drivers/dma/idxd/device.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/dma/idxd/device.c b/drivers/dma/idxd/device.c
index 5363fb9218f2..9dd8e6bb21e6 100644
--- a/drivers/dma/idxd/device.c
+++ b/drivers/dma/idxd/device.c
@@ -1179,7 +1179,6 @@ void idxd_wq_free_irq(struct idxd_wq *wq)
struct idxd_device *idxd = wq->idxd;
struct idxd_irq_entry *ie = &wq->ie;
- synchronize_irq(ie->vector);
free_irq(ie->vector, ie);
idxd_flush_pending_descs(ie);
if (idxd->request_int_handles)
--
2.25.1
On 16-05-22, 11:54, cgel.zte@gmail.com wrote: > From: Minghao Chi <chi.minghao@zte.com.cn> > > Calling synchronize_irq() right before free_irq() is quite useless. On one > hand the IRQ can easily fire again before free_irq() is entered, on the > other hand free_irq() itself calls synchronize_irq() internally (in a race > condition free way), before any state associated with the IRQ is freed. You should not have missed Dave's ack. I have added that and pushed -- ~Vinod
On 5/13/2022 1:16 AM, cgel.zte@gmail.com wrote: > From: Minghao Chi <chi.minghao@zte.com.cn> > > Calling synchronize_irq() right before free_irq() is quite useless. On one > hand the IRQ can easily fire again before free_irq() is entered, on the > other hand free_irq() itself calls synchronize_irq() internally (in a race > condition free way) before any state associated with the IRQ is freed. Fair enough. Thanks. Acked-by: Dave Jiang <dave.jiang@intel.com> > > Reported-by: Zeal Robot <zealci@zte.com.cn> > Signed-off-by: Minghao Chi <chi.minghao@zte.com.cn> > --- > drivers/dma/idxd/device.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/drivers/dma/idxd/device.c b/drivers/dma/idxd/device.c > index 5363fb9218f2..9dd8e6bb21e6 100644 > --- a/drivers/dma/idxd/device.c > +++ b/drivers/dma/idxd/device.c > @@ -1179,7 +1179,6 @@ void idxd_wq_free_irq(struct idxd_wq *wq) > struct idxd_device *idxd = wq->idxd; > struct idxd_irq_entry *ie = &wq->ie; > > - synchronize_irq(ie->vector); > free_irq(ie->vector, ie); > idxd_flush_pending_descs(ie); > if (idxd->request_int_handles) > -- > 2.25.1 > >
© 2016 - 2026 Red Hat, Inc.