lkml.org 
[lkml]   [2019]   [Apr]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [Xen-devel] [PATCH 1/3] xen/swiotlb: fix condition for calling xen_destroy_contiguous_region()
    >>> On 23.04.19 at 12:54, <jgross@suse.com> wrote:
    > --- a/drivers/xen/swiotlb-xen.c
    > +++ b/drivers/xen/swiotlb-xen.c
    > @@ -360,8 +360,8 @@ xen_swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,
    > /* Convert the size to actually allocated. */
    > size = 1UL << (order + XEN_PAGE_SHIFT);
    >
    > - if (((dev_addr + size - 1 <= dma_mask)) ||
    > - range_straddles_page_boundary(phys, size))
    > + if ((dev_addr + size - 1 <= dma_mask) &&
    > + !WARN_ON(range_straddles_page_boundary(phys, size)))
    > xen_destroy_contiguous_region(phys, order);

    On the allocation side we have

    if (((dev_addr + size - 1 <= dma_mask)) &&
    !range_straddles_page_boundary(phys, size))
    *dma_handle = dev_addr;
    else {
    if (xen_create_contiguous_region(phys, order,
    fls64(dma_mask), dma_handle) != 0) {
    xen_free_coherent_pages(hwdev, size, ret, (dma_addr_t)phys, attrs);
    return NULL;
    }
    }

    which is (as far as the function call is concerned)

    if ((dev_addr + size - 1 > dma_mask) ||
    range_straddles_page_boundary(phys, size))
    xen_create_contiguous_region(...);

    So I don't think your transformation is correct. Even worse, both
    parts of the condition in xen_swiotlb_free_coherent() act on an
    address that is the _result_ of the prior
    xen_create_contiguous_region(), i.e. the address should always
    match _both_ criteria anyway. Whereas what you really want is
    undo the xen_create_contiguous_region() only when it actually
    was called. Otherwise you also shatter contiguous allocations
    that were contiguous already for other reasons (perhaps just
    luck).

    Jan


    \
     
     \ /
      Last update: 2019-04-25 10:54    [W:2.807 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site