libsas: pci_iommu_ops undefined on !PCI
Subsystems (2)
Tried to compile everythin SCSI on my SBus-only sparc64, including SAS supoort. Seems that libsas seems to depend on PCI - does it need to?
MODPOST 446 modules
ERROR: "pci_iommu_ops" [drivers/scsi/libsas/libsas.ko] undefined!
Signature · 1 line
Meelis Roos ([email protected])
PATCH 1/1 Remove libsas PCI dependencies
Quoted 4 lines · Meelis Roos
Tried to compile everythin SCSI on my SBus-only sparc64, including SAS supoort. Seems that libsas seems to depend on PCI - does it need to?
MODPOST 446 modules
ERROR: "pci_iommu_ops" [drivers/scsi/libsas/libsas.ko] undefined!
Does the attached patch fix things? 2.6.23-rc1 material, methinks.
libsas should -not- require PCI, even though aic94xx does.
drivers/scsi/aic94xx/aic94xx_init.c +1 -3
@@ -586,7 +586,7 @@ static int __devinit asd_pci_probe(struct pci_dev *dev, goto Err; } asd_ha->pcidev = dev; - asd_ha->sas_ha.pcidev = asd_ha->pcidev; + asd_ha->sas_ha.dev = &asd_ha->pcidev->dev; asd_ha->sas_ha.lldd_ha = asd_ha; asd_ha->name = asd_dev->name;
@@ -605,8 +605,6 @@ static int __devinit asd_pci_probe(struct pci_dev *dev, goto Err_free; } - - err = asd_dev->setup (asd_ha);if (err) goto Err_free;
drivers/scsi/libsas/sas_ata.c +15 -15
@@ -382,7 +382,7 @@ int sas_ata_init_host_and_port(struct domain_device *found_dev,struct ata_port *ap;ata_host_init (&found_dev->sata_dev.ata_host, - &ha->pcidev->dev, + ha->dev, sata_port_info.flags, &sas_sata_ops); ap = ata_sas_port_alloc(&found_dev->sata_dev.ata_host,
@@ -448,10 +448,10 @@ static void sas_disc_task_done(struct sas_task *task)* @task: the task to be executed * @buffer: pointer to buffer to do I/O * @size: size of @buffer -* @pci_dma_dir: PCI_DMA_... +* @dma_dir: DMA direction. DMA_xxx */ static int sas_execute_task (struct sas_task *task,void *buffer,int size, -int pci_dma_dir) +int dma_dir) {int res =0 ;struct scatterlist *scatter =NULL ;
@@ -461,7 +461,7 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size,struct sas_internal *i =to_sas_internal (task->dev->port->ha->core.shost->transportt); -if (pci_dma_dir !=PCI_DMA_NONE ) { +if (dma_dir !=DMA_NONE ) { scatter =kzalloc (sizeof (*scatter),GFP_KERNEL );if (!scatter) goto out;
@@ -474,11 +474,11 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size, task->scatter = scatter; task->num_scatter = num_scatter; task->total_xfer_len = size; - task->data_dir = pci_dma_dir; + task->data_dir = dma_dir; task->task_done = sas_disc_task_done; -if (pci_dma_dir !=PCI_DMA_NONE && +if (dma_dir !=DMA_NONE &&sas_protocol_ata (task->task_proto)) { - task->num_scatter =pci_map_sg (task->dev->port->ha->pcidev, + task->num_scatter =dma_map_sg (task->dev->port->ha->dev, task->scatter, task->num_scatter, task->data_dir);
@@ -565,9 +565,9 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size, } } ex_err: -if (pci_dma_dir !=PCI_DMA_NONE ) { +if (dma_dir !=DMA_NONE ) {if (sas_protocol_ata (task->task_proto)) -pci_unmap_sg (task->dev->port->ha->pcidev, +dma_unmap_sg (task->dev->port->ha->dev, task->scatter, task->num_scatter, task->data_dir);kfree (scatter);
@@ -628,11 +628,11 @@ static void sas_get_ata_command_set(struct domain_device *dev)* @features: the features register * @buffer: pointer to buffer to do I/O * @size: size of @buffer -* @pci_dma_dir: PCI_DMA_... +* @dma_dir: DMA direction. DMA_xxx */ static int sas_issue_ata_cmd (struct domain_device *dev,u8 command,u8 features,void *buffer,int size, -int pci_dma_dir) +int dma_dir) {int res =0 ;struct sas_task *task;
@@ -652,7 +652,7 @@ static int sas_issue_ata_cmd(struct domain_device *dev, u8 command, task->ata_task.fis.device = d2h_fis->device; task->ata_task.retry_count =1 ; - res =sas_execute_task (task, buffer, size, pci_dma_dir); + res =sas_execute_task (task, buffer, size, dma_dir);sas_free_task (task); out:
@@ -707,7 +707,7 @@ static int sas_discover_sata_dev(struct domain_device *dev) } res =sas_issue_ata_cmd (dev, command,0 , identify_x,512 , -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE );if (res) goto out_err;
@@ -720,13 +720,13 @@ static int sas_discover_sata_dev(struct domain_device *dev) goto cont1; res =sas_issue_ata_cmd (dev,ATA_SET_FEATURES ,ATA_FEATURE_PUP_STBY_SPIN_UP , -NULL ,0 ,PCI_DMA_NONE ); +NULL ,0 ,DMA_NONE );if (res) goto cont1;schedule_timeout_interruptible (5 *HZ );/* More time? */ res =sas_issue_ata_cmd (dev, command,0 , identify_x,512 , -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE );if (res) goto out_err; }
drivers/scsi/libsas/sas_discover.c +1 -2
@@ -22,7 +22,6 @@* */ -#include <linux/pci.h> #include <linux/scatterlist.h> #include <scsi/scsi_host.h> #include <scsi/scsi_eh.h>
@@ -170,7 +169,7 @@ int sas_notify_lldd_dev_found(struct domain_device *dev)if (res) {printk ("sas: driver on pcidev %s cannot handle " "device %llx, error:%d\n" , -pci_name (sas_ha->pcidev), + sas_ha->dev->bus_id,SAS_ADDR (dev->sas_addr), res); } }
drivers/scsi/libsas/sas_dump.c +1 -1
@@ -56,7 +56,7 @@ void sas_dprint_phye(int phyid, enum phy_event pe)void sas_dprint_hae (struct sas_ha_struct *sas_ha,enum ha_event he) { -SAS_DPRINTK ("ha %s: %s event\n" ,pci_name (sas_ha->pcidev), +SAS_DPRINTK ("ha %s: %s event\n" , sas_ha->dev->bus_id, sas_hae_str[he]); }
include/scsi/libsas.h +1 -1
@@ -348,7 +348,7 @@ struct sas_ha_struct {/* public: */ char *sas_ha_name; -struct pci_dev *pcidev;/* should be set */ +struct device *dev;/* should be set */ struct module *lldd_module;/* should be set */ u8 *sas_addr;/* must be set */
Re: [PATCH] Remove libsas PCI dependencies
Quoted 11 lines · Jeff Garzik
Quoted 5 lines · Meelis Roos
Tried to compile everythin SCSI on my SBus-only sparc64, including SAS supoort. Seems that libsas seems to depend on PCI - does it need to?
MODPOST 446 modules
ERROR: "pci_iommu_ops" [drivers/scsi/libsas/libsas.ko] undefined!Does the attached patch fix things? 2.6.23-rc1 material, methinks.
libsas should -not- require PCI, even though aic94xx does.
Realistically, even for parisc, I can't see anyone producing a non-PCI SAS device (even though I'd like one).
Quoted 88 lines
Signed-off-by Jeff Garzik <[email protected]>plain text document attachment (patch)
drivers/scsi/aic94xx/aic94xx_init.c +1
-3@@ -586,7 +586,7 @@ static int __devinit asd_pci_probe(struct pci_dev *dev, goto Err; } asd_ha->pcidev = dev; - asd_ha->sas_ha.pcidev = asd_ha->pcidev; + asd_ha->sas_ha.dev = &asd_ha->pcidev->dev; asd_ha->sas_ha.lldd_ha = asd_ha; asd_ha->name = asd_dev->name;@@ -605,8 +605,6 @@ static int __devinit asd_pci_probe(struct pci_dev *dev, goto Err_free; } - - err = asd_dev->setup (asd_ha);if (err) goto Err_free;drivers/scsi/libsas/sas_ata.c +9
-9@@ -382,7 +382,7 @@ int sas_ata_init_host_and_port(struct domain_device *found_dev,struct ata_port *ap;ata_host_init (&found_dev->sata_dev.ata_host, - &ha->pcidev->dev, + ha->dev, sata_port_info.flags, &sas_sata_ops); ap = ata_sas_port_alloc(&found_dev->sata_dev.ata_host,@@ -448,10 +448,10 @@ static void sas_disc_task_done(struct sas_task *task)* @task: the task to be executed * @buffer: pointer to buffer to do I/O * @size: size of @buffer -* @pci_dma_dir: PCI_DMA_... +* @dma_dir: DMA direction. DMA_xxx */ static int sas_execute_task (struct sas_task *task,void *buffer,int size, -int pci_dma_dir) +int dma_dir) {int res =0 ;struct scatterlist *scatter =NULL ;@@ -461,7 +461,7 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size,struct sas_internal *i =to_sas_internal (task->dev->port->ha->core.shost->transportt); -if (pci_dma_dir !=PCI_DMA_NONE ) { +if (dma_dir !=DMA_NONE ) { scatter =kzalloc (sizeof (*scatter),GFP_KERNEL );if (!scatter) goto out;@@ -474,11 +474,11 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size, task->scatter = scatter; task->num_scatter = num_scatter; task->total_xfer_len = size; - task->data_dir = pci_dma_dir; + task->data_dir = dma_dir; task->task_done = sas_disc_task_done; -if (pci_dma_dir !=PCI_DMA_NONE && +if (dma_dir !=DMA_NONE &&sas_protocol_ata (task->task_proto)) { - task->num_scatter =pci_map_sg (task->dev->port->ha->pcidev, + task->num_scatter =dma_map_sg (task->dev->port->ha->dev, task->scatter, task->num_scatter, task->data_dir);@@ -565,9 +565,9 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size, } } ex_err: -if (pci_dma_dir !=PCI_DMA_NONE ) { +if (dma_dir !=DMA_NONE ) {if (sas_protocol_ata (task->task_proto)) -pci_unmap_sg (task->dev->port->ha->pcidev, +dma_unmap_sg (task->dev->port->ha->dev, task->scatter, task->num_scatter, task->data_dir);kfree (scatter);
drivers/scsi/libsas/sas_ata.c static void sas_get_ata_command_set(struct domain_device *dev) · line 635
Quoted 10 lines
drivers/scsi/libsas/sas_ata.c +2
-2@@ -628,11 +628,11 @@ static void sas_get_ata_command_set(struct domain_device *dev)* @features: the features register * @buffer: pointer to buffer to do I/O * @size: size of @buffer -* @pci_dma_dir: PCI_DMA_... +* @dma_dir: DMA direction. DMA_xxx */ static int sas_issue_ata_cmd (struct domain_device *dev,u8 command,u8 features,void *buffer,int size, -int pci_dma_dir) +int dma_dir)
This should become enum dma_data_direction if we're going to go the generic route.
Otherwise, everything else looks fine.
James
Re: [PATCH] Remove libsas PCI dependencies
Quoted 5 lines · James Bottomley
Quoted 1 line · Jeff Garzik
libsas should -not- require PCI, even though aic94xx does.
Realistically, even for parisc, I can't see anyone producing a non-PCI SAS device (even though I'd like one).
While SBUS, GSC, VME, ISA, EISA, MCA, VL, PCMCIA, TurboChannel and Zorro all seem pretty unlikely, I could see someone producing a RapidIO device.
Signature · 3 lines
"Bill, look, we understand that you're interested in selling us this operating system, but compare it to ours. We can't possibly take such a retrograde step."
PATCH v2 1/1 Remove libsas PCI dependencies
In reply to James BottomleyEliminate unnecessary PCI dependencies in libsas. It should use generic DMA and struct device like other subsystems.
drivers/scsi/aic94xx/aic94xx_init.c +1 -3
@@ -586,7 +586,7 @@ static int __devinit asd_pci_probe(struct pci_dev *dev, goto Err; } asd_ha->pcidev = dev; - asd_ha->sas_ha.pcidev = asd_ha->pcidev; + asd_ha->sas_ha.dev = &asd_ha->pcidev->dev; asd_ha->sas_ha.lldd_ha = asd_ha; asd_ha->name = asd_dev->name;
@@ -605,8 +605,6 @@ static int __devinit asd_pci_probe(struct pci_dev *dev, goto Err_free; } - - err = asd_dev->setup (asd_ha);if (err) goto Err_free;
drivers/scsi/libsas/sas_ata.c +15 -15
@@ -382,7 +382,7 @@ int sas_ata_init_host_and_port(struct domain_device *found_dev,struct ata_port *ap;ata_host_init (&found_dev->sata_dev.ata_host, - &ha->pcidev->dev, + ha->dev, sata_port_info.flags, &sas_sata_ops); ap = ata_sas_port_alloc(&found_dev->sata_dev.ata_host,
@@ -448,10 +448,10 @@ static void sas_disc_task_done(struct sas_task *task)* @task: the task to be executed * @buffer: pointer to buffer to do I/O * @size: size of @buffer -* @pci_dma_dir: PCI_DMA_... +* @dma_dir: DMA direction. DMA_xxx */ static int sas_execute_task (struct sas_task *task,void *buffer,int size, -int pci_dma_dir) +enum dma_data_direction dma_dir) {int res =0 ;struct scatterlist *scatter =NULL ;
@@ -461,7 +461,7 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size,struct sas_internal *i =to_sas_internal (task->dev->port->ha->core.shost->transportt); -if (pci_dma_dir !=PCI_DMA_NONE ) { +if (dma_dir !=DMA_NONE ) { scatter =kzalloc (sizeof (*scatter),GFP_KERNEL );if (!scatter) goto out;
@@ -474,11 +474,11 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size, task->scatter = scatter; task->num_scatter = num_scatter; task->total_xfer_len = size; - task->data_dir = pci_dma_dir; + task->data_dir = dma_dir; task->task_done = sas_disc_task_done; -if (pci_dma_dir !=PCI_DMA_NONE && +if (dma_dir !=DMA_NONE &&sas_protocol_ata (task->task_proto)) { - task->num_scatter =pci_map_sg (task->dev->port->ha->pcidev, + task->num_scatter =dma_map_sg (task->dev->port->ha->dev, task->scatter, task->num_scatter, task->data_dir);
@@ -565,9 +565,9 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size, } } ex_err: -if (pci_dma_dir !=PCI_DMA_NONE ) { +if (dma_dir !=DMA_NONE ) {if (sas_protocol_ata (task->task_proto)) -pci_unmap_sg (task->dev->port->ha->pcidev, +dma_unmap_sg (task->dev->port->ha->dev, task->scatter, task->num_scatter, task->data_dir);kfree (scatter);
@@ -628,11 +628,11 @@ static void sas_get_ata_command_set(struct domain_device *dev)* @features: the features register * @buffer: pointer to buffer to do I/O * @size: size of @buffer -* @pci_dma_dir: PCI_DMA_... +* @dma_dir: DMA direction. DMA_xxx */ static int sas_issue_ata_cmd (struct domain_device *dev,u8 command,u8 features,void *buffer,int size, -int pci_dma_dir) +enum dma_data_direction dma_dir) {int res =0 ;struct sas_task *task;
@@ -652,7 +652,7 @@ static int sas_issue_ata_cmd(struct domain_device *dev, u8 command, task->ata_task.fis.device = d2h_fis->device; task->ata_task.retry_count =1 ; - res =sas_execute_task (task, buffer, size, pci_dma_dir); + res =sas_execute_task (task, buffer, size, dma_dir);sas_free_task (task); out:
@@ -707,7 +707,7 @@ static int sas_discover_sata_dev(struct domain_device *dev) } res =sas_issue_ata_cmd (dev, command,0 , identify_x,512 , -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE );if (res) goto out_err;
@@ -720,13 +720,13 @@ static int sas_discover_sata_dev(struct domain_device *dev) goto cont1; res =sas_issue_ata_cmd (dev,ATA_SET_FEATURES ,ATA_FEATURE_PUP_STBY_SPIN_UP , -NULL ,0 ,PCI_DMA_NONE ); +NULL ,0 ,DMA_NONE );if (res) goto cont1;schedule_timeout_interruptible (5 *HZ );/* More time? */ res =sas_issue_ata_cmd (dev, command,0 , identify_x,512 , -PCI_DMA_FROMDEVICE ); +DMA_FROM_DEVICE );if (res) goto out_err; }
drivers/scsi/libsas/sas_discover.c +1 -2
@@ -22,7 +22,6 @@* */ -#include <linux/pci.h> #include <linux/scatterlist.h> #include <scsi/scsi_host.h> #include <scsi/scsi_eh.h>
@@ -170,7 +169,7 @@ int sas_notify_lldd_dev_found(struct domain_device *dev)if (res) {printk ("sas: driver on pcidev %s cannot handle " "device %llx, error:%d\n" , -pci_name (sas_ha->pcidev), + sas_ha->dev->bus_id,SAS_ADDR (dev->sas_addr), res); } }
drivers/scsi/libsas/sas_dump.c +1 -1
@@ -56,7 +56,7 @@ void sas_dprint_phye(int phyid, enum phy_event pe)void sas_dprint_hae (struct sas_ha_struct *sas_ha,enum ha_event he) { -SAS_DPRINTK ("ha %s: %s event\n" ,pci_name (sas_ha->pcidev), +SAS_DPRINTK ("ha %s: %s event\n" , sas_ha->dev->bus_id, sas_hae_str[he]); }
include/scsi/libsas.h +1 -1
@@ -348,7 +348,7 @@ struct sas_ha_struct {/* public: */ char *sas_ha_name; -struct pci_dev *pcidev;/* should be set */ +struct device *dev;/* should be set */ struct module *lldd_module;/* should be set */ u8 *sas_addr;/* must be set */
Re: [PATCH v2] Remove libsas PCI dependencies
Quoted 2 lines
Eliminate unnecessary PCI dependencies in libsas. It should use generic DMA and struct device like other subsystems.
Compiles fine, unfortunately I can not test kernels on this machine since I have yet to dig out the reason my kernels do not boot.
Signature · 1 line
Meelis Roos ([email protected])
Re: [PATCH v2] Remove libsas PCI dependencies
Quoted 4 lines · Meelis Roos
Quoted 2 lines
Eliminate unnecessary PCI dependencies in libsas. It should use generic DMA and struct device like other subsystems.
Compiles fine, unfortunately I can not test kernels on this machine since I have yet to dig out the reason my kernels do not boot.
That's about the best we can ask for :) Thanks. I'm pretty sure you do not have any SAS hardware in your sparc32...
Jeff
Re: [PATCH v2] Remove libsas PCI dependencies
Quoted 5 lines
Quoted 2 lines
Compiles fine, unfortunately I can not test kernels on this machine since I have yet to dig out the reason my kernels do not boot.
That's about the best we can ask for :) Thanks. I'm pretty sure you do not have any SAS hardware in your sparc32...
Nope, this is a differnet computer - SBus-only Ultra 1 with sparc64 architecture. The test I meant to do but could't was to load the libsas module.
Signature · 1 line
Meelis Roos ([email protected])
Re: [PATCH v2] Remove libsas PCI dependencies
In reply to Jeff GarzikQuoted 9 lines · Jeff Garzik
Quoted 5 lines · Meelis Roos
Quoted 2 lines
Eliminate unnecessary PCI dependencies in libsas. It should use generic DMA and struct device like other subsystems.
Compiles fine, unfortunately I can not test kernels on this machine since I have yet to dig out the reason my kernels do not boot.
That's about the best we can ask for :) Thanks. I'm pretty sure you do not have any SAS hardware in your sparc32...
I've tested it on aic94xx.
James
Re: [PATCH] Remove libsas PCI dependencies
In reply to James BottomleyQuoted 2 lines · James Bottomley
Realistically, even for parisc, I can't see anyone producing a non-PCI SAS device (even though I'd like one).
A non-PCI device embedded on an SoC or system bus is highly -likely-, IMO.
SAS+SATA silicon (w/out firmware assist as with aic94xx) is the direction that Marvell and Broadcom have gone. I would say it's practically inevitable that someone will embed a SAS+SATA chip eventually.
Quoted 2 lines
This should become enum
dma_data_directionif we're going to go the generic route.
Updated.
Jeff