On Tue, Jul 05, 2022 at 11:27:55PM -0700, Nicolin Chen wrote: > The vfio_ap_ops code maintains both nib address and its PFN, which > is redundant, merely because vfio_pin/unpin_pages API wanted pfn. > Since vfio_pin/unpin_pages() now accept "iova", remove duplicated > pfn code in their callers too. I would describe this as renaming saved_pfn to saved_iova > * > * @vcpu: the object representing the vcpu executing the PQAP(AQIC) instruction. > * @nib: the location for storing the nib address. > - * @g_pfn: the location for storing the page frame number of the page containing > - * the nib. > * > * When the PQAP(AQIC) instruction is executed, general register 2 contains the > * address of the notification indicator byte (nib) used for IRQ notification. > - * This function parses the nib from gr2 and calculates the page frame > - * number for the guest of the page containing the nib. The values are > - * stored in @nib and @g_pfn respectively. > - * > - * The g_pfn of the nib is then validated to ensure the nib address is valid. > + * This function parses and validate the nib from gr2. > * > * Return: returns zero if the nib address is a valid; otherwise, returns > * -EINVAL. > */ > -static int vfio_ap_validate_nib(struct kvm_vcpu *vcpu, unsigned long *nib, > - unsigned long *g_pfn) > +static int vfio_ap_validate_nib(struct kvm_vcpu *vcpu, dma_addr_t *nib) > { > *nib = vcpu->run->s.regs.gprs[2]; > - *g_pfn = *nib >> PAGE_SHIFT; > > - if (kvm_is_error_hva(gfn_to_hva(vcpu->kvm, *g_pfn))) > + if (kvm_is_error_hva(gfn_to_hva(vcpu->kvm, *nib >> PAGE_SHIFT))) > return -EINVAL; This existing code is fishy. nib is either an IOVA passed to vfio_pin_pages() or a GFN passed to gfn_to_hva(). These are not the same thing and are not interchangable - writing code like this assumes that the guest is running with iommu=pt or no iommu. Someone should look at it.. Otherwise it looks OK Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx> Jason