sata_promise: fix hardreset lockdep error
authorMikael Pettersson <mikpe@it.uu.se>
Sun, 16 Sep 2012 18:53:43 +0000 (20:53 +0200)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 3 Jan 2013 03:33:19 +0000 (03:33 +0000)
commit03895c4f4a53655eb3510bee3101eb35dcea7f5d
tree174d701b0fb96c82f592872b5e0960d7ca7a114c
parent173dedb8464984b58d2fdec39c09486a1b6b036e
sata_promise: fix hardreset lockdep error

commit 3100d49d3cd236443faae9d81137c81b22d36003 upstream.

sata_promise's pdc_hard_reset_port() needs to serialize because it
flips a port-specific bit in controller register that's shared by
all ports. The code takes the ata host lock for this, but that's
broken because an interrupt may arrive on our irq during the hard
reset sequence, and that too will take the ata host lock. With
lockdep enabled a big nasty warning is seen.

Fixed by adding private state to the ata host structure, containing
a second lock used only for serializing the hard reset sequences.
This eliminated the lockdep warnings both on my test rig and on
the original reporter's machine.

Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
Tested-by: Adko Branil <adkobranil@yahoo.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/ata/sata_promise.c