lkml.org 
[lkml]   [2022]   [Mar]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH RFC 10/11] iommu: Make IOPF handling framework generic
    On Sun, Mar 20, 2022 at 02:40:29PM +0800, Lu Baolu wrote:

    > +static enum iommu_page_response_code
    > +iommu_sva_handle_iopf(struct iommu_fault *fault, void *data)
    > +{
    > + vm_fault_t ret;
    > + struct mm_struct *mm;
    > + struct vm_area_struct *vma;
    > + unsigned int access_flags = 0;
    > + struct iommu_domain *domain = data;

    Why is the iommu_domain not passed in as a fully typed object? I would
    think data should some opaque value used by non-sva cases.

    What is the lifetime model here anyhow?

    > + unsigned int fault_flags = FAULT_FLAG_REMOTE;
    > + struct iommu_fault_page_request *prm = &fault->prm;
    > + enum iommu_page_response_code status = IOMMU_PAGE_RESP_INVALID;
    > +
    > + if (!(prm->flags & IOMMU_FAULT_PAGE_REQUEST_PASID_VALID))
    > + return status;
    > +
    > + mm = domain->sva_cookie;
    > + if (IS_ERR_OR_NULL(mm))

    Do not use this function

    Do not store err pointers in structs.

    > +out_put_mm:
    > + mmap_read_unlock(mm);
    > + mmput(mm);

    mm structs are weird, they have two refcounts.

    The 'sva_cookie' should hold a mmgrab/mmdrop() refcount to keep the
    pointer alive but to touch the mmap lock you have to upgrade it to a
    refcount that prevents destruction using mmget_not_zero() just for
    this short period.

    Jason

    \
     
     \ /
      Last update: 2022-03-21 13:52    [W:3.563 / U:2.772 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site