On Fri, Dec 30, 2022 at 12:53:31PM +0100, Borislav Petkov wrote: > On Wed, Dec 14, 2022 at 01:39:58PM -0600, Michael Roth wrote: > > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c > > index a0c41d391547..2713632e5061 100644 > > --- a/arch/x86/kvm/mmu/mmu.c > > +++ b/arch/x86/kvm/mmu/mmu.c > > @@ -7183,3 +7183,8 @@ void kvm_arch_set_memory_attributes(struct kvm *kvm, > > kvm_update_lpage_private_shared_mixed(kvm, slot, attrs, > > start, end); > > } > > + > > +void kvm_arch_invalidate_restricted_mem(struct kvm_memory_slot *slot, gfn_t start, gfn_t end) > > +{ > > + static_call_cond(kvm_x86_invalidate_restricted_mem)(slot, start, end); > > Why _cond? Since this hook is declared via KVM_X86_OP_OPTIONAL() (instead of KVM_X86_OP_OPTIONAL_RET0 like the previous hooks), the comment in kvm-x86-ops.h suggests this should be called via static_call_cond(): /* * KVM_X86_OP() and KVM_X86_OP_OPTIONAL() are used to help generate * both DECLARE/DEFINE_STATIC_CALL() invocations and * "static_call_update()" calls. * * KVM_X86_OP_OPTIONAL() can be used for those functions that can have * a NULL definition, for example if "static_call_cond()" will be used * at the call sites. KVM_X86_OP_OPTIONAL_RET0() can be used likewise * to make a definition optional, but in this case the default will * be __static_call_return0. */ > > > @@ -258,6 +263,17 @@ void restrictedmem_unregister_notifier(struct file *file, > > struct restrictedmem_notifier *notifier) > > { > > struct restrictedmem_data *data = file->f_mapping->private_data; > > + struct inode *inode = file_inode(data->memfd); > > + > > + /* TODO: this will issue notifications to all registered notifiers, > > First of all: > > verify_comment_style: WARNING: Multi-line comment needs to start text on the second line: > [+ /* TODO: this will issue notifications to all registered notifiers,] > > Then, if you only want to run the callbacks for the one going away only, > why don't you simply do: > > mutex_lock(&data->lock); > notifier->ops->invalidate_start(notifier, 0, inode->i_size >> PAGE_SHIFT); > notifier->ops->invalidate_end(notifier, 0, inode->i_size >> PAGE_SHIFT); > list_del(¬ifier->list); > mutex_unlock(&data->lock); > > here? That should do the trick. Thanks for the suggestion. -Mike > > -- > Regards/Gruss, > Boris. > > https://people.kernel.org/tglx/notes-about-netiquette