]> git.baikalelectronics.ru Git - kernel.git/commit
s390/qeth: make queue lock a proper spinlock
authorJulian Wiedmann <jwi@linux.ibm.com>
Thu, 27 Aug 2020 08:17:00 +0000 (10:17 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 27 Aug 2020 14:42:03 +0000 (07:42 -0700)
commitce2c87adfd8dbcc50fab29f1565bd56db546133d
treed787892d82f10de2b73b4baab5b3b2c1f24ae25a
parent7628b2c7e82f5a409c9013b007d22e28124f9177
s390/qeth: make queue lock a proper spinlock

queue->state is a ternary spinlock in disguise, used by
OSA's TX completion path to lock the Output Queue and flush any pending
packets on it to the device. If the Queue is already locked by our TX
code, setting the lock word to QETH_OUT_Q_LOCKED_FLUSH lets the TX
completion code move on - the TX path will later take care of things
when it unlocks the Queue.

This sort of DIY locking is a non-starter of course, just let the
TX completion path block on the spinlock when necessary. If that ends up
causing additional latency due to lock contention, then converting
the OSA path to use xmit_more is the right way to go forward.

Also slightly expand the locked section and capture all of
qeth_do_send_packet(), so that the update for the 'bufs_pack' statistics
is done race-free.

While reworking the TX completion path's code, remove a barrier() that
doesn't make any sense.

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/s390/net/qeth_core.h
drivers/s390/net/qeth_core_main.c