lkml.org 
[lkml]   [2012]   [Sep]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 05/10] xen/swiotlb: Move the error strings to its own function.
    Date
    That way we can more easily reuse those errors when using the
    late SWIOTLB init.

    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    ---
    drivers/xen/swiotlb-xen.c | 35 +++++++++++++++++++++++++++--------
    1 files changed, 27 insertions(+), 8 deletions(-)

    diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
    index a2aad6e..701b103 100644
    --- a/drivers/xen/swiotlb-xen.c
    +++ b/drivers/xen/swiotlb-xen.c
    @@ -154,11 +154,33 @@ static unsigned long xen_set_nslabs(unsigned long nr_tbl)

    return xen_io_tlb_nslabs << IO_TLB_SHIFT;
    }
    +
    +enum xen_swiotlb_err {
    + XEN_SWIOTLB_UNKNOWN = 0,
    + XEN_SWIOTLB_ENOMEM,
    + XEN_SWIOTLB_EFIXUP
    +};
    +
    +static const char *xen_swiotlb_error(enum xen_swiotlb_err err)
    +{
    + switch (err) {
    + case XEN_SWIOTLB_ENOMEM:
    + return "Cannot allocate Xen-SWIOTLB buffer\n";
    + case XEN_SWIOTLB_EFIXUP:
    + return "Failed to get contiguous memory for DMA from Xen!\n"\
    + "You either: don't have the permissions, do not have"\
    + " enough free memory under 4GB, or the hypervisor memory"\
    + " is too fragmented!";
    + default:
    + break;
    + }
    + return "";
    +}
    void __init xen_swiotlb_init(int verbose)
    {
    unsigned long bytes;
    int rc = -ENOMEM;
    - char *m = NULL;
    + enum xen_swiotlb_err m_ret = XEN_SWIOTLB_UNKNOWN;
    unsigned int repeat = 3;

    xen_io_tlb_nslabs = swiotlb_nr_tbl();
    @@ -169,7 +191,7 @@ retry:
    */
    xen_io_tlb_start = alloc_bootmem_pages(PAGE_ALIGN(bytes));
    if (!xen_io_tlb_start) {
    - m = "Cannot allocate Xen-SWIOTLB buffer!\n";
    + m_ret = XEN_SWIOTLB_ENOMEM;
    goto error;
    }
    xen_io_tlb_end = xen_io_tlb_start + bytes;
    @@ -181,10 +203,7 @@ retry:
    xen_io_tlb_nslabs);
    if (rc) {
    free_bootmem(__pa(xen_io_tlb_start), PAGE_ALIGN(bytes));
    - m = "Failed to get contiguous memory for DMA from Xen!\n"\
    - "You either: don't have the permissions, do not have"\
    - " enough free memory under 4GB, or the hypervisor memory"\
    - "is too fragmented!";
    + m_ret = XEN_SWIOTLB_EFIXUP;
    goto error;
    }
    start_dma_addr = xen_virt_to_bus(xen_io_tlb_start);
    @@ -199,8 +218,8 @@ error:
    (xen_io_tlb_nslabs << IO_TLB_SHIFT) >> 20);
    goto retry;
    }
    - xen_raw_printk("%s (rc:%d)", m, rc);
    - panic("%s (rc:%d)", m, rc);
    + xen_raw_printk("%s (rc:%d)", xen_swiotlb_error(m_ret), rc);
    + panic("%s (rc:%d)", xen_swiotlb_error(m_ret), rc);
    }

    void *
    --
    1.7.7.6


    \
     
     \ /
      Last update: 2012-09-11 00:01    [W:0.027 / U:0.968 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site