On 11/21/18 1:25 AM, Nilesh Javali wrote:
> From: Manish Rangankar <manish.rangan...@cavium.com>
> 
> 1. Removed logic to update HW producer index in interrupt context.
> 2. Update HW producer index after UIO ring and buffer gets initialized.
> 
> Signed-off-by: Manish Rangankar <manish.rangan...@cavium.com>
> ---
>  drivers/scsi/qedi/qedi_main.c | 31 +++++++++++++++++++------------
>  1 file changed, 19 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c
> index 8942f62..053a947 100644
> --- a/drivers/scsi/qedi/qedi_main.c
> +++ b/drivers/scsi/qedi/qedi_main.c
> @@ -665,7 +665,6 @@ static int qedi_ll2_rx(void *cookie, struct sk_buff *skb, 
> u32 arg1, u32 arg2)
>       struct qedi_uio_ctrl *uctrl;
>       struct skb_work_list *work;
>       struct ethhdr *eh;
> -     u32 prod;
>  
>       if (!qedi) {
>               QEDI_ERR(NULL, "qedi is NULL\n");
> @@ -724,17 +723,10 @@ static int qedi_ll2_rx(void *cookie, struct sk_buff 
> *skb, u32 arg1, u32 arg2)
>  
>       spin_lock_bh(&qedi->ll2_lock);
>       list_add_tail(&work->list, &qedi->ll2_skb_list);
> +     spin_unlock_bh(&qedi->ll2_lock);
>  
> -     ++uctrl->hw_rx_prod_cnt;
> -     prod = (uctrl->hw_rx_prod + 1) % RX_RING;
> -     if (prod != uctrl->host_rx_cons) {
> -             uctrl->hw_rx_prod = prod;
> -             spin_unlock_bh(&qedi->ll2_lock);
> -             wake_up_process(qedi->ll2_recv_thread);
> -             return 0;
> -     }
> +     wake_up_process(qedi->ll2_recv_thread);
>  
> -     spin_unlock_bh(&qedi->ll2_lock);
>       return 0;
>  }
>  
> @@ -749,6 +741,7 @@ static int qedi_ll2_process_skb(struct qedi_ctx *qedi, 
> struct sk_buff *skb,
>       u32 rx_bd_prod;
>       void *pkt;
>       int len = 0;
> +     u32 prod;
>  
>       if (!qedi) {
>               QEDI_ERR(NULL, "qedi is NULL\n");
> @@ -757,12 +750,16 @@ static int qedi_ll2_process_skb(struct qedi_ctx *qedi, 
> struct sk_buff *skb,
>  
>       udev = qedi->udev;
>       uctrl = udev->uctrl;
> -     pkt = udev->rx_pkt + (uctrl->hw_rx_prod * qedi_ll2_buf_size);
> +
> +     ++uctrl->hw_rx_prod_cnt;
> +     prod = (uctrl->hw_rx_prod + 1) % RX_RING;
> +
> +     pkt = udev->rx_pkt + (prod * qedi_ll2_buf_size);
>       len = min_t(u32, skb->len, (u32)qedi_ll2_buf_size);
>       memcpy(pkt, skb->data, len);
>  
>       memset(&rxbd, 0, sizeof(rxbd));
> -     rxbd.rx_pkt_index = uctrl->hw_rx_prod;
> +     rxbd.rx_pkt_index = prod;
>       rxbd.rx_pkt_len = len;
>       rxbd.vlan_id = vlan_id;
>  
> @@ -773,6 +770,16 @@ static int qedi_ll2_process_skb(struct qedi_ctx *qedi, 
> struct sk_buff *skb,
>  
>       memcpy(p_rxbd, &rxbd, sizeof(rxbd));
>  
> +     QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_LL2,
> +               "hw_rx_prod [%d] prod [%d] hw_rx_bd_prod [%d] rx_pkt_idx [%d] 
> rx_len [%d].\n",
> +               uctrl->hw_rx_prod, prod, uctrl->hw_rx_bd_prod,
> +               rxbd.rx_pkt_index, rxbd.rx_pkt_len);
> +     QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_LL2,
> +               "host_rx_cons [%d] hw_rx_bd_cons [%d].\n",
> +               uctrl->host_rx_cons, uctrl->host_rx_bd_cons);
> +
> +     uctrl->hw_rx_prod = prod;
> +
>       /* notify the iscsiuio about new packet */
>       uio_event_notify(&udev->qedi_uinfo);
>  
> 


Reviewed-by: Lee Duncan <ldun...@suse.com>

Reply via email to