forked from Minki/linux
IB/hfi1: Remove critical section gap in sc_buffer_alloc()
In sc_buffer_alloc(), the sc->alloc_lock is released before calling sc_release_update(), and it is reacquired after the function call. This causes CPU lock trading. Fix it by not dropping the lock before calling sc_release_update(). Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Sebastian Sanchez <sebastian.sanchez@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
b777f154a0
commit
9b86071c5e
@ -1419,9 +1419,7 @@ retry:
|
|||||||
(sc->fill - sc->alloc_free);
|
(sc->fill - sc->alloc_free);
|
||||||
if (blocks > avail) {
|
if (blocks > avail) {
|
||||||
/* still no room, actively update */
|
/* still no room, actively update */
|
||||||
spin_unlock_irqrestore(&sc->alloc_lock, flags);
|
|
||||||
sc_release_update(sc);
|
sc_release_update(sc);
|
||||||
spin_lock_irqsave(&sc->alloc_lock, flags);
|
|
||||||
sc->alloc_free = ACCESS_ONCE(sc->free);
|
sc->alloc_free = ACCESS_ONCE(sc->free);
|
||||||
trycount++;
|
trycount++;
|
||||||
goto retry;
|
goto retry;
|
||||||
|
Loading…
Reference in New Issue
Block a user