Patchwork ahci rmmodable and shouldn't

login
register
mail settings
Submitter Tejun Heo
Date Sept. 20, 2010, 10:10 p.m.
Message ID <4C97DBE2.8070707@gmail.com>
Download mbox | patch
Permalink /patch/65258/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Tejun Heo - Sept. 20, 2010, 10:10 p.m.
On 09/21/2010 12:09 AM, Tejun Heo wrote:
> Hello,
> 
> On 09/20/2010 10:44 PM, Pedro Francisco wrote:
>> To which tree shall I apply it? It currently fails both on Linus'
>> linux-2.6 and
>> git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata-dev.git .
> 
> Hmm... weird.  It's against Linus' tree.  Checking, yeap, it applies
> cleanly to 2.6.36-rc4, commit 2422084a (Merge branch 'for-linus' of
> git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha-2.6).

Attaching the patch just in case.
Michael Tokarev - Sept. 21, 2010, 6:14 a.m.
21.09.2010 02:10, Tejun Heo wrote:
> On 09/21/2010 12:09 AM, Tejun Heo wrote:
>> Hello,
>>
>> On 09/20/2010 10:44 PM, Pedro Francisco wrote:
>>> To which tree shall I apply it? It currently fails both on Linus'
>>> linux-2.6 and
>>> git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata-dev.git .
>>
>> Hmm... weird.  It's against Linus' tree.  Checking, yeap, it applies
>> cleanly to 2.6.36-rc4, commit 2422084a (Merge branch 'for-linus' of
>> git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha-2.6).
> 
> Attaching the patch just in case.

I tried it on 2.6.35 kernel.  The ahci module usage count now
increases and decreases properly, at least from what I see here.
That's definitely better than previous 2.6.35 variant.

Thanks!

/mjt

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Pedro Francisco - Sept. 23, 2010, 3:14 p.m.
On Ter, 2010-09-21 at 00:10 +0200, Tejun Heo wrote:
> On 09/21/2010 12:09 AM, Tejun Heo wrote:
> > Hello,
> > 
> > On 09/20/2010 10:44 PM, Pedro Francisco wrote:
> >> To which tree shall I apply it? It currently fails both on Linus'
> >> linux-2.6 and
> >> git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata-dev.git .
> > 
> > Hmm... weird.  It's against Linus' tree.  Checking, yeap, it applies
> > cleanly to 2.6.36-rc4, commit 2422084a (Merge branch 'for-linus' of
> > git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha-2.6).
> 
> Attaching the patch just in case.

I must have forgotten "-p1" since it now worked fine.

Anyway, the patch works on 2.6.36-rc4 :)

Sorry for the late reply but compiling and running it took a bit longer
than expected.

Patch

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index ff1c945..99d0e5a 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -90,6 +90,10 @@  static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
 static int ahci_pci_device_resume(struct pci_dev *pdev);
 #endif
 
+static struct scsi_host_template ahci_sht = {
+	AHCI_SHT("ahci"),
+};
+
 static struct ata_port_operations ahci_vt8251_ops = {
 	.inherits		= &ahci_ops,
 	.hardreset		= ahci_vt8251_hardreset,
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
index 474427b..e5fdeeb 100644
--- a/drivers/ata/ahci.h
+++ b/drivers/ata/ahci.h
@@ -298,7 +298,17 @@  struct ahci_host_priv {
 
 extern int ahci_ignore_sss;
 
-extern struct scsi_host_template ahci_sht;
+extern struct device_attribute *ahci_shost_attrs[];
+extern struct device_attribute *ahci_sdev_attrs[];
+
+#define AHCI_SHT(drv_name)						\
+	ATA_NCQ_SHT(drv_name),						\
+	.can_queue		= AHCI_MAX_CMDS - 1,			\
+	.sg_tablesize		= AHCI_MAX_SG,				\
+	.dma_boundary		= AHCI_DMA_BOUNDARY,			\
+	.shost_attrs		= ahci_shost_attrs,			\
+	.sdev_attrs		= ahci_sdev_attrs
+
 extern struct ata_port_operations ahci_ops;
 
 void ahci_save_initial_config(struct device *dev,
diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
index 4e97f33..84b6432 100644
--- a/drivers/ata/ahci_platform.c
+++ b/drivers/ata/ahci_platform.c
@@ -23,6 +23,10 @@ 
 #include <linux/ahci_platform.h>
 #include "ahci.h"
 
+static struct scsi_host_template ahci_platform_sht = {
+	AHCI_SHT("ahci_platform"),
+};
+
 static int __init ahci_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
@@ -145,7 +149,7 @@  static int __init ahci_probe(struct platform_device *pdev)
 	ahci_print_info(host, "platform");
 
 	rc = ata_host_activate(host, irq, ahci_interrupt, IRQF_SHARED,
-			       &ahci_sht);
+			       &ahci_platform_sht);
 	if (rc)
 		goto err0;
 
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
index 68dc678..8eea309 100644
--- a/drivers/ata/libahci.c
+++ b/drivers/ata/libahci.c
@@ -121,7 +121,7 @@  static DEVICE_ATTR(ahci_port_cmd, S_IRUGO, ahci_show_port_cmd, NULL);
 static DEVICE_ATTR(em_buffer, S_IWUSR | S_IRUGO,
 		   ahci_read_em_buffer, ahci_store_em_buffer);
 
-static struct device_attribute *ahci_shost_attrs[] = {
+struct device_attribute *ahci_shost_attrs[] = {
 	&dev_attr_link_power_management_policy,
 	&dev_attr_em_message_type,
 	&dev_attr_em_message,
@@ -132,22 +132,14 @@  static struct device_attribute *ahci_shost_attrs[] = {
 	&dev_attr_em_buffer,
 	NULL
 };
+EXPORT_SYMBOL_GPL(ahci_shost_attrs);
 
-static struct device_attribute *ahci_sdev_attrs[] = {
+struct device_attribute *ahci_sdev_attrs[] = {
 	&dev_attr_sw_activity,
 	&dev_attr_unload_heads,
 	NULL
 };
-
-struct scsi_host_template ahci_sht = {
-	ATA_NCQ_SHT("ahci"),
-	.can_queue		= AHCI_MAX_CMDS - 1,
-	.sg_tablesize		= AHCI_MAX_SG,
-	.dma_boundary		= AHCI_DMA_BOUNDARY,
-	.shost_attrs		= ahci_shost_attrs,
-	.sdev_attrs		= ahci_sdev_attrs,
-};
-EXPORT_SYMBOL_GPL(ahci_sht);
+EXPORT_SYMBOL_GPL(ahci_sdev_attrs);
 
 struct ata_port_operations ahci_ops = {
 	.inherits		= &sata_pmp_port_ops,