lkml.org 
[lkml]   [2020]   [Apr]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 38/40] wil6210: make sure Rx ring sizes are correlated
    Date
    From: Dedy Lansky <dlansky@codeaurora.org>

    commit 61e5ec044748486f06dec760a19dce78247b3ad8 upstream.

    When enlarging rx_ring_order module param, wil6210 fails to load
    because there are not enough Rx buffers.
    Fix this by enlarging number of Rx buffers at startup, if needed based
    on rx_ring_order.

    Signed-off-by: Dedy Lansky <dlansky@codeaurora.org>
    Signed-off-by: Maya Erez <merez@codeaurora.org>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Lee Jones <lee.jones@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/wireless/ath/wil6210/main.c | 2 +-
    drivers/net/wireless/ath/wil6210/txrx.c | 4 ++--
    drivers/net/wireless/ath/wil6210/txrx_edma.c | 11 ++++++++---
    drivers/net/wireless/ath/wil6210/wil6210.h | 2 +-
    4 files changed, 12 insertions(+), 7 deletions(-)

    --- a/drivers/net/wireless/ath/wil6210/main.c
    +++ b/drivers/net/wireless/ath/wil6210/main.c
    @@ -1687,7 +1687,7 @@ int __wil_up(struct wil6210_priv *wil)
    return rc;

    /* Rx RING. After MAC and beacon */
    - rc = wil->txrx_ops.rx_init(wil, 1 << rx_ring_order);
    + rc = wil->txrx_ops.rx_init(wil, rx_ring_order);
    if (rc)
    return rc;

    --- a/drivers/net/wireless/ath/wil6210/txrx.c
    +++ b/drivers/net/wireless/ath/wil6210/txrx.c
    @@ -881,7 +881,7 @@ static void wil_rx_buf_len_init(struct w
    }
    }

    -static int wil_rx_init(struct wil6210_priv *wil, u16 size)
    +static int wil_rx_init(struct wil6210_priv *wil, uint order)
    {
    struct wil_ring *vring = &wil->ring_rx;
    int rc;
    @@ -895,7 +895,7 @@ static int wil_rx_init(struct wil6210_pr

    wil_rx_buf_len_init(wil);

    - vring->size = size;
    + vring->size = 1 << order;
    vring->is_rx = true;
    rc = wil_vring_alloc(wil, vring);
    if (rc)
    --- a/drivers/net/wireless/ath/wil6210/txrx_edma.c
    +++ b/drivers/net/wireless/ath/wil6210/txrx_edma.c
    @@ -593,9 +593,9 @@ static void wil_rx_buf_len_init_edma(str
    WIL_MAX_ETH_MTU : WIL_EDMA_RX_BUF_LEN_DEFAULT;
    }

    -static int wil_rx_init_edma(struct wil6210_priv *wil, u16 desc_ring_size)
    +static int wil_rx_init_edma(struct wil6210_priv *wil, uint desc_ring_order)
    {
    - u16 status_ring_size;
    + u16 status_ring_size, desc_ring_size = 1 << desc_ring_order;
    struct wil_ring *ring = &wil->ring_rx;
    int rc;
    size_t elem_size = wil->use_compressed_rx_status ?
    @@ -610,7 +610,12 @@ static int wil_rx_init_edma(struct wil62
    "compressed RX status cannot be used with SW reorder\n");
    return -EINVAL;
    }
    -
    + if (wil->rx_status_ring_order <= desc_ring_order)
    + /* make sure sring is larger than desc ring */
    + wil->rx_status_ring_order = desc_ring_order + 1;
    + if (wil->rx_buff_id_count <= desc_ring_size)
    + /* make sure we will not run out of buff_ids */
    + wil->rx_buff_id_count = desc_ring_size + 512;
    if (wil->rx_status_ring_order < WIL_SRING_SIZE_ORDER_MIN ||
    wil->rx_status_ring_order > WIL_SRING_SIZE_ORDER_MAX)
    wil->rx_status_ring_order = WIL_RX_SRING_SIZE_ORDER_DEFAULT;
    --- a/drivers/net/wireless/ath/wil6210/wil6210.h
    +++ b/drivers/net/wireless/ath/wil6210/wil6210.h
    @@ -602,7 +602,7 @@ struct wil_txrx_ops {
    struct wil_ring *ring, struct sk_buff *skb);
    irqreturn_t (*irq_tx)(int irq, void *cookie);
    /* RX ops */
    - int (*rx_init)(struct wil6210_priv *wil, u16 ring_size);
    + int (*rx_init)(struct wil6210_priv *wil, uint ring_order);
    void (*rx_fini)(struct wil6210_priv *wil);
    int (*wmi_addba_rx_resp)(struct wil6210_priv *wil, u8 mid, u8 cid,
    u8 tid, u8 token, u16 status, bool amsdu,

    \
     
     \ /
      Last update: 2020-04-20 14:50    [W:4.125 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site