pata_rdc: parallel scanning needs an extra locking
PATCH 1/1 pata_rdc: parallel scanning needs an extra locking
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] pata_rdc: parallel scanning needs an extra locking
This is similar change as commit 60c3be3 ("ata_piix: parallel scanning on PATA needs an extra locking") for ata_piix host driver.
--- drivers/ata/pata_rdc.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
drivers/ata/pata_rdc.c +12 -0
@@ -86,6 +86,8 @@ static int rdc_pata_prereset(struct ata_return ata_sff_prereset (link, deadline); } +static DEFINE_SPINLOCK (rdc_lock); +/** * rdc_set_piomode - Initialize host controller PATA PIO timings * @ap: Port whose timings we are configuring
@@ -101,6 +103,7 @@ static void rdc_set_piomode(struct ata_p {unsigned int pio = adev->pio_mode -XFER_PIO_0 ;struct pci_dev *dev =to_pci_dev (ap->host->dev); +unsigned long flags;unsigned int is_slave = (adev->devno !=0 );unsigned int master_port= ap->port_no ?0x42 :0x40 ;unsigned int slave_port =0x44 ;
@@ -124,6 +127,8 @@ static void rdc_set_piomode(struct ata_pif (adev->class ==ATA_DEV_ATA ) control |=4 ;/* PPE enable */ +spin_lock_irqsave (&rdc_lock, flags); +/* PIO configuration clears DTE unconditionally. It will be * programmed in set_dmamode which is guaranteed to be called * after set_piomode if any DMA mode is available.
@@ -161,6 +166,8 @@ static void rdc_set_piomode(struct ata_ppci_read_config_byte (dev,0x48 , &udma_enable); udma_enable &= ~(1 << (2 * ap->port_no + adev->devno));pci_write_config_byte (dev,0x48 , udma_enable); + +spin_unlock_irqrestore (&rdc_lock, flags); }/**
@@ -177,6 +184,7 @@ static void rdc_set_piomode(struct ata_pstatic void rdc_set_dmamode (struct ata_port *ap,struct ata_device *adev) {struct pci_dev *dev =to_pci_dev (ap->host->dev); +unsigned long flags;u8 master_port = ap->port_no ?0x42 :0x40 ;u16 master_data;u8 speed = adev->dma_mode;
@@ -190,6 +198,8 @@ static void rdc_set_dmamode(struct ata_p { 2, 1 }, { 2, 3 }, }; +spin_lock_irqsave (&rdc_lock, flags); +pci_read_config_word (dev, master_port, &master_data);pci_read_config_byte (dev,0x48 , &udma_enable);
@@ -271,6 +281,8 @@ static void rdc_set_dmamode(struct ata_ppci_write_config_word (dev, master_port, master_data); }pci_write_config_byte (dev,0x48 , udma_enable); + +spin_unlock_irqrestore (&rdc_lock, flags); }static struct ata_port_operations rdc_pata_ops = {
Quoted 5 lines · On Thu, 13 Oct 2011 16:06:04 +0200 Bartlomiej Zolnierkiewicz…
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH]pata_rdc: parallel scanning needs an extra lockingThis is similar change as commit 60c3be3 ("
ata_piix: parallel scanning on PATA needs an extra locking") forata_piixhost driver.
Again has anyone verified with the vendor that the RDC can support parallel scanning ?
Quoted 11 lines · Alan Cox
Quoted 5 lines · On Thu, 13 Oct 2011 16:06:04 +0200 Bartlomiej Zolnierkiewicz…
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH]pata_rdc: parallel scanning needs an extra lockingThis is similar change as commit 60c3be3 ("
ata_piix: parallel scanning on PATA needs an extra locking") forata_piixhost driver.Again has anyone verified with the vendor that the RDC can support parallel scanning ?
Upstream has always used it:
commit 6b406782ad0408f9cb480c2e1b543d194e8206d0
Author: Alan Cox <[email protected]> Date: Wed Jun 24 18:29:44 2009 +0100
[libata] Add pata_rdc driver for RDC ATA devices
From: Alan Cox <[email protected]>
...
+
+ host->flags |= ATA_HOST_PARALLEL_SCAN;
+
...
My patch only adds needed locking.
Quoted 8 lines · On Thu, 13 Oct 2011 18:08:31 +0200 Bartlomiej Zolnierkiewicz…
Quoted 6 lines · Alan Cox
Quoted 3 lines · On Thu, 13 Oct 2011 16:06:04 +0200 Bartlomiej Zolnierkiewicz…
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH]pata_rdc: parallel scanning needs an extra locking
Quoted 7 lines
Quoted 5 lines
Quoted 2 lines
This is similar change as commit 60c3be3 ("
ata_piix: parallel scanning on PATA needs an extra locking") forata_piixhost driver.Again has anyone verified with the vendor that the RDC can support parallel scanning ?
Upstream has always used it:
Fair enough as nobody has complained.