lkml.org 
[lkml]   [2022]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFT][PATCH v2 5/9] vfio/ap: Remove redundant pfn
    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@nvidia.com>

    Jason

    \
     
     \ /
      Last update: 2022-07-06 19:55    [W:2.204 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site