mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
Merge branch 'rework-the-memory-barrier-for-scrq-entry'
Lijun Pan says: ==================== rework the memory barrier for SCRQ entry This series rework the memory barrier for SCRQ (Sub-Command-Response Queue) entry. ==================== Link: https://lore.kernel.org/r/20210130011905.1485-1-ljp@linux.ibm.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
9ae4bdc6e4
@ -2444,12 +2444,6 @@ restart_poll:
|
||||
|
||||
if (!pending_scrq(adapter, rx_scrq))
|
||||
break;
|
||||
/* The queue entry at the current index is peeked at above
|
||||
* to determine that there is a valid descriptor awaiting
|
||||
* processing. We want to be sure that the current slot
|
||||
* holds a valid descriptor before reading its contents.
|
||||
*/
|
||||
dma_rmb();
|
||||
next = ibmvnic_next_scrq(adapter, rx_scrq);
|
||||
rx_buff =
|
||||
(struct ibmvnic_rx_buff *)be64_to_cpu(next->
|
||||
@ -2516,7 +2510,6 @@ restart_poll:
|
||||
if (napi_complete_done(napi, frames_processed)) {
|
||||
enable_scrq_irq(adapter, rx_scrq);
|
||||
if (pending_scrq(adapter, rx_scrq)) {
|
||||
rmb();
|
||||
if (napi_reschedule(napi)) {
|
||||
disable_scrq_irq(adapter, rx_scrq);
|
||||
goto restart_poll;
|
||||
@ -3189,13 +3182,6 @@ restart_loop:
|
||||
int total_bytes = 0;
|
||||
int num_packets = 0;
|
||||
|
||||
/* The queue entry at the current index is peeked at above
|
||||
* to determine that there is a valid descriptor awaiting
|
||||
* processing. We want to be sure that the current slot
|
||||
* holds a valid descriptor before reading its contents.
|
||||
*/
|
||||
dma_rmb();
|
||||
|
||||
next = ibmvnic_next_scrq(adapter, scrq);
|
||||
for (i = 0; i < next->tx_comp.num_comps; i++) {
|
||||
if (next->tx_comp.rcs[i])
|
||||
@ -3569,11 +3555,16 @@ static int pending_scrq(struct ibmvnic_adapter *adapter,
|
||||
struct ibmvnic_sub_crq_queue *scrq)
|
||||
{
|
||||
union sub_crq *entry = &scrq->msgs[scrq->cur];
|
||||
int rc;
|
||||
|
||||
if (entry->generic.first & IBMVNIC_CRQ_CMD_RSP)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
rc = !!(entry->generic.first & IBMVNIC_CRQ_CMD_RSP);
|
||||
|
||||
/* Ensure that the SCRQ valid flag is loaded prior to loading the
|
||||
* contents of the SCRQ descriptor
|
||||
*/
|
||||
dma_rmb();
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static union sub_crq *ibmvnic_next_scrq(struct ibmvnic_adapter *adapter,
|
||||
@ -3592,8 +3583,8 @@ static union sub_crq *ibmvnic_next_scrq(struct ibmvnic_adapter *adapter,
|
||||
}
|
||||
spin_unlock_irqrestore(&scrq->lock, flags);
|
||||
|
||||
/* Ensure that the entire buffer descriptor has been
|
||||
* loaded before reading its contents
|
||||
/* Ensure that the SCRQ valid flag is loaded prior to loading the
|
||||
* contents of the SCRQ descriptor
|
||||
*/
|
||||
dma_rmb();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user