From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
Tejun Heo <tj@kernel.org>, Jeff Garzik <jgarzik@redhat.com>
Subject: [02/54] ata_piix: fix locking around SIDPR access
Date: Wed, 11 Aug 2010 17:00:17 -0700 [thread overview]
Message-ID: <20100812000123.514668336@clark.site> (raw)
In-Reply-To: <20100812000249.GA30948@kroah.com>
2.6.34-stable review patch. If anyone has any objections, please let us know.
------------------
From: Tejun Heo <tj@kernel.org>
commit 213373cf974fe69e78ec894b07f45ae2f5a3a078 upstream.
SIDPR window registers are shared across ports and as each access is
done in two steps, accesses to different ports under EH may race.
This primarily is caused by incorrect host locking in EH context and
should be fixed by defining locking requirements for each EH operation
which can be used during EH and enforcing them but for now work around
the problem by adding a dedicated SIDPR lock and grabbing it for each
SIDPR access.
Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Mark Knecht <markknecht@gmail.com>
Reported-by: Paul Check <paul@thechecks.ca>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/ata/ata_piix.c | 8 ++++++++
1 file changed, 8 insertions(+)
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -158,6 +158,7 @@ struct piix_map_db {
struct piix_host_priv {
const int *map;
u32 saved_iocfg;
+ spinlock_t sidpr_lock; /* FIXME: remove once locking in EH is fixed */
void __iomem *sidpr;
};
@@ -951,12 +952,15 @@ static int piix_sidpr_scr_read(struct at
unsigned int reg, u32 *val)
{
struct piix_host_priv *hpriv = link->ap->host->private_data;
+ unsigned long flags;
if (reg >= ARRAY_SIZE(piix_sidx_map))
return -EINVAL;
+ spin_lock_irqsave(&hpriv->sidpr_lock, flags);
piix_sidpr_sel(link, reg);
*val = ioread32(hpriv->sidpr + PIIX_SIDPR_DATA);
+ spin_unlock_irqrestore(&hpriv->sidpr_lock, flags);
return 0;
}
@@ -964,12 +968,15 @@ static int piix_sidpr_scr_write(struct a
unsigned int reg, u32 val)
{
struct piix_host_priv *hpriv = link->ap->host->private_data;
+ unsigned long flags;
if (reg >= ARRAY_SIZE(piix_sidx_map))
return -EINVAL;
+ spin_lock_irqsave(&hpriv->sidpr_lock, flags);
piix_sidpr_sel(link, reg);
iowrite32(val, hpriv->sidpr + PIIX_SIDPR_DATA);
+ spin_unlock_irqrestore(&hpriv->sidpr_lock, flags);
return 0;
}
@@ -1566,6 +1573,7 @@ static int __devinit piix_init_one(struc
hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
if (!hpriv)
return -ENOMEM;
+ spin_lock_init(&hpriv->sidpr_lock);
/* Save IOCFG, this will be used for cable detection, quirk
* detection and restoration on detach. This is necessary
next prev parent reply other threads:[~2010-08-12 0:03 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-12 0:02 [00/54] 2.6.34.4 -stable review Greg KH
2010-08-12 0:00 ` [01/54] x86, vmware: Preset lpj values when on VMware Greg KH
2010-08-14 12:22 ` Sven Joachim
2010-08-14 16:21 ` Alok Kataria
2010-08-12 0:00 ` Greg KH [this message]
2010-08-12 0:00 ` [03/54] powerpc: fix build with make 3.82 Greg KH
[not found] ` <20100812000249.GA30948-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2010-08-12 0:00 ` [04/54] x86, kmmio/mmiotrace: Fix double free of kmmio_fault_pages Greg KH
2010-08-12 0:00 ` Greg KH
2010-08-12 0:00 ` [05/54] x86/PCI: use host bridge _CRS info on ASRock ALiveSATA2-GLAN Greg KH
2010-08-12 0:00 ` [06/54] x86: Add memory modify constraints to xchg() and cmpxchg() Greg KH
2010-08-12 0:00 ` [07/54] staging: rt2870: Add USB ID for Belkin F6D4050 v2 Greg KH
2010-08-12 0:00 ` [08/54] Staging: line6: needs to select SND_PCM Greg KH
2010-08-12 0:00 ` [09/54] Staging: panel: Prevent double-calling of parport_release - fix oops Greg KH
2010-08-12 0:00 ` [10/54] PCI: Do not run NVidia quirks related to MSI with MSI disabled Greg KH
2010-08-12 0:00 ` [11/54] PCI: disable MSI on VIA K8M800 Greg KH
2010-08-12 0:00 ` [12/54] solos-pci: Fix race condition in tasklet RX handling Greg KH
2010-08-12 0:00 ` [13/54] splice: fix misuse of SPLICE_F_NONBLOCK Greg KH
2010-08-12 0:00 ` [14/54] Char: nozomi, fix tty->count counting Greg KH
2010-08-12 0:00 ` [15/54] Char: nozomi, set tty->driver_data appropriately Greg KH
2010-08-12 0:00 ` [16/54] mm: fix corruption of hibernation caused by reusing swap during image saving Greg KH
2010-08-12 0:00 ` [17/54] drivers/video/w100fb.c: ignore void return value / fix build failure Greg KH
2010-08-12 0:00 ` [18/54] iwlwifi: fix TX tracer Greg KH
2010-08-12 0:00 ` [19/54] ide-cd: Do not access completed requests in the irq handler Greg KH
2010-08-12 0:00 ` [20/54] md/raid10: fix deadlock with unaligned read during resync Greg KH
2010-08-12 0:00 ` [21/54] blkdev: cgroup whitelist permission fix Greg KH
2010-08-12 0:00 ` [22/54] eCryptfs: Handle ioctl calls with unlocked and compat functions Greg KH
2010-08-12 0:00 ` [23/54] ecryptfs: release reference to lower mount if interpose fails Greg KH
2010-08-12 0:00 ` [24/54] fs/ecryptfs/file.c: introduce missing free Greg KH
2010-08-12 0:00 ` [25/54] [ARM] pxa/cm-x300: fix ffuart registration Greg KH
2010-08-12 0:00 ` [26/54] signalfd: fill in ssi_int for posix timers and message queues Greg KH
2010-08-12 0:00 ` [27/54] bio, fs: update RWA_MASK, READA and SWRITE to match the corresponding BIO_RW_* bits Greg KH
2010-08-12 0:00 ` [28/54] smsc911x: Add spinlocks around registers access Greg KH
2010-08-12 0:00 ` [29/54] ARM: 6299/1: errata: TLBIASIDIS and TLBIMVAIS operations can broadcast a faulty ASID Greg KH
2010-08-12 0:00 ` [30/54] ARM: 6280/1: imx: Fix build failure when including <mach/gpio.h> without <linux/spinlock.h> Greg KH
2010-08-12 0:00 ` [31/54] USB: EHCI: remove PCI assumption Greg KH
2010-08-12 0:00 ` [32/54] USB: resizing usbmon binary interface buffer causes protection faults Greg KH
2010-08-12 0:00 ` [33/54] USB delay init quirk for logitech Harmony 700-series devices Greg KH
2010-08-12 0:00 ` [34/54] USB: serial: enabling support for Segway RMP in ftdi_sio Greg KH
2010-08-12 0:00 ` [35/54] USB: option: Huawei ETS 1220 support added Greg KH
2010-08-12 0:00 ` [36/54] USB: option: add huawei k3765 k4505 devices to work properly Greg KH
2010-08-12 0:00 ` [37/54] USB: ftdi_sio: device id for Navitator Greg KH
2010-08-12 0:00 ` [38/54] USB: cp210x: Add four new device IDs Greg KH
2010-08-12 0:00 ` [39/54] USB: usbtest: avoid to free coherent buffer in atomic context Greg KH
2010-08-12 0:00 ` [40/54] USB: fix thread-unsafe anchor utiliy routines Greg KH
2010-08-12 0:00 ` [41/54] drm/edid: Fix the HDTV hack sync adjustment Greg KH
2010-08-12 0:00 ` [42/54] Bluetooth: Added support for controller shipped with iMac i5 Greg KH
2010-08-12 0:00 ` [43/54] mtd: gen_nand: fix support for multiple chips Greg KH
2010-08-12 0:00 ` [44/54] jfs: dont allow os2 xattr namespace overlap with others Greg KH
2010-08-12 0:01 ` [45/54] arp_notify: allow drivers to explicitly request a notification event Greg KH
2010-08-12 0:01 ` [46/54] xen: netfront: explicitly generate arp_notify event after migration Greg KH
2010-08-12 0:01 ` Greg KH
2010-08-12 0:01 ` [47/54] net: Fix NETDEV_NOTIFY_PEERS to not conflict with NETDEV_BONDING_DESLAVE Greg KH
2010-08-12 0:01 ` [48/54] irq: Add new IRQ flag IRQF_NO_SUSPEND Greg KH
2010-08-12 0:01 ` Greg KH
2010-08-12 0:01 ` [49/54] xen: Do not suspend IPI IRQs Greg KH
2010-08-12 0:01 ` Greg KH
2010-08-12 0:01 ` [50/54] drm/i915: Use RSEN instead of HTPLG for tfp410 monitor detection Greg KH
2010-08-12 0:01 ` [51/54] i915: fix ironlake edp panel setup (v4) Greg KH
2010-08-12 0:01 ` [52/54] [SCSI] ibmvfc: Fix command completion handling Greg KH
2010-08-12 0:01 ` [53/54] [SCSI] ibmvfc: Reduce error recovery timeout Greg KH
2010-08-12 0:01 ` [54/54] md/raid1: delay reads that could overtake behind-writes Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100812000123.514668336@clark.site \
--to=gregkh@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=jgarzik@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable-review@kernel.org \
--cc=stable@kernel.org \
--cc=tj@kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.