[PATCH] iommu/amd: Ensure GA log notifier callbacks finish running before module unload

Sean Christopherson posted 1 patch 9 months, 1 week ago
drivers/iommu/amd/iommu.c | 8 ++++++++
1 file changed, 8 insertions(+)
[PATCH] iommu/amd: Ensure GA log notifier callbacks finish running before module unload
Posted by Sean Christopherson 9 months, 1 week ago
Synchronize RCU when unregistering KVM's GA log notifier to ensure all
in-flight interrupt handlers complete before KVM-the module is unloaded.

Signed-off-by: Sean Christopherson <seanjc@google.com>
---
 drivers/iommu/amd/iommu.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
index b48a72bd7b23..b314523d9194 100644
--- a/drivers/iommu/amd/iommu.c
+++ b/drivers/iommu/amd/iommu.c
@@ -982,6 +982,14 @@ int amd_iommu_register_ga_log_notifier(int (*notifier)(u32))
 {
 	iommu_ga_log_notifier = notifier;
 
+	/*
+	 * Ensure all in-flight IRQ handlers run to completion before returning
+	 * to the caller, e.g. to ensure module code isn't unloaded while it's
+	 * being executed in the IRQ handler.
+	 */
+	if (!notifier)
+		synchronize_rcu();
+
 	return 0;
 }
 EXPORT_SYMBOL(amd_iommu_register_ga_log_notifier);

base-commit: ea9bd29a9c0d757b3384ae3e633e6bbaddf00725
-- 
2.49.0.rc1.451.g8f38331e32-goog
Re: [PATCH] iommu/amd: Ensure GA log notifier callbacks finish running before module unload
Posted by Hou Wenlong 3 months ago
On Fri, Mar 14, 2025 at 08:10:48PM -0700, Sean Christopherson wrote:
> Synchronize RCU when unregistering KVM's GA log notifier to ensure all
> in-flight interrupt handlers complete before KVM-the module is unloaded.
> 
> Signed-off-by: Sean Christopherson <seanjc@google.com>
> ---
>  drivers/iommu/amd/iommu.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
> index b48a72bd7b23..b314523d9194 100644
> --- a/drivers/iommu/amd/iommu.c
> +++ b/drivers/iommu/amd/iommu.c
> @@ -982,6 +982,14 @@ int amd_iommu_register_ga_log_notifier(int (*notifier)(u32))
>  {
>  	iommu_ga_log_notifier = notifier;
>  
> +	/*
> +	 * Ensure all in-flight IRQ handlers run to completion before returning
> +	 * to the caller, e.g. to ensure module code isn't unloaded while it's
> +	 * being executed in the IRQ handler.
> +	 */
> +	if (!notifier)
> +		synchronize_rcu();
> +
>  	return 0;
>  }
>  EXPORT_SYMBOL(amd_iommu_register_ga_log_notifier);
> 
> base-commit: ea9bd29a9c0d757b3384ae3e633e6bbaddf00725
> -- 
> 2.49.0.rc1.451.g8f38331e32-goog
> 
>
Hi Sean,

Sorry to bother you. I'm reworking the hardware_setup() path in our
internal multi-KVM, but I didn't see any usage of
'amd_iommu_register_ga_log_notifier(NULL)' in the KVM code for now. Has
it not been committed?

Thanks!
Re: [PATCH] iommu/amd: Ensure GA log notifier callbacks finish running before module unload
Posted by Sean Christopherson 2 months, 1 week ago
On Thu, Sep 18, 2025, Hou Wenlong wrote:
> On Fri, Mar 14, 2025 at 08:10:48PM -0700, Sean Christopherson wrote:
> > Synchronize RCU when unregistering KVM's GA log notifier to ensure all
> > in-flight interrupt handlers complete before KVM-the module is unloaded.
> > 
> > Signed-off-by: Sean Christopherson <seanjc@google.com>
> > ---
> >  drivers/iommu/amd/iommu.c | 8 ++++++++
> >  1 file changed, 8 insertions(+)
> > 
> > diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
> > index b48a72bd7b23..b314523d9194 100644
> > --- a/drivers/iommu/amd/iommu.c
> > +++ b/drivers/iommu/amd/iommu.c
> > @@ -982,6 +982,14 @@ int amd_iommu_register_ga_log_notifier(int (*notifier)(u32))
> >  {
> >  	iommu_ga_log_notifier = notifier;
> >  
> > +	/*
> > +	 * Ensure all in-flight IRQ handlers run to completion before returning
> > +	 * to the caller, e.g. to ensure module code isn't unloaded while it's
> > +	 * being executed in the IRQ handler.
> > +	 */
> > +	if (!notifier)
> > +		synchronize_rcu();
> > +
> >  	return 0;
> >  }
> >  EXPORT_SYMBOL(amd_iommu_register_ga_log_notifier);
> > 
> > base-commit: ea9bd29a9c0d757b3384ae3e633e6bbaddf00725
> > -- 
> > 2.49.0.rc1.451.g8f38331e32-goog
> > 
> >
> Hi Sean,
> 
> Sorry to bother you. I'm reworking the hardware_setup() path in our
> internal multi-KVM, but I didn't see any usage of
> 'amd_iommu_register_ga_log_notifier(NULL)' in the KVM code for now. Has
> it not been committed?

Huh.  I completely forgot to send (or even write?) the patch.  I'll send one
shortly.

Thanks much!
Re: [PATCH] iommu/amd: Ensure GA log notifier callbacks finish running before module unload
Posted by Joerg Roedel 1 month, 3 weeks ago
On Tue, Oct 07, 2025 at 10:54:41AM -0700, Sean Christopherson wrote:
> Huh.  I completely forgot to send (or even write?) the patch.  I'll send one
> shortly.

When you do, can you please add

	Vasant Hegde <vasant.hegde@amd.com> and
	Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>

on Cc as well? Their reviews are important in moving this forward.

Thanks,

	Joerg
Re: [PATCH] iommu/amd: Ensure GA log notifier callbacks finish running before module unload
Posted by Joerg Roedel 7 months, 3 weeks ago
On Fri, Mar 14, 2025 at 08:10:48PM -0700, Sean Christopherson wrote:
>  drivers/iommu/amd/iommu.c | 8 ++++++++
>  1 file changed, 8 insertions(+)

Applied, thanks.