On 01/24/2018 11:45 PM, James Smart wrote: > The driver controls when the hardware sends completions that > communicate consumption of elements from the WQ. This is done by > setting a WQEC bit on a WQE. > > The current driver sets it on every Nth WQE posting. However, the > driver isn't clearing the bit if the WQE is reused. Thus, if the > queue depth isn't evenly divisible by N, with enough time, it can > be set on every element, creating a lot of overhead and risking > CQ full conditions. > > Correct by clearing the bit when not setting it on an Nth element. > > Signed-off-by: Dick Kennedy <dick.kennedy@xxxxxxxxxxxx> > Signed-off-by: James Smart <james.smart@xxxxxxxxxxxx> > --- > drivers/scsi/lpfc/lpfc_sli.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c > index 5f5528a12308..149f21f53b13 100644 > --- a/drivers/scsi/lpfc/lpfc_sli.c > +++ b/drivers/scsi/lpfc/lpfc_sli.c > @@ -129,6 +129,8 @@ lpfc_sli4_wq_put(struct lpfc_queue *q, union lpfc_wqe *wqe) > /* set consumption flag every once in a while */ > if (!((q->host_index + 1) % q->entry_repost)) > bf_set(wqe_wqec, &wqe->generic.wqe_com, 1); > + else > + bf_set(wqe_wqec, &wqe->generic.wqe_com, 0); > if (q->phba->sli3_options & LPFC_SLI4_PHWQ_ENABLED) > bf_set(wqe_wqid, &wqe->generic.wqe_com, q->queue_id); > lpfc_sli_pcimem_bcopy(wqe, temp_wqe, q->entry_size); > Reviewed-by: Hannes Reinecke <hare@xxxxxxxx> Cheers, Hannes -- Dr. Hannes Reinecke Teamlead Storage & Networking hare@xxxxxxx +49 911 74053 688 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton HRB 21284 (AG Nürnberg)