OSDN Git Service

ntb_hw_switchtec: Fix setup MW with failure bug
authorJoey Zhang <joey.zhang@microchip.com>
Thu, 6 Jun 2019 07:09:44 +0000 (15:09 +0800)
committerJon Mason <jdmason@kudzu.us>
Thu, 13 Jun 2019 12:59:31 +0000 (08:59 -0400)
commita944ccc3b0aedb7f3a24b8c90624fe182e8a8851
tree4cc6839b608a51033798208a44e88da21e3df2f5
parentf0f43e766bdb314b3816ac891fb18cea5de4123d
ntb_hw_switchtec: Fix setup MW with failure bug

Switchtec does not support setting multiple MWs simultaneously. The
driver takes a hardware lock to ensure that two peers are not doing this
simultaneously and it fails if someone else takes the lock. In most
cases, this is fine as clients only setup the MWs once on one side of
the link.

However, there's a race condition when a re-initialization is caused by
a link event. The driver will re-setup the shared memory window
asynchronously and this races with the client setting up it's memory
windows on the link up event.

To fix this we ensure do the entire initialization in a work queue and
signal the client once it's done.

Signed-off-by: Joey Zhang <joey.zhang@microchip.com>
Signed-off-by: Wesley Sheng <wesley.sheng@microchip.com>
Signed-off-by: Jon Mason <jdmason@kudzu.us>
drivers/ntb/hw/mscc/ntb_hw_switchtec.c