Commit cc3347ed authored by James Bottomley's avatar James Bottomley

Merge jejb/andmike changes

parents e9167d31 6242b376
......@@ -448,6 +448,7 @@ struct pci_dev * __devinit pci_scan_device(struct pci_dev *temp)
/* now put in global tree */
strcpy(dev->dev.bus_id,dev->slot_name);
dev->dev.dma_mask = &dev->dma_mask;
device_register(&dev->dev);
return dev;
......
......@@ -479,12 +479,6 @@ struct Scsi_Host
*/
unsigned int max_host_blocked;
/*
* For SCSI hosts which are PCI devices, set pci_dev so that
* we can do BIOS EDD 3.0 mappings
*/
struct pci_dev *pci_dev;
/*
* Support for driverfs filesystem
*/
......@@ -522,11 +516,16 @@ static inline void scsi_assign_lock(struct Scsi_Host *shost, spinlock_t *lock)
shost->host_lock = lock;
}
static inline void scsi_set_device(struct Scsi_Host *shost,
struct device *dev)
{
shost->host_gendev = dev;
}
static inline void scsi_set_pci_device(struct Scsi_Host *shost,
struct pci_dev *pdev)
{
shost->pci_dev = pdev;
shost->host_gendev = &pdev->dev;
scsi_set_device(shost, &pdev->dev);
}
......
......@@ -393,12 +393,13 @@ int scsi_ioctl_send_command(Scsi_Device * dev, Scsi_Ioctl_Command * sic)
* any copy_to_user() error on failure there
*/
static int
scsi_ioctl_get_pci(Scsi_Device * dev, void *arg)
scsi_ioctl_get_pci(Scsi_Device * sdev, void *arg)
{
struct device *dev = sdev->host->host_driverfs_dev.parent;
if (!dev->host->pci_dev) return -ENXIO;
return copy_to_user(arg, dev->host->pci_dev->slot_name,
sizeof(dev->host->pci_dev->slot_name));
if (!dev) return -ENXIO;
return copy_to_user(arg, dev->bus_id,
sizeof(dev->bus_id));
}
......
......@@ -373,11 +373,12 @@ static void scsi_initialize_merge_fn(struct scsi_device *sd)
{
request_queue_t *q = &sd->request_queue;
struct Scsi_Host *sh = sd->host;
struct device *dev = sh->host_driverfs_dev.parent;
u64 bounce_limit;
if (sh->highmem_io) {
if (sh->pci_dev && PCI_DMA_BUS_IS_PHYS) {
bounce_limit = sh->pci_dev->dma_mask;
if (dev && dev->dma_mask && PCI_DMA_BUS_IS_PHYS) {
bounce_limit = *dev->dma_mask;
} else {
/*
* Platforms with virtual-DMA translation
......
......@@ -3770,13 +3770,14 @@ static int st_attach(Scsi_Device * SDp)
tpnt->try_dio = try_direct_io && !SDp->host->unchecked_isa_dma;
bounce_limit = BLK_BOUNCE_HIGH; /* Borrowed from scsi_merge.c */
if (SDp->host->highmem_io) {
struct device *dev = SDp->host->host_driverfs_dev.parent;
if (!PCI_DMA_BUS_IS_PHYS)
/* Platforms with virtual-DMA translation
* hardware have no practical limit.
*/
bounce_limit = BLK_BOUNCE_ANY;
else if (SDp->host->pci_dev)
bounce_limit = SDp->host->pci_dev->dma_mask;
else if (dev && dev->dma_mask)
bounce_limit = *dev->dma_mask;
} else if (SDp->host->unchecked_isa_dma)
bounce_limit = BLK_BOUNCE_ISA;
bounce_limit >>= PAGE_SHIFT;
......
......@@ -270,6 +270,7 @@ struct device {
being off. */
unsigned char *saved_state; /* saved device state */
u64 *dma_mask; /* dma mask (if dma'able device) */
void (*release)(struct device * dev);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment