lkml.org 
[lkml]   [2020]   [Sep]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v7 04/18] PCI: endpoint: Make *_free_bar() to return error codes on failure
    Date
    Modify pci_epc_get_next_free_bar() and pci_epc_get_first_free_bar() to
    return error values if there are no free BARs available.

    Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
    ---
    drivers/pci/endpoint/functions/pci-epf-test.c | 2 ++
    drivers/pci/endpoint/pci-epc-core.c | 12 ++++++------
    include/linux/pci-epc.h | 8 ++++----
    include/linux/pci-epf.h | 1 +
    4 files changed, 13 insertions(+), 10 deletions(-)

    diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c
    index e4e51d884553..7a1f3abfde48 100644
    --- a/drivers/pci/endpoint/functions/pci-epf-test.c
    +++ b/drivers/pci/endpoint/functions/pci-epf-test.c
    @@ -834,6 +834,8 @@ static int pci_epf_test_bind(struct pci_epf *epf)
    linkup_notifier = epc_features->linkup_notifier;
    core_init_notifier = epc_features->core_init_notifier;
    test_reg_bar = pci_epc_get_first_free_bar(epc_features);
    + if (test_reg_bar < 0)
    + return -EINVAL;
    pci_epf_configure_bar(epf, epc_features);
    }

    diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c
    index 1afe5d9afb0d..ea7e7465ce7a 100644
    --- a/drivers/pci/endpoint/pci-epc-core.c
    +++ b/drivers/pci/endpoint/pci-epc-core.c
    @@ -90,8 +90,8 @@ EXPORT_SYMBOL_GPL(pci_epc_get);
    * Invoke to get the first unreserved BAR that can be used by the endpoint
    * function. For any incorrect value in reserved_bar return '0'.
    */
    -unsigned int pci_epc_get_first_free_bar(const struct pci_epc_features
    - *epc_features)
    +enum pci_barno
    +pci_epc_get_first_free_bar(const struct pci_epc_features *epc_features)
    {
    return pci_epc_get_next_free_bar(epc_features, BAR_0);
    }
    @@ -105,13 +105,13 @@ EXPORT_SYMBOL_GPL(pci_epc_get_first_free_bar);
    * Invoke to get the next unreserved BAR starting from @bar that can be used
    * for endpoint function. For any incorrect value in reserved_bar return '0'.
    */
    -unsigned int pci_epc_get_next_free_bar(const struct pci_epc_features
    - *epc_features, enum pci_barno bar)
    +enum pci_barno pci_epc_get_next_free_bar(const struct pci_epc_features
    + *epc_features, enum pci_barno bar)
    {
    unsigned long free_bar;

    if (!epc_features)
    - return 0;
    + return BAR_0;

    /* If 'bar - 1' is a 64-bit BAR, move to the next BAR */
    if ((epc_features->bar_fixed_64bit << 1) & 1 << bar)
    @@ -126,7 +126,7 @@ unsigned int pci_epc_get_next_free_bar(const struct pci_epc_features

    free_bar = find_next_zero_bit(&free_bar, 6, bar);
    if (free_bar > 5)
    - return 0;
    + return NO_BAR;

    return free_bar;
    }
    diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h
    index cfe9b427e6b7..88d311bad984 100644
    --- a/include/linux/pci-epc.h
    +++ b/include/linux/pci-epc.h
    @@ -201,10 +201,10 @@ int pci_epc_start(struct pci_epc *epc);
    void pci_epc_stop(struct pci_epc *epc);
    const struct pci_epc_features *pci_epc_get_features(struct pci_epc *epc,
    u8 func_no);
    -unsigned int pci_epc_get_first_free_bar(const struct pci_epc_features
    - *epc_features);
    -unsigned int pci_epc_get_next_free_bar(const struct pci_epc_features
    - *epc_features, enum pci_barno bar);
    +enum pci_barno
    +pci_epc_get_first_free_bar(const struct pci_epc_features *epc_features);
    +enum pci_barno pci_epc_get_next_free_bar(const struct pci_epc_features
    + *epc_features, enum pci_barno bar);
    struct pci_epc *pci_epc_get(const char *epc_name);
    void pci_epc_put(struct pci_epc *epc);

    diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h
    index 6644ff3b0702..fa3aca43eb19 100644
    --- a/include/linux/pci-epf.h
    +++ b/include/linux/pci-epf.h
    @@ -21,6 +21,7 @@ enum pci_notify_event {
    };

    enum pci_barno {
    + NO_BAR = -1,
    BAR_0,
    BAR_1,
    BAR_2,
    --
    2.17.1
    \
     
     \ /
      Last update: 2020-09-30 17:36    [W:4.016 / U:0.428 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site