scsi_host_alloc() used kzalloc(), which always picks an arbitrary node.
Extend the function to accept a 'struct device *dev' parameter and use
kzalloc_node() with dev_to_node(dev) so the Scsi_Host struct lands on
the same NUMA node as the HBA, mirroring the treatment already applied
to struct scsi_device, struct scsi_target, and shost_data.

When dev is NULL (legacy ISA/platform drivers without a dma_dev) the
allocation falls back to NUMA_NO_NODE, preserving existing behaviour.

Update all in-tree callers:
  - PCI-based HBA drivers pass &pdev->dev (or the equivalent struct
    member such as &phba->pcidev->dev, &h->pdev->dev, &ha->pdev->dev)
    so their host struct is placed on the adapter's node.
  - Non-PCI drivers (ISA, Amiga, ARM PCMCIA, virtio, Hyper-V, PS3, …)
    pass NULL.
  - libfc's libfc_host_alloc() inline helper passes NULL; FC drivers
    that want NUMA awareness can open-code the call with their pdev.

Suggested-by: John Garry <[email protected]>
Signed-off-by: Sumit Saxena <[email protected]>
---
 drivers/scsi/3w-9xxx.c                    | 2 +-
 drivers/scsi/3w-sas.c                     | 2 +-
 drivers/scsi/3w-xxxx.c                    | 2 +-
 drivers/scsi/53c700.c                     | 2 +-
 drivers/scsi/BusLogic.c                   | 2 +-
 drivers/scsi/a100u2w.c                    | 2 +-
 drivers/scsi/a2091.c                      | 2 +-
 drivers/scsi/a3000.c                      | 2 +-
 drivers/scsi/aacraid/linit.c              | 2 +-
 drivers/scsi/advansys.c                   | 6 +++---
 drivers/scsi/aha152x.c                    | 2 +-
 drivers/scsi/aha1542.c                    | 2 +-
 drivers/scsi/aha1740.c                    | 2 +-
 drivers/scsi/aic7xxx/aic79xx_osm.c        | 2 +-
 drivers/scsi/aic7xxx/aic7xxx_osm.c        | 2 +-
 drivers/scsi/aic94xx/aic94xx_init.c       | 2 +-
 drivers/scsi/am53c974.c                   | 2 +-
 drivers/scsi/arcmsr/arcmsr_hba.c          | 3 ++-
 drivers/scsi/arm/acornscsi.c              | 2 +-
 drivers/scsi/arm/arxescsi.c               | 2 +-
 drivers/scsi/arm/cumana_1.c               | 2 +-
 drivers/scsi/arm/cumana_2.c               | 2 +-
 drivers/scsi/arm/eesox.c                  | 2 +-
 drivers/scsi/arm/oak.c                    | 2 +-
 drivers/scsi/arm/powertec.c               | 2 +-
 drivers/scsi/atari_scsi.c                 | 2 +-
 drivers/scsi/atp870u.c                    | 2 +-
 drivers/scsi/bfa/bfad_im.c                | 2 +-
 drivers/scsi/csiostor/csio_init.c         | 4 ++--
 drivers/scsi/dc395x.c                     | 2 +-
 drivers/scsi/dmx3191d.c                   | 2 +-
 drivers/scsi/elx/efct/efct_xport.c        | 4 ++--
 drivers/scsi/esas2r/esas2r_main.c         | 2 +-
 drivers/scsi/fdomain.c                    | 2 +-
 drivers/scsi/fnic/fnic_main.c             | 2 +-
 drivers/scsi/g_NCR5380.c                  | 2 +-
 drivers/scsi/gvp11.c                      | 2 +-
 drivers/scsi/hisi_sas/hisi_sas_main.c     | 2 +-
 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c    | 2 +-
 drivers/scsi/hosts.c                      | 6 ++++--
 drivers/scsi/hpsa.c                       | 2 +-
 drivers/scsi/hptiop.c                     | 2 +-
 drivers/scsi/ibmvscsi/ibmvfc.c            | 2 +-
 drivers/scsi/ibmvscsi/ibmvscsi.c          | 2 +-
 drivers/scsi/imm.c                        | 2 +-
 drivers/scsi/initio.c                     | 2 +-
 drivers/scsi/ipr.c                        | 2 +-
 drivers/scsi/ips.c                        | 2 +-
 drivers/scsi/isci/init.c                  | 2 +-
 drivers/scsi/jazz_esp.c                   | 2 +-
 drivers/scsi/libiscsi.c                   | 2 +-
 drivers/scsi/lpfc/lpfc_init.c             | 2 +-
 drivers/scsi/mac53c94.c                   | 2 +-
 drivers/scsi/mac_esp.c                    | 2 +-
 drivers/scsi/mac_scsi.c                   | 2 +-
 drivers/scsi/megaraid.c                   | 2 +-
 drivers/scsi/megaraid/megaraid_mbox.c     | 2 +-
 drivers/scsi/megaraid/megaraid_sas_base.c | 2 +-
 drivers/scsi/mesh.c                       | 2 +-
 drivers/scsi/mpi3mr/mpi3mr_os.c           | 2 +-
 drivers/scsi/mpt3sas/mpt3sas_scsih.c      | 4 ++--
 drivers/scsi/mvme147.c                    | 2 +-
 drivers/scsi/mvsas/mv_init.c              | 2 +-
 drivers/scsi/mvumi.c                      | 2 +-
 drivers/scsi/myrb.c                       | 2 +-
 drivers/scsi/myrs.c                       | 2 +-
 drivers/scsi/ncr53c8xx.c                  | 2 +-
 drivers/scsi/nsp32.c                      | 2 +-
 drivers/scsi/pcmcia/nsp_cs.c              | 2 +-
 drivers/scsi/pcmcia/qlogic_stub.c         | 2 +-
 drivers/scsi/pcmcia/sym53c500_cs.c        | 2 +-
 drivers/scsi/pm8001/pm8001_init.c         | 2 +-
 drivers/scsi/pmcraid.c                    | 2 +-
 drivers/scsi/ppa.c                        | 2 +-
 drivers/scsi/ps3rom.c                     | 2 +-
 drivers/scsi/qla1280.c                    | 2 +-
 drivers/scsi/qla2xxx/qla_mid.c            | 2 +-
 drivers/scsi/qla2xxx/qla_os.c             | 2 +-
 drivers/scsi/qlogicfas.c                  | 2 +-
 drivers/scsi/qlogicpti.c                  | 2 +-
 drivers/scsi/scsi_debug.c                 | 2 +-
 drivers/scsi/sgiwd93.c                    | 2 +-
 drivers/scsi/smartpqi/smartpqi_init.c     | 2 +-
 drivers/scsi/snic/snic_main.c             | 2 +-
 drivers/scsi/stex.c                       | 2 +-
 drivers/scsi/storvsc_drv.c                | 2 +-
 drivers/scsi/sun3_scsi.c                  | 2 +-
 drivers/scsi/sun3x_esp.c                  | 2 +-
 drivers/scsi/sun_esp.c                    | 2 +-
 drivers/scsi/sym53c8xx_2/sym_glue.c       | 2 +-
 drivers/scsi/virtio_scsi.c                | 2 +-
 drivers/scsi/vmw_pvscsi.c                 | 2 +-
 drivers/scsi/wd719x.c                     | 2 +-
 drivers/scsi/xen-scsifront.c              | 2 +-
 drivers/scsi/zorro_esp.c                  | 2 +-
 include/scsi/libfc.h                      | 2 +-
 include/scsi/scsi_host.h                  | 3 ++-
 97 files changed, 107 insertions(+), 103 deletions(-)

diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
index 9b93a2440af8..444578ee8070 100644
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -2021,7 +2021,7 @@ static int twa_probe(struct pci_dev *pdev, const struct 
pci_device_id *dev_id)
                goto out_disable_device;
        }
 
-       host = scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension));
+       host = scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension), 
&pdev->dev);
        if (!host) {
                TW_PRINTK(host, TW_DRIVER, 0x24, "Failed to allocate memory for 
device extension");
                retval = -ENOMEM;
diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c
index 52dc1aa639f7..d063d39faf4f 100644
--- a/drivers/scsi/3w-sas.c
+++ b/drivers/scsi/3w-sas.c
@@ -1576,7 +1576,7 @@ static int twl_probe(struct pci_dev *pdev, const struct 
pci_device_id *dev_id)
                goto out_disable_device;
        }
 
-       host = scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension));
+       host = scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension), 
&pdev->dev);
        if (!host) {
                TW_PRINTK(host, TW_DRIVER, 0x19, "Failed to allocate memory for 
device extension");
                retval = -ENOMEM;
diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
index c68678fa72c1..0ccb5f1f8805 100644
--- a/drivers/scsi/3w-xxxx.c
+++ b/drivers/scsi/3w-xxxx.c
@@ -2268,7 +2268,7 @@ static int tw_probe(struct pci_dev *pdev, const struct 
pci_device_id *dev_id)
                goto out_disable_device;
        }
 
-       host = scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension));
+       host = scsi_host_alloc(&driver_template, sizeof(TW_Device_Extension), 
&pdev->dev);
        if (!host) {
                printk(KERN_WARNING "3w-xxxx: Failed to allocate memory for 
device extension.");
                retval = -ENOMEM;
diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c
index c78f74b8f45c..e30d55ab5dea 100644
--- a/drivers/scsi/53c700.c
+++ b/drivers/scsi/53c700.c
@@ -341,7 +341,7 @@ NCR_700_detect(struct scsi_host_template *tpnt,
        if(tpnt->proc_name == NULL)
                tpnt->proc_name = "53c700";
 
-       host = scsi_host_alloc(tpnt, 4);
+       host = scsi_host_alloc(tpnt, 4, NULL);
        if (!host)
                return NULL;
        memset(hostdata->slots, 0, sizeof(struct NCR_700_command_slot)
diff --git a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c
index 5304d2febd63..f865fdec4136 100644
--- a/drivers/scsi/BusLogic.c
+++ b/drivers/scsi/BusLogic.c
@@ -2302,7 +2302,7 @@ static int __init blogic_init(void)
                 */
 
                host = scsi_host_alloc(&blogic_template,
-                               sizeof(struct blogic_adapter));
+                               sizeof(struct blogic_adapter), NULL);
                if (host == NULL) {
                        release_region(myadapter->io_addr,
                                        myadapter->addr_count);
diff --git a/drivers/scsi/a100u2w.c b/drivers/scsi/a100u2w.c
index 4365b896f5c4..9124c6103902 100644
--- a/drivers/scsi/a100u2w.c
+++ b/drivers/scsi/a100u2w.c
@@ -1106,7 +1106,7 @@ static int inia100_probe_one(struct pci_dev *pdev,
        bios = inw(port + 0x50);
 
 
-       shost = scsi_host_alloc(&inia100_template, sizeof(struct orc_host));
+       shost = scsi_host_alloc(&inia100_template, sizeof(struct orc_host), 
&pdev->dev);
        if (!shost)
                goto out_release_region;
 
diff --git a/drivers/scsi/a2091.c b/drivers/scsi/a2091.c
index 204448bfd04b..51effb2edefb 100644
--- a/drivers/scsi/a2091.c
+++ b/drivers/scsi/a2091.c
@@ -214,7 +214,7 @@ static int a2091_probe(struct zorro_dev *z, const struct 
zorro_device_id *ent)
                return -EBUSY;
 
        instance = scsi_host_alloc(&a2091_scsi_template,
-                                  sizeof(struct a2091_hostdata));
+                                  sizeof(struct a2091_hostdata), NULL);
        if (!instance) {
                error = -ENOMEM;
                goto fail_alloc;
diff --git a/drivers/scsi/a3000.c b/drivers/scsi/a3000.c
index bf054dd7682b..5b3d25b8ad37 100644
--- a/drivers/scsi/a3000.c
+++ b/drivers/scsi/a3000.c
@@ -235,7 +235,7 @@ static int __init amiga_a3000_scsi_probe(struct 
platform_device *pdev)
                return -EBUSY;
 
        instance = scsi_host_alloc(&amiga_a3000_scsi_template,
-                                  sizeof(struct a3000_hostdata));
+                                  sizeof(struct a3000_hostdata), NULL);
        if (!instance) {
                error = -ENOMEM;
                goto fail_alloc;
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 2fa8f7ddb703..d003667007f7 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -1636,7 +1636,7 @@ static int aac_probe_one(struct pci_dev *pdev, const 
struct pci_device_id *id)
 
        pci_set_master(pdev);
 
-       shost = scsi_host_alloc(&aac_driver_template, sizeof(struct aac_dev));
+       shost = scsi_host_alloc(&aac_driver_template, sizeof(struct aac_dev), 
&pdev->dev);
        if (!shost) {
                error = -ENOMEM;
                goto out_disable_pdev;
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c
index 5cdbf2bdb13d..e7ef433778a1 100644
--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -11237,7 +11237,7 @@ static int advansys_vlb_probe(struct device *dev, 
unsigned int id)
                goto release_region;
 
        err = -ENOMEM;
-       shost = scsi_host_alloc(&advansys_template, sizeof(*board));
+       shost = scsi_host_alloc(&advansys_template, sizeof(*board), NULL);
        if (!shost)
                goto release_region;
 
@@ -11345,7 +11345,7 @@ static int advansys_eisa_probe(struct device *dev)
                        irq = advansys_eisa_irq_no(edev);
 
                err = -ENOMEM;
-               shost = scsi_host_alloc(&advansys_template, sizeof(*board));
+               shost = scsi_host_alloc(&advansys_template, sizeof(*board), 
NULL);
                if (!shost)
                        goto release_region;
 
@@ -11462,7 +11462,7 @@ static int advansys_pci_probe(struct pci_dev *pdev,
        ioport = pci_resource_start(pdev, 0);
 
        err = -ENOMEM;
-       shost = scsi_host_alloc(&advansys_template, sizeof(*board));
+       shost = scsi_host_alloc(&advansys_template, sizeof(*board), &pdev->dev);
        if (!shost)
                goto release_region;
 
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c
index e3ccb6bb62c0..d82ce80de098 100644
--- a/drivers/scsi/aha152x.c
+++ b/drivers/scsi/aha152x.c
@@ -734,7 +734,7 @@ struct Scsi_Host *aha152x_probe_one(struct aha152x_setup 
*setup)
 {
        struct Scsi_Host *shpnt;
 
-       shpnt = scsi_host_alloc(&aha152x_driver_template, sizeof(struct 
aha152x_hostdata));
+       shpnt = scsi_host_alloc(&aha152x_driver_template, sizeof(struct 
aha152x_hostdata), NULL);
        if (!shpnt) {
                printk(KERN_ERR "aha152x: scsi_host_alloc failed\n");
                return NULL;
diff --git a/drivers/scsi/aha1542.c b/drivers/scsi/aha1542.c
index fd766282d4a4..1a109c850785 100644
--- a/drivers/scsi/aha1542.c
+++ b/drivers/scsi/aha1542.c
@@ -752,7 +752,7 @@ static struct Scsi_Host *aha1542_hw_init(const struct 
scsi_host_template *tpnt,
        if (!request_region(base_io, AHA1542_REGION_SIZE, "aha1542"))
                return NULL;
 
-       sh = scsi_host_alloc(tpnt, sizeof(struct aha1542_hostdata));
+       sh = scsi_host_alloc(tpnt, sizeof(struct aha1542_hostdata), NULL);
        if (!sh)
                goto release;
        aha1542 = shost_priv(sh);
diff --git a/drivers/scsi/aha1740.c b/drivers/scsi/aha1740.c
index c435769359f2..31a52edf0748 100644
--- a/drivers/scsi/aha1740.c
+++ b/drivers/scsi/aha1740.c
@@ -583,7 +583,7 @@ static int aha1740_probe (struct device *dev)
        printk(KERN_INFO "aha174x: Extended translation %sabled.\n",
               translation ? "en" : "dis");
        shpnt = scsi_host_alloc(&aha1740_template,
-                             sizeof(struct aha1740_hostdata));
+                             sizeof(struct aha1740_hostdata), NULL);
        if(shpnt == NULL)
                goto err_release_region;
 
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.c 
b/drivers/scsi/aic7xxx/aic79xx_osm.c
index feb1707feb7e..76e30b0784b9 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm.c
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.c
@@ -1214,7 +1214,7 @@ ahd_linux_register_host(struct ahd_softc *ahd, struct 
scsi_host_template *templa
        int     retval;
 
        template->name = ahd->description;
-       host = scsi_host_alloc(template, sizeof(struct ahd_softc *));
+       host = scsi_host_alloc(template, sizeof(struct ahd_softc *), NULL);
        if (host == NULL)
                return (ENOMEM);
 
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.c 
b/drivers/scsi/aic7xxx/aic7xxx_osm.c
index d93b522695eb..0169509abd76 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c
@@ -1083,7 +1083,7 @@ ahc_linux_register_host(struct ahc_softc *ahc, struct 
scsi_host_template *templa
        int     retval;
 
        template->name = ahc->description;
-       host = scsi_host_alloc(template, sizeof(struct ahc_softc *));
+       host = scsi_host_alloc(template, sizeof(struct ahc_softc *), NULL);
        if (host == NULL)
                return -ENOMEM;
 
diff --git a/drivers/scsi/aic94xx/aic94xx_init.c 
b/drivers/scsi/aic94xx/aic94xx_init.c
index 4400a3661d90..1336e5e38f8d 100644
--- a/drivers/scsi/aic94xx/aic94xx_init.c
+++ b/drivers/scsi/aic94xx/aic94xx_init.c
@@ -704,7 +704,7 @@ static int asd_pci_probe(struct pci_dev *dev, const struct 
pci_device_id *id)
 
        err = -ENOMEM;
 
-       shost = scsi_host_alloc(&aic94xx_sht, sizeof(void *));
+       shost = scsi_host_alloc(&aic94xx_sht, sizeof(void *), &dev->dev);
        if (!shost)
                goto Err;
 
diff --git a/drivers/scsi/am53c974.c b/drivers/scsi/am53c974.c
index f972a3c90a2f..4ca73e801232 100644
--- a/drivers/scsi/am53c974.c
+++ b/drivers/scsi/am53c974.c
@@ -388,7 +388,7 @@ static int pci_esp_probe_one(struct pci_dev *pdev,
                goto fail_disable_device;
        }
 
-       shost = scsi_host_alloc(hostt, sizeof(struct esp));
+       shost = scsi_host_alloc(hostt, sizeof(struct esp), &pdev->dev);
        if (!shost) {
                dev_printk(KERN_INFO, &pdev->dev,
                           "failed to allocate scsi host\n");
diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c
index 8aa948f06cac..f0cc59e756dc 100644
--- a/drivers/scsi/arcmsr/arcmsr_hba.c
+++ b/drivers/scsi/arcmsr/arcmsr_hba.c
@@ -1087,7 +1087,8 @@ static int arcmsr_probe(struct pci_dev *pdev, const 
struct pci_device_id *id)
        if(error){
                return -ENODEV;
        }
-       host = scsi_host_alloc(&arcmsr_scsi_host_template, sizeof(struct 
AdapterControlBlock));
+       host = scsi_host_alloc(&arcmsr_scsi_host_template,
+                              sizeof(struct AdapterControlBlock), &pdev->dev);
        if(!host){
                goto pci_disable_dev;
        }
diff --git a/drivers/scsi/arm/acornscsi.c b/drivers/scsi/arm/acornscsi.c
index 79d7d7336b6a..97e3db7e6a7c 100644
--- a/drivers/scsi/arm/acornscsi.c
+++ b/drivers/scsi/arm/acornscsi.c
@@ -2806,7 +2806,7 @@ static int acornscsi_probe(struct expansion_card *ec, 
const struct ecard_id *id)
        if (ret)
                goto out;
 
-       host = scsi_host_alloc(&acornscsi_template, sizeof(AS_Host));
+       host = scsi_host_alloc(&acornscsi_template, sizeof(AS_Host), NULL);
        if (!host) {
                ret = -ENOMEM;
                goto out_release;
diff --git a/drivers/scsi/arm/arxescsi.c b/drivers/scsi/arm/arxescsi.c
index 925d0bd68aa5..32f0a3aefb44 100644
--- a/drivers/scsi/arm/arxescsi.c
+++ b/drivers/scsi/arm/arxescsi.c
@@ -272,7 +272,7 @@ static int arxescsi_probe(struct expansion_card *ec, const 
struct ecard_id *id)
                goto out_region;
        }
 
-       host = scsi_host_alloc(&arxescsi_template, sizeof(struct 
arxescsi_info));
+       host = scsi_host_alloc(&arxescsi_template, sizeof(struct 
arxescsi_info), NULL);
        if (!host) {
                ret = -ENOMEM;
                goto out_region;
diff --git a/drivers/scsi/arm/cumana_1.c b/drivers/scsi/arm/cumana_1.c
index d1a2a22ffe8c..d47ff9353c1b 100644
--- a/drivers/scsi/arm/cumana_1.c
+++ b/drivers/scsi/arm/cumana_1.c
@@ -238,7 +238,7 @@ static int cumanascsi1_probe(struct expansion_card *ec,
        if (ret)
                goto out;
 
-       host = scsi_host_alloc(&cumanascsi_template, sizeof(struct 
NCR5380_hostdata));
+       host = scsi_host_alloc(&cumanascsi_template, sizeof(struct 
NCR5380_hostdata), NULL);
        if (!host) {
                ret = -ENOMEM;
                goto out_release;
diff --git a/drivers/scsi/arm/cumana_2.c b/drivers/scsi/arm/cumana_2.c
index e460068f6834..e35afe3a1fe4 100644
--- a/drivers/scsi/arm/cumana_2.c
+++ b/drivers/scsi/arm/cumana_2.c
@@ -394,7 +394,7 @@ static int cumanascsi2_probe(struct expansion_card *ec,
        }
 
        host = scsi_host_alloc(&cumanascsi2_template,
-                              sizeof(struct cumanascsi2_info));
+                              sizeof(struct cumanascsi2_info), NULL);
        if (!host) {
                ret = -ENOMEM;
                goto out_region;
diff --git a/drivers/scsi/arm/eesox.c b/drivers/scsi/arm/eesox.c
index 99be9da8757f..de4d457f8ce7 100644
--- a/drivers/scsi/arm/eesox.c
+++ b/drivers/scsi/arm/eesox.c
@@ -510,7 +510,7 @@ static int eesoxscsi_probe(struct expansion_card *ec, const 
struct ecard_id *id)
        }
 
        host = scsi_host_alloc(&eesox_template,
-                              sizeof(struct eesoxscsi_info));
+                              sizeof(struct eesoxscsi_info), NULL);
        if (!host) {
                ret = -ENOMEM;
                goto out_region;
diff --git a/drivers/scsi/arm/oak.c b/drivers/scsi/arm/oak.c
index d69245007096..b2ff8616f963 100644
--- a/drivers/scsi/arm/oak.c
+++ b/drivers/scsi/arm/oak.c
@@ -126,7 +126,7 @@ static int oakscsi_probe(struct expansion_card *ec, const 
struct ecard_id *id)
        if (ret)
                goto out;
 
-       host = scsi_host_alloc(&oakscsi_template, sizeof(struct 
NCR5380_hostdata));
+       host = scsi_host_alloc(&oakscsi_template, sizeof(struct 
NCR5380_hostdata), NULL);
        if (!host) {
                ret = -ENOMEM;
                goto release;
diff --git a/drivers/scsi/arm/powertec.c b/drivers/scsi/arm/powertec.c
index 823c65ff6c12..045f35e50eff 100644
--- a/drivers/scsi/arm/powertec.c
+++ b/drivers/scsi/arm/powertec.c
@@ -318,7 +318,7 @@ static int powertecscsi_probe(struct expansion_card *ec,
        }
 
        host = scsi_host_alloc(&powertecscsi_template,
-                              sizeof (struct powertec_info));
+                              sizeof(struct powertec_info), NULL);
        if (!host) {
                ret = -ENOMEM;
                goto out_region;
diff --git a/drivers/scsi/atari_scsi.c b/drivers/scsi/atari_scsi.c
index 85055677666c..9a469cf3991f 100644
--- a/drivers/scsi/atari_scsi.c
+++ b/drivers/scsi/atari_scsi.c
@@ -785,7 +785,7 @@ static int __init atari_scsi_probe(struct platform_device 
*pdev)
        }
 
        instance = scsi_host_alloc(&atari_scsi_template,
-                                  sizeof(struct NCR5380_hostdata));
+                                  sizeof(struct NCR5380_hostdata), NULL);
        if (!instance) {
                error = -ENOMEM;
                goto fail_alloc;
diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 67459d81f479..57f0b4a11ba7 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1579,7 +1579,7 @@ static int atp870u_probe(struct pci_dev *pdev, const 
struct pci_device_id *ent)
        pci_set_master(pdev);
 
        err = -ENOMEM;
-       shpnt = scsi_host_alloc(&atp870u_template, sizeof(struct atp_unit));
+       shpnt = scsi_host_alloc(&atp870u_template, sizeof(struct atp_unit), 
&pdev->dev);
        if (!shpnt)
                goto release_region;
 
diff --git a/drivers/scsi/bfa/bfad_im.c b/drivers/scsi/bfa/bfad_im.c
index 97990b285e17..bd14aee64886 100644
--- a/drivers/scsi/bfa/bfad_im.c
+++ b/drivers/scsi/bfa/bfad_im.c
@@ -740,7 +740,7 @@ bfad_scsi_host_alloc(struct bfad_im_port_s *im_port, struct 
bfad_s *bfad)
 
        sht->sg_tablesize = bfad->cfg_data.io_max_sge;
 
-       return scsi_host_alloc(sht, sizeof(struct bfad_im_port_pointer));
+       return scsi_host_alloc(sht, sizeof(struct bfad_im_port_pointer), NULL);
 }
 
 void
diff --git a/drivers/scsi/csiostor/csio_init.c 
b/drivers/scsi/csiostor/csio_init.c
index 238431524801..a4bf1ba03248 100644
--- a/drivers/scsi/csiostor/csio_init.c
+++ b/drivers/scsi/csiostor/csio_init.c
@@ -606,11 +606,11 @@ csio_shost_init(struct csio_hw *hw, struct device *dev,
        if (dev == &hw->pdev->dev)
                shost = scsi_host_alloc(
                                &csio_fcoe_shost_template,
-                               sizeof(struct csio_lnode));
+                               sizeof(struct csio_lnode), &hw->pdev->dev);
        else
                shost = scsi_host_alloc(
                                &csio_fcoe_shost_vport_template,
-                               sizeof(struct csio_lnode));
+                               sizeof(struct csio_lnode), &hw->pdev->dev);
 
        if (!shost)
                goto err;
diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c
index 6183ce05d8cf..16adeac93aac 100644
--- a/drivers/scsi/dc395x.c
+++ b/drivers/scsi/dc395x.c
@@ -3984,7 +3984,7 @@ static int dc395x_init_one(struct pci_dev *dev, const 
struct pci_device_id *id)
 
        /* allocate scsi host information (includes out adapter) */
        scsi_host = scsi_host_alloc(&dc395x_driver_template,
-                                   sizeof(struct AdapterCtlBlk));
+                                   sizeof(struct AdapterCtlBlk), &dev->dev);
        if (!scsi_host)
                goto fail;
 
diff --git a/drivers/scsi/dmx3191d.c b/drivers/scsi/dmx3191d.c
index d6d091b2f3c7..8ba17e3eefe3 100644
--- a/drivers/scsi/dmx3191d.c
+++ b/drivers/scsi/dmx3191d.c
@@ -74,7 +74,7 @@ static int dmx3191d_probe_one(struct pci_dev *pdev,
        }
 
        shost = scsi_host_alloc(&dmx3191d_driver_template,
-                       sizeof(struct NCR5380_hostdata));
+                       sizeof(struct NCR5380_hostdata), &pdev->dev);
        if (!shost)
                goto out_release_region;       
 
diff --git a/drivers/scsi/elx/efct/efct_xport.c 
b/drivers/scsi/elx/efct/efct_xport.c
index 9dcaef6fc188..74ef76e00eb5 100644
--- a/drivers/scsi/elx/efct/efct_xport.c
+++ b/drivers/scsi/elx/efct/efct_xport.c
@@ -378,7 +378,7 @@ efct_scsi_new_device(struct efct *efct)
        int error = 0;
        struct efct_vport *vport = NULL;
 
-       shost = scsi_host_alloc(&efct_template, sizeof(*vport));
+       shost = scsi_host_alloc(&efct_template, sizeof(*vport), NULL);
        if (!shost) {
                efc_log_err(efct, "failed to allocate Scsi_Host struct\n");
                return -ENOMEM;
@@ -902,7 +902,7 @@ efct_scsi_new_vport(struct efct *efct, struct device *dev)
        int error = 0;
        struct efct_vport *vport = NULL;
 
-       shost = scsi_host_alloc(&efct_template, sizeof(*vport));
+       shost = scsi_host_alloc(&efct_template, sizeof(*vport), NULL);
        if (!shost) {
                efc_log_err(efct, "failed to allocate Scsi_Host struct\n");
                return NULL;
diff --git a/drivers/scsi/esas2r/esas2r_main.c 
b/drivers/scsi/esas2r/esas2r_main.c
index ada278c24c51..4aac1f6db5e9 100644
--- a/drivers/scsi/esas2r/esas2r_main.c
+++ b/drivers/scsi/esas2r/esas2r_main.c
@@ -382,7 +382,7 @@ static int esas2r_probe(struct pci_dev *pcid,
                       "after pci_enable_device() enable_cnt: %d",
                       pcid->enable_cnt.counter);
 
-       host = scsi_host_alloc(&driver_template, host_alloc_size);
+       host = scsi_host_alloc(&driver_template, host_alloc_size, &pcid->dev);
        if (host == NULL) {
                esas2r_log(ESAS2R_LOG_CRIT, "scsi_host_alloc() FAIL");
                return -ENODEV;
diff --git a/drivers/scsi/fdomain.c b/drivers/scsi/fdomain.c
index 22fbb0222f07..66ba4551def8 100644
--- a/drivers/scsi/fdomain.c
+++ b/drivers/scsi/fdomain.c
@@ -537,7 +537,7 @@ struct Scsi_Host *fdomain_create(int base, int irq, int 
this_id,
                return NULL;
        }
 
-       sh = scsi_host_alloc(&fdomain_template, sizeof(struct fdomain));
+       sh = scsi_host_alloc(&fdomain_template, sizeof(struct fdomain), NULL);
        if (!sh)
                return NULL;
 
diff --git a/drivers/scsi/fnic/fnic_main.c b/drivers/scsi/fnic/fnic_main.c
index 24d62c0874ac..688d85bc3f01 100644
--- a/drivers/scsi/fnic/fnic_main.c
+++ b/drivers/scsi/fnic/fnic_main.c
@@ -847,7 +847,7 @@ static int fnic_probe(struct pci_dev *pdev, const struct 
pci_device_id *ent)
                {
                        host =
                                scsi_host_alloc(&fnic_host_template,
-                                                               sizeof(struct 
fnic *));
+                                                               sizeof(struct 
fnic *), &pdev->dev);
                        if (!host) {
                                dev_err(&fnic->pdev->dev, "Unable to allocate 
scsi host\n");
                                err = -ENOMEM;
diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c
index 270eae7ac427..8b9076d6a964 100644
--- a/drivers/scsi/g_NCR5380.c
+++ b/drivers/scsi/g_NCR5380.c
@@ -312,7 +312,7 @@ static int generic_NCR5380_init_one(const struct 
scsi_host_template *tpnt,
                goto out_release;
        }
 
-       instance = scsi_host_alloc(tpnt, sizeof(struct NCR5380_hostdata));
+       instance = scsi_host_alloc(tpnt, sizeof(struct NCR5380_hostdata), NULL);
        if (instance == NULL) {
                ret = -ENOMEM;
                goto out_unmap;
diff --git a/drivers/scsi/gvp11.c b/drivers/scsi/gvp11.c
index 0420bfe9bd42..ad5052db5a2e 100644
--- a/drivers/scsi/gvp11.c
+++ b/drivers/scsi/gvp11.c
@@ -353,7 +353,7 @@ static int gvp11_probe(struct zorro_dev *z, const struct 
zorro_device_id *ent)
                goto fail_check_or_alloc;
 
        instance = scsi_host_alloc(&gvp11_scsi_template,
-                                  sizeof(struct gvp11_hostdata));
+                                  sizeof(struct gvp11_hostdata), NULL);
        if (!instance) {
                error = -ENOMEM;
                goto fail_check_or_alloc;
diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c 
b/drivers/scsi/hisi_sas/hisi_sas_main.c
index 944ce19ae2fc..5696da8da6c7 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_main.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
@@ -2483,7 +2483,7 @@ static struct Scsi_Host *hisi_sas_shost_alloc(struct 
platform_device *pdev,
        struct device *dev = &pdev->dev;
        int error;
 
-       shost = scsi_host_alloc(hw->sht, sizeof(*hisi_hba));
+       shost = scsi_host_alloc(hw->sht, sizeof(*hisi_hba), NULL);
        if (!shost) {
                dev_err(dev, "scsi host alloc failed\n");
                return NULL;
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c 
b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
index c7430f7c4048..44e584496ed5 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
@@ -3469,7 +3469,7 @@ hisi_sas_shost_alloc_pci(struct pci_dev *pdev)
        struct hisi_hba *hisi_hba;
        struct device *dev = &pdev->dev;
 
-       shost = scsi_host_alloc(&sht_v3_hw, sizeof(*hisi_hba));
+       shost = scsi_host_alloc(&sht_v3_hw, sizeof(*hisi_hba), &pdev->dev);
        if (!shost) {
                dev_err(dev, "shost alloc failed\n");
                return NULL;
diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
index e047747d4ecf..e1f42be79729 100644
--- a/drivers/scsi/hosts.c
+++ b/drivers/scsi/hosts.c
@@ -403,12 +403,14 @@ static const struct device_type scsi_host_type = {
  * Return value:
  *     Pointer to a new Scsi_Host
  **/
-struct Scsi_Host *scsi_host_alloc(const struct scsi_host_template *sht, int 
privsize)
+struct Scsi_Host *scsi_host_alloc(const struct scsi_host_template *sht, int 
privsize,
+                                 struct device *dev)
 {
        struct Scsi_Host *shost;
        int index;
 
-       shost = kzalloc(sizeof(struct Scsi_Host) + privsize, GFP_KERNEL);
+       shost = kzalloc_node(sizeof(struct Scsi_Host) + privsize, GFP_KERNEL,
+                            dev ? dev_to_node(dev) : NUMA_NO_NODE);
        if (!shost)
                return NULL;
 
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index a1b116cd4723..b9f9f18bd985 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -5837,7 +5837,7 @@ static int hpsa_scsi_host_alloc(struct ctlr_info *h)
 {
        struct Scsi_Host *sh;
 
-       sh = scsi_host_alloc(&hpsa_driver_template, sizeof(struct ctlr_info *));
+       sh = scsi_host_alloc(&hpsa_driver_template, sizeof(struct ctlr_info *), 
&h->pdev->dev);
        if (sh == NULL) {
                dev_err(&h->pdev->dev, "scsi_host_alloc failed\n");
                return -ENOMEM;
diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c
index 7083c14c5302..7d79357be265 100644
--- a/drivers/scsi/hptiop.c
+++ b/drivers/scsi/hptiop.c
@@ -1311,7 +1311,7 @@ static int hptiop_probe(struct pci_dev *pcidev, const 
struct pci_device_id *id)
                goto disable_pci_device;
        }
 
-       host = scsi_host_alloc(&driver_template, sizeof(struct hptiop_hba));
+       host = scsi_host_alloc(&driver_template, sizeof(struct hptiop_hba), 
&pcidev->dev);
        if (!host) {
                printk(KERN_ERR "hptiop: fail to alloc scsi host\n");
                goto free_pci_regions;
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index 3dd2adda195e..b11d564a21d9 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -6325,7 +6325,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const 
struct vio_device_id *id)
        unsigned int max_scsi_queues = min((unsigned 
int)IBMVFC_MAX_SCSI_QUEUES, online_cpus);
 
        ENTER;
-       shost = scsi_host_alloc(&driver_template, sizeof(*vhost));
+       shost = scsi_host_alloc(&driver_template, sizeof(*vhost), NULL);
        if (!shost) {
                dev_err(dev, "Couldn't allocate host data\n");
                goto out;
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
index 609bda730b3a..e8342e581246 100644
--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
@@ -2235,7 +2235,7 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const 
struct vio_device_id *id)
 
        dev_set_drvdata(&vdev->dev, NULL);
 
-       host = scsi_host_alloc(&driver_template, sizeof(*hostdata));
+       host = scsi_host_alloc(&driver_template, sizeof(*hostdata), NULL);
        if (!host) {
                dev_err(&vdev->dev, "couldn't allocate host data\n");
                goto scsi_host_alloc_failed;
diff --git a/drivers/scsi/imm.c b/drivers/scsi/imm.c
index 0535252e77e3..a6131f87fcaf 100644
--- a/drivers/scsi/imm.c
+++ b/drivers/scsi/imm.c
@@ -1221,7 +1221,7 @@ static int __imm_attach(struct parport *pb)
        INIT_DELAYED_WORK(&dev->imm_tq, imm_interrupt);
 
        err = -ENOMEM;
-       host = scsi_host_alloc(&imm_template, sizeof(imm_struct *));
+       host = scsi_host_alloc(&imm_template, sizeof(imm_struct *), NULL);
        if (!host)
                goto out1;
        host->io_port = pb->base;
diff --git a/drivers/scsi/initio.c b/drivers/scsi/initio.c
index 06fbe85dccfa..294f7f8d5dbb 100644
--- a/drivers/scsi/initio.c
+++ b/drivers/scsi/initio.c
@@ -2824,7 +2824,7 @@ static int initio_probe_one(struct pci_dev *pdev,
                error = -ENODEV;
                goto out_disable_device;
        }
-       shost = scsi_host_alloc(&initio_template, sizeof(struct initio_host));
+       shost = scsi_host_alloc(&initio_template, sizeof(struct initio_host), 
&pdev->dev);
        if (!shost) {
                printk(KERN_WARNING "initio: Could not allocate host 
structure.\n");
                error = -ENOMEM;
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index d207e5e81afe..85608804ff39 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -9379,7 +9379,7 @@ static int ipr_probe_ioa(struct pci_dev *pdev,
        ENTER;
 
        dev_info(&pdev->dev, "Found IOA with IRQ: %d\n", pdev->irq);
-       host = scsi_host_alloc(&driver_template, sizeof(*ioa_cfg));
+       host = scsi_host_alloc(&driver_template, sizeof(*ioa_cfg), &pdev->dev);
 
        if (!host) {
                dev_err(&pdev->dev, "call to scsi_host_alloc failed!\n");
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
index 41ed73966a48..709a2a799f3e 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -6638,7 +6638,7 @@ ips_register_scsi(int index)
 {
        struct Scsi_Host *sh;
        ips_ha_t *ha, *oldha = ips_ha[index];
-       sh = scsi_host_alloc(&ips_driver_template, sizeof (ips_ha_t));
+       sh = scsi_host_alloc(&ips_driver_template, sizeof(ips_ha_t), 
&oldha->pcidev->dev);
        if (!sh) {
                IPS_PRINTK(KERN_WARNING, oldha->pcidev,
                           "Unable to register controller with SCSI 
subsystem\n");
diff --git a/drivers/scsi/isci/init.c b/drivers/scsi/isci/init.c
index acf0c2038d20..7da06ace20ad 100644
--- a/drivers/scsi/isci/init.c
+++ b/drivers/scsi/isci/init.c
@@ -538,7 +538,7 @@ static struct isci_host *isci_host_alloc(struct pci_dev 
*pdev, int id)
                INIT_LIST_HEAD(&idev->node);
        }
 
-       shost = scsi_host_alloc(&isci_sht, sizeof(void *));
+       shost = scsi_host_alloc(&isci_sht, sizeof(void *), &pdev->dev);
        if (!shost)
                return NULL;
 
diff --git a/drivers/scsi/jazz_esp.c b/drivers/scsi/jazz_esp.c
index 35137f5cfb3a..1817246e4cc6 100644
--- a/drivers/scsi/jazz_esp.c
+++ b/drivers/scsi/jazz_esp.c
@@ -110,7 +110,7 @@ static int esp_jazz_probe(struct platform_device *dev)
        struct resource *res;
        int err;
 
-       host = scsi_host_alloc(tpnt, sizeof(struct esp));
+       host = scsi_host_alloc(tpnt, sizeof(struct esp), NULL);
 
        err = -ENOMEM;
        if (!host)
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index 160f02f2f51d..458955dfc0aa 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -2903,7 +2903,7 @@ struct Scsi_Host *iscsi_host_alloc(const struct 
scsi_host_template *sht,
        struct Scsi_Host *shost;
        struct iscsi_host *ihost;
 
-       shost = scsi_host_alloc(sht, sizeof(struct iscsi_host) + dd_data_size);
+       shost = scsi_host_alloc(sht, sizeof(struct iscsi_host) + dd_data_size, 
NULL);
        if (!shost)
                return NULL;
        ihost = shost_priv(shost);
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 82af59c913e9..25264866075f 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -4745,7 +4745,7 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, 
struct device *dev)
                template->sg_tablesize = lpfc_get_sg_tablesize(phba);
        }
 
-       shost = scsi_host_alloc(template, sizeof(struct lpfc_vport));
+       shost = scsi_host_alloc(template, sizeof(struct lpfc_vport), 
&phba->pcidev->dev);
        if (!shost)
                goto out;
 
diff --git a/drivers/scsi/mac53c94.c b/drivers/scsi/mac53c94.c
index de2bd860b9d7..737e5f2fef6f 100644
--- a/drivers/scsi/mac53c94.c
+++ b/drivers/scsi/mac53c94.c
@@ -426,7 +426,7 @@ static int mac53c94_probe(struct macio_dev *mdev, const 
struct of_device_id *mat
                return -EBUSY;
        }
 
-               host = scsi_host_alloc(&mac53c94_template, sizeof(struct 
fsc_state));
+       host = scsi_host_alloc(&mac53c94_template, sizeof(struct fsc_state), 
NULL);
        if (host == NULL) {
                printk(KERN_ERR "mac53c94: couldn't register host");
                rc = -ENOMEM;
diff --git a/drivers/scsi/mac_esp.c b/drivers/scsi/mac_esp.c
index a0ceaa2428c2..c8652bfdb3b8 100644
--- a/drivers/scsi/mac_esp.c
+++ b/drivers/scsi/mac_esp.c
@@ -301,7 +301,7 @@ static int esp_mac_probe(struct platform_device *dev)
        if (dev->id > 1)
                return -ENODEV;
 
-       host = scsi_host_alloc(tpnt, sizeof(struct esp));
+       host = scsi_host_alloc(tpnt, sizeof(struct esp), NULL);
 
        err = -ENOMEM;
        if (!host)
diff --git a/drivers/scsi/mac_scsi.c b/drivers/scsi/mac_scsi.c
index a86bd839d08e..eeb00ee30aaa 100644
--- a/drivers/scsi/mac_scsi.c
+++ b/drivers/scsi/mac_scsi.c
@@ -474,7 +474,7 @@ static int __init mac_scsi_probe(struct platform_device 
*pdev)
                mac_scsi_template.sg_tablesize = 1;
 
        instance = scsi_host_alloc(&mac_scsi_template,
-                                  sizeof(struct NCR5380_hostdata));
+                                  sizeof(struct NCR5380_hostdata), NULL);
        if (!instance)
                return -ENOMEM;
 
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 9476a0d2c72d..701e54843193 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -4203,7 +4203,7 @@ megaraid_probe_one(struct pci_dev *pdev, const struct 
pci_device_id *id)
        }
 
        /* Initialize SCSI Host structure */
-       host = scsi_host_alloc(&megaraid_template, sizeof(adapter_t));
+       host = scsi_host_alloc(&megaraid_template, sizeof(adapter_t), 
&pdev->dev);
        if (!host)
                goto out_iounmap;
 
diff --git a/drivers/scsi/megaraid/megaraid_mbox.c 
b/drivers/scsi/megaraid/megaraid_mbox.c
index ce89032a5a74..17b015b3d35f 100644
--- a/drivers/scsi/megaraid/megaraid_mbox.c
+++ b/drivers/scsi/megaraid/megaraid_mbox.c
@@ -620,7 +620,7 @@ megaraid_io_attach(adapter_t *adapter)
        struct Scsi_Host        *host;
 
        // Initialize SCSI Host structure
-       host = scsi_host_alloc(&megaraid_template_g, 8);
+       host = scsi_host_alloc(&megaraid_template_g, 8, &pdev->dev);
        if (!host) {
                con_log(CL_ANN, (KERN_WARNING
                        "megaraid mbox: scsi_host_alloc failed\n"));
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c 
b/drivers/scsi/megaraid/megaraid_sas_base.c
index ecd365d78ae3..bae1070371d5 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -7512,7 +7512,7 @@ static int megasas_probe_one(struct pci_dev *pdev,
        pci_set_master(pdev);
 
        host = scsi_host_alloc(&megasas_template,
-                              sizeof(struct megasas_instance));
+                              sizeof(struct megasas_instance), &pdev->dev);
 
        if (!host) {
                dev_printk(KERN_DEBUG, &pdev->dev, "scsi_host_alloc failed\n");
diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c
index dc1402b321da..a4ba6bc49d23 100644
--- a/drivers/scsi/mesh.c
+++ b/drivers/scsi/mesh.c
@@ -1877,7 +1877,7 @@ static int mesh_probe(struct macio_dev *mdev, const 
struct of_device_id *match)
                        printk(KERN_ERR "mesh: unable to request memory 
resources");
                return -EBUSY;
        }
-               mesh_host = scsi_host_alloc(&mesh_template, sizeof(struct 
mesh_state));
+       mesh_host = scsi_host_alloc(&mesh_template, sizeof(struct mesh_state), 
NULL);
        if (mesh_host == NULL) {
                printk(KERN_ERR "mesh: couldn't register host");
                goto out_release;
diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c
index 402d1f35d214..c74e2addc77d 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_os.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_os.c
@@ -5468,7 +5468,7 @@ mpi3mr_probe(struct pci_dev *pdev, const struct 
pci_device_id *id)
        }
 
        shost = scsi_host_alloc(&mpi3mr_driver_template,
-           sizeof(struct mpi3mr_ioc));
+           sizeof(struct mpi3mr_ioc), &pdev->dev);
        if (!shost) {
                retval = -ENODEV;
                goto shost_failed;
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c 
b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 6ff788557294..06c8df6261d4 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -13367,7 +13367,7 @@ _scsih_probe(struct pci_dev *pdev, const struct 
pci_device_id *id)
                        PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM);
                /* Use mpt2sas driver host template for SAS 2.0 HBA's */
                shost = scsi_host_alloc(&mpt2sas_driver_template,
-                 sizeof(struct MPT3SAS_ADAPTER));
+                 sizeof(struct MPT3SAS_ADAPTER), &pdev->dev);
                if (!shost)
                        return -ENODEV;
                ioc = shost_priv(shost);
@@ -13399,7 +13399,7 @@ _scsih_probe(struct pci_dev *pdev, const struct 
pci_device_id *id)
        case MPI26_VERSION:
                /* Use mpt3sas driver host template for SAS 3.0 HBA's */
                shost = scsi_host_alloc(&mpt3sas_driver_template,
-                 sizeof(struct MPT3SAS_ADAPTER));
+                 sizeof(struct MPT3SAS_ADAPTER), &pdev->dev);
                if (!shost)
                        return -ENODEV;
                ioc = shost_priv(shost);
diff --git a/drivers/scsi/mvme147.c b/drivers/scsi/mvme147.c
index 98b99c0f5bc7..4d61e25de2cf 100644
--- a/drivers/scsi/mvme147.c
+++ b/drivers/scsi/mvme147.c
@@ -97,7 +97,7 @@ static int __init mvme147_init(void)
                return 0;
 
        mvme147_shost = scsi_host_alloc(&mvme147_host_template,
-                       sizeof(struct WD33C93_hostdata));
+                       sizeof(struct WD33C93_hostdata), NULL);
        if (!mvme147_shost)
                goto err_out;
        mvme147_shost->base = 0xfffe4000;
diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c
index 5abc17a2e261..fd90b5eec0b4 100644
--- a/drivers/scsi/mvsas/mv_init.c
+++ b/drivers/scsi/mvsas/mv_init.c
@@ -494,7 +494,7 @@ static int mvs_pci_init(struct pci_dev *pdev, const struct 
pci_device_id *ent)
        if (rc)
                goto err_out_regions;
 
-       shost = scsi_host_alloc(&mvs_sht, sizeof(void *));
+       shost = scsi_host_alloc(&mvs_sht, sizeof(void *), &pdev->dev);
        if (!shost) {
                rc = -ENOMEM;
                goto err_out_regions;
diff --git a/drivers/scsi/mvumi.c b/drivers/scsi/mvumi.c
index e70d336b4ab3..d12b33a32a09 100644
--- a/drivers/scsi/mvumi.c
+++ b/drivers/scsi/mvumi.c
@@ -2468,7 +2468,7 @@ static int mvumi_probe_one(struct pci_dev *pdev, const 
struct pci_device_id *id)
        if (ret)
                goto fail_set_dma_mask;
 
-       host = scsi_host_alloc(&mvumi_template, sizeof(*mhba));
+       host = scsi_host_alloc(&mvumi_template, sizeof(*mhba), &pdev->dev);
        if (!host) {
                dev_err(&pdev->dev, "scsi_host_alloc failed\n");
                ret = -ENOMEM;
diff --git a/drivers/scsi/myrb.c b/drivers/scsi/myrb.c
index 3678b66310ed..f28c29b41cf6 100644
--- a/drivers/scsi/myrb.c
+++ b/drivers/scsi/myrb.c
@@ -3401,7 +3401,7 @@ static struct myrb_hba *myrb_detect(struct pci_dev *pdev,
        struct Scsi_Host *shost;
        struct myrb_hba *cb = NULL;
 
-       shost = scsi_host_alloc(&myrb_template, sizeof(struct myrb_hba));
+       shost = scsi_host_alloc(&myrb_template, sizeof(struct myrb_hba), 
&pdev->dev);
        if (!shost) {
                dev_err(&pdev->dev, "Unable to allocate Controller\n");
                return NULL;
diff --git a/drivers/scsi/myrs.c b/drivers/scsi/myrs.c
index afd68225221a..a8ce488e6520 100644
--- a/drivers/scsi/myrs.c
+++ b/drivers/scsi/myrs.c
@@ -1937,7 +1937,7 @@ static struct myrs_hba *myrs_alloc_host(struct pci_dev 
*pdev,
        struct Scsi_Host *shost;
        struct myrs_hba *cs;
 
-       shost = scsi_host_alloc(&myrs_template, sizeof(struct myrs_hba));
+       shost = scsi_host_alloc(&myrs_template, sizeof(struct myrs_hba), 
&pdev->dev);
        if (!shost)
                return NULL;
 
diff --git a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c
index 5369ca3fe4fd..009d4c55054e 100644
--- a/drivers/scsi/ncr53c8xx.c
+++ b/drivers/scsi/ncr53c8xx.c
@@ -8108,7 +8108,7 @@ struct Scsi_Host * __init ncr_attach(struct 
scsi_host_template *tpnt,
        printk(KERN_INFO "ncr53c720-%d: rev 0x%x irq %d\n",
                unit, device->chip.revision_id, device->slot.irq);
 
-       instance = scsi_host_alloc(tpnt, sizeof(*host_data));
+       instance = scsi_host_alloc(tpnt, sizeof(*host_data), NULL);
        if (!instance)
                goto attach_error;
        host_data = (struct host_data *) instance->hostdata;
diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
index e893d5677241..681e1d554657 100644
--- a/drivers/scsi/nsp32.c
+++ b/drivers/scsi/nsp32.c
@@ -2556,7 +2556,7 @@ static int nsp32_detect(struct pci_dev *pdev)
        /*
         * register this HBA as SCSI device
         */
-       host = scsi_host_alloc(&nsp32_template, sizeof(nsp32_hw_data));
+       host = scsi_host_alloc(&nsp32_template, sizeof(nsp32_hw_data), 
&pdev->dev);
        if (host == NULL) {
                nsp32_msg (KERN_ERR, "failed to scsi register");
                goto err;
diff --git a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c
index ae70fda96ae9..32ca7872b7f8 100644
--- a/drivers/scsi/pcmcia/nsp_cs.c
+++ b/drivers/scsi/pcmcia/nsp_cs.c
@@ -1326,7 +1326,7 @@ static struct Scsi_Host *nsp_detect(struct 
scsi_host_template *sht)
        nsp_hw_data *data_b = &nsp_data_base, *data;
 
        nsp_dbg(NSP_DEBUG_INIT, "this_id=%d", sht->this_id);
-       host = scsi_host_alloc(&nsp_driver_template, sizeof(nsp_hw_data));
+       host = scsi_host_alloc(&nsp_driver_template, sizeof(nsp_hw_data), NULL);
        if (host == NULL) {
                nsp_dbg(NSP_DEBUG_INIT, "host failed");
                return NULL;
diff --git a/drivers/scsi/pcmcia/qlogic_stub.c 
b/drivers/scsi/pcmcia/qlogic_stub.c
index 5d8a434d3f66..b417b39ab723 100644
--- a/drivers/scsi/pcmcia/qlogic_stub.c
+++ b/drivers/scsi/pcmcia/qlogic_stub.c
@@ -106,7 +106,7 @@ static struct Scsi_Host *qlogic_detect(struct 
scsi_host_template *host,
        qlogicfas408_setup(qbase, qinitid, INT_TYPE);
 
        host->name = qlogic_name;
-       shost = scsi_host_alloc(host, sizeof(struct qlogicfas408_priv));
+       shost = scsi_host_alloc(host, sizeof(struct qlogicfas408_priv), NULL);
        if (!shost)
                goto err;
        shost->io_port = qbase;
diff --git a/drivers/scsi/pcmcia/sym53c500_cs.c 
b/drivers/scsi/pcmcia/sym53c500_cs.c
index 1530c1ad5d36..83aab6c69a62 100644
--- a/drivers/scsi/pcmcia/sym53c500_cs.c
+++ b/drivers/scsi/pcmcia/sym53c500_cs.c
@@ -752,7 +752,7 @@ SYM53C500_config(struct pcmcia_device *link)
 
        chip_init(port_base);
 
-       host = scsi_host_alloc(tpnt, sizeof(struct sym53c500_data));
+       host = scsi_host_alloc(tpnt, sizeof(struct sym53c500_data), NULL);
        if (!host) {
                printk("SYM53C500: Unable to register host, giving up.\n");
                goto err_release;
diff --git a/drivers/scsi/pm8001/pm8001_init.c 
b/drivers/scsi/pm8001/pm8001_init.c
index e93ea76b565e..873810c6853c 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -1142,7 +1142,7 @@ static int pm8001_pci_probe(struct pci_dev *pdev,
        if (rc)
                goto err_out_regions;
 
-       shost = scsi_host_alloc(&pm8001_sht, sizeof(void *));
+       shost = scsi_host_alloc(&pm8001_sht, sizeof(void *), &pdev->dev);
        if (!shost) {
                rc = -ENOMEM;
                goto err_out_regions;
diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
index 942a99393204..a26c747806ef 100644
--- a/drivers/scsi/pmcraid.c
+++ b/drivers/scsi/pmcraid.c
@@ -5236,7 +5236,7 @@ static int pmcraid_probe(struct pci_dev *pdev,
        }
 
        host = scsi_host_alloc(&pmcraid_host_template,
-                               sizeof(struct pmcraid_instance));
+                               sizeof(struct pmcraid_instance), &pdev->dev);
 
        if (!host) {
                dev_err(&pdev->dev, "scsi_host_alloc failed!\n");
diff --git a/drivers/scsi/ppa.c b/drivers/scsi/ppa.c
index 8a4e910d5758..40fe9c6acc3b 100644
--- a/drivers/scsi/ppa.c
+++ b/drivers/scsi/ppa.c
@@ -1101,7 +1101,7 @@ static int __ppa_attach(struct parport *pb)
        INIT_DELAYED_WORK(&dev->ppa_tq, ppa_interrupt);
 
        err = -ENOMEM;
-       host = scsi_host_alloc(&ppa_template, sizeof(ppa_struct *));
+       host = scsi_host_alloc(&ppa_template, sizeof(ppa_struct *), NULL);
        if (!host)
                goto out1;
        host->io_port = pb->base;
diff --git a/drivers/scsi/ps3rom.c b/drivers/scsi/ps3rom.c
index a9c727d22931..3542a35b137e 100644
--- a/drivers/scsi/ps3rom.c
+++ b/drivers/scsi/ps3rom.c
@@ -361,7 +361,7 @@ static int ps3rom_probe(struct ps3_system_bus_device *_dev)
                goto fail_free_bounce;
 
        host = scsi_host_alloc(&ps3rom_host_template,
-                              sizeof(struct ps3rom_private));
+                              sizeof(struct ps3rom_private), NULL);
        if (!host) {
                dev_err(&dev->sbd.core, "%s:%u: scsi_host_alloc failed\n",
                        __func__, __LINE__);
diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
index cdd6fe002c32..f88f2e659baa 100644
--- a/drivers/scsi/qla1280.c
+++ b/drivers/scsi/qla1280.c
@@ -4142,7 +4142,7 @@ qla1280_probe_one(struct pci_dev *pdev, const struct 
pci_device_id *id)
        pci_set_master(pdev);
 
        error = -ENOMEM;
-       host = scsi_host_alloc(&qla1280_driver_template, sizeof(*ha));
+       host = scsi_host_alloc(&qla1280_driver_template, sizeof(*ha), 
&pdev->dev);
        if (!host) {
                printk(KERN_WARNING
                       "qla1280: Failed to register host, aborting.\n");
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
index c563133f751e..4bafc367e21d 100644
--- a/drivers/scsi/qla2xxx/qla_mid.c
+++ b/drivers/scsi/qla2xxx/qla_mid.c
@@ -502,7 +502,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport)
        vha = qla2x00_create_host(sht, ha);
        if (!vha) {
                ql_log(ql_log_warn, vha, 0xa005,
-                   "scsi_host_alloc() failed for vport.\n");
+                   "scsi_host_alloc() failed for vport.\n", NULL);
                return(NULL);
        }
 
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 72b1c28e4dae..ce0d097f3317 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -5046,7 +5046,7 @@ struct scsi_qla_host *qla2x00_create_host(const struct 
scsi_host_template *sht,
        struct Scsi_Host *host;
        struct scsi_qla_host *vha = NULL;
 
-       host = scsi_host_alloc(sht, sizeof(scsi_qla_host_t));
+       host = scsi_host_alloc(sht, sizeof(scsi_qla_host_t), &ha->pdev->dev);
        if (!host) {
                ql_log_pci(ql_log_fatal, ha->pdev, 0x0107,
                    "Failed to allocate host from the scsi layer, aborting.\n");
diff --git a/drivers/scsi/qlogicfas.c b/drivers/scsi/qlogicfas.c
index 8f05e3707d69..b9ead7dc371c 100644
--- a/drivers/scsi/qlogicfas.c
+++ b/drivers/scsi/qlogicfas.c
@@ -95,7 +95,7 @@ static struct Scsi_Host *__qlogicfas_detect(struct 
scsi_host_template *host,
 
        qlogicfas408_setup(qbase, qinitid, INT_TYPE);
 
-       hreg = scsi_host_alloc(host, sizeof(struct qlogicfas408_priv));
+       hreg = scsi_host_alloc(host, sizeof(struct qlogicfas408_priv), NULL);
        if (!hreg)
                goto err_release_mem;
        priv = get_priv_by_host(hreg);
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
index ea0a2b5a0a42..f67a9b400100 100644
--- a/drivers/scsi/qlogicpti.c
+++ b/drivers/scsi/qlogicpti.c
@@ -1316,7 +1316,7 @@ static int qpti_sbus_probe(struct platform_device *op)
        if (op->archdata.irqs[0] == 0)
                return -ENODEV;
 
-       host = scsi_host_alloc(&qpti_template, sizeof(struct qlogicpti));
+       host = scsi_host_alloc(&qpti_template, sizeof(struct qlogicpti), NULL);
        if (!host)
                return -ENOMEM;
 
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index bb6b0e7fb910..59488bf74ce0 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -9548,7 +9548,7 @@ static int sdebug_driver_probe(struct device *dev)
 
        sdbg_host = dev_to_sdebug_host(dev);
 
-       hpnt = scsi_host_alloc(&sdebug_driver_template, 0);
+       hpnt = scsi_host_alloc(&sdebug_driver_template, 0, NULL);
        if (NULL == hpnt) {
                pr_err("scsi_host_alloc failed\n");
                error = -ENODEV;
diff --git a/drivers/scsi/sgiwd93.c b/drivers/scsi/sgiwd93.c
index 6594661db5f4..07fbe6fda7c2 100644
--- a/drivers/scsi/sgiwd93.c
+++ b/drivers/scsi/sgiwd93.c
@@ -231,7 +231,7 @@ static int sgiwd93_probe(struct platform_device *pdev)
        unsigned int irq = pd->irq;
        int err;
 
-       host = scsi_host_alloc(&sgiwd93_template, sizeof(struct ip22_hostdata));
+       host = scsi_host_alloc(&sgiwd93_template, sizeof(struct ip22_hostdata), 
NULL);
        if (!host) {
                err = -ENOMEM;
                goto out;
diff --git a/drivers/scsi/smartpqi/smartpqi_init.c 
b/drivers/scsi/smartpqi/smartpqi_init.c
index 65ff50982978..a3163c06b3f8 100644
--- a/drivers/scsi/smartpqi/smartpqi_init.c
+++ b/drivers/scsi/smartpqi/smartpqi_init.c
@@ -7619,7 +7619,7 @@ static int pqi_register_scsi(struct pqi_ctrl_info 
*ctrl_info)
        int rc;
        struct Scsi_Host *shost;
 
-       shost = scsi_host_alloc(&pqi_driver_template, sizeof(ctrl_info));
+       shost = scsi_host_alloc(&pqi_driver_template, sizeof(ctrl_info), 
&ctrl_info->pci_dev->dev);
        if (!shost) {
                dev_err(&ctrl_info->pci_dev->dev, "scsi_host_alloc failed\n");
                return -ENOMEM;
diff --git a/drivers/scsi/snic/snic_main.c b/drivers/scsi/snic/snic_main.c
index 82953e6a0915..9edf6661e6f1 100644
--- a/drivers/scsi/snic/snic_main.c
+++ b/drivers/scsi/snic/snic_main.c
@@ -363,7 +363,7 @@ snic_probe(struct pci_dev *pdev, const struct pci_device_id 
*ent)
        /*
         * Allocate SCSI Host and setup association between host, and snic
         */
-       shost = scsi_host_alloc(&snic_host_template, sizeof(struct snic));
+       shost = scsi_host_alloc(&snic_host_template, sizeof(struct snic), 
&pdev->dev);
        if (!shost) {
                SNIC_ERR("Unable to alloc scsi_host\n");
                ret = -ENOMEM;
diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
index 6aeeb338633d..7d6b851fef24 100644
--- a/drivers/scsi/stex.c
+++ b/drivers/scsi/stex.c
@@ -1667,7 +1667,7 @@ static int stex_probe(struct pci_dev *pdev, const struct 
pci_device_id *id)
        S6flag = 0;
        register_reboot_notifier(&stex_notifier);
 
-       host = scsi_host_alloc(&driver_template, sizeof(struct st_hba));
+       host = scsi_host_alloc(&driver_template, sizeof(struct st_hba), 
&pdev->dev);
 
        if (!host) {
                printk(KERN_ERR DRV_NAME "(%s): scsi_host_alloc failed\n",
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 571ea549152b..fc4c05127dc4 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1969,7 +1969,7 @@ static int storvsc_probe(struct hv_device *device,
                                (100 - ring_avail_percent_lowater) / 100;
 
        host = scsi_host_alloc(&scsi_driver,
-                              sizeof(struct hv_host_device));
+                              sizeof(struct hv_host_device), NULL);
        if (!host)
                return -ENOMEM;
 
diff --git a/drivers/scsi/sun3_scsi.c b/drivers/scsi/sun3_scsi.c
index ca9cd691cc32..ed41b605328e 100644
--- a/drivers/scsi/sun3_scsi.c
+++ b/drivers/scsi/sun3_scsi.c
@@ -578,7 +578,7 @@ static int __init sun3_scsi_probe(struct platform_device 
*pdev)
 #endif
 
        instance = scsi_host_alloc(&sun3_scsi_template,
-                                  sizeof(struct NCR5380_hostdata));
+                                  sizeof(struct NCR5380_hostdata), NULL);
        if (!instance) {
                error = -ENOMEM;
                goto fail_alloc;
diff --git a/drivers/scsi/sun3x_esp.c b/drivers/scsi/sun3x_esp.c
index 365406885b8e..f7e48f4c5444 100644
--- a/drivers/scsi/sun3x_esp.c
+++ b/drivers/scsi/sun3x_esp.c
@@ -175,7 +175,7 @@ static int esp_sun3x_probe(struct platform_device *dev)
        struct resource *res;
        int err = -ENOMEM;
 
-       host = scsi_host_alloc(tpnt, sizeof(struct esp));
+       host = scsi_host_alloc(tpnt, sizeof(struct esp), NULL);
        if (!host)
                goto fail;
 
diff --git a/drivers/scsi/sun_esp.c b/drivers/scsi/sun_esp.c
index aa430501f0c7..bc4e4030acb6 100644
--- a/drivers/scsi/sun_esp.c
+++ b/drivers/scsi/sun_esp.c
@@ -457,7 +457,7 @@ static int esp_sbus_probe_one(struct platform_device *op,
        struct esp *esp;
        int err;
 
-       host = scsi_host_alloc(tpnt, sizeof(struct esp));
+       host = scsi_host_alloc(tpnt, sizeof(struct esp), NULL);
 
        err = -ENOMEM;
        if (!host)
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c 
b/drivers/scsi/sym53c8xx_2/sym_glue.c
index 27e22acaf1a7..16e821c3b59e 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.c
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.c
@@ -1300,7 +1300,7 @@ static struct Scsi_Host *sym_attach(const struct 
scsi_host_template *tpnt, int u
        if (!fw)
                goto attach_failed;
 
-       shost = scsi_host_alloc(tpnt, sizeof(*sym_data));
+       shost = scsi_host_alloc(tpnt, sizeof(*sym_data), &pdev->dev);
        if (!shost)
                goto attach_failed;
        sym_data = shost_priv(shost);
diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
index 5fdaa71f0652..88375574cb18 100644
--- a/drivers/scsi/virtio_scsi.c
+++ b/drivers/scsi/virtio_scsi.c
@@ -929,7 +929,7 @@ static int virtscsi_probe(struct virtio_device *vdev)
        num_targets = virtscsi_config_get(vdev, max_target) + 1;
 
        shost = scsi_host_alloc(&virtscsi_host_template,
-                               struct_size(vscsi, req_vqs, num_queues));
+                               struct_size(vscsi, req_vqs, num_queues), NULL);
        if (!shost)
                return -ENOMEM;
 
diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c
index 151cac9f9c2a..32c39c66c49b 100644
--- a/drivers/scsi/vmw_pvscsi.c
+++ b/drivers/scsi/vmw_pvscsi.c
@@ -1435,7 +1435,7 @@ static int pvscsi_probe(struct pci_dev *pdev, const 
struct pci_device_id *id)
                PVSCSI_MAX_NUM_REQ_ENTRIES_PER_PAGE;
        pvscsi_template.cmd_per_lun =
                min(pvscsi_template.can_queue, pvscsi_cmd_per_lun);
-       host = scsi_host_alloc(&pvscsi_template, sizeof(struct pvscsi_adapter));
+       host = scsi_host_alloc(&pvscsi_template, sizeof(struct pvscsi_adapter), 
&pdev->dev);
        if (!host) {
                printk(KERN_ERR "vmw_pvscsi: failed to allocate host\n");
                goto out_release_resources_and_disable;
diff --git a/drivers/scsi/wd719x.c b/drivers/scsi/wd719x.c
index 830d40f57f6a..0aa6bb093431 100644
--- a/drivers/scsi/wd719x.c
+++ b/drivers/scsi/wd719x.c
@@ -921,7 +921,7 @@ static int wd719x_pci_probe(struct pci_dev *pdev, const 
struct pci_device_id *d)
                goto release_region;
 
        err = -ENOMEM;
-       sh = scsi_host_alloc(&wd719x_template, sizeof(struct wd719x));
+       sh = scsi_host_alloc(&wd719x_template, sizeof(struct wd719x), 
&pdev->dev);
        if (!sh)
                goto release_region;
 
diff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c
index 989bcaee42ca..d4d57f33cc15 100644
--- a/drivers/scsi/xen-scsifront.c
+++ b/drivers/scsi/xen-scsifront.c
@@ -899,7 +899,7 @@ static int scsifront_probe(struct xenbus_device *dev,
        int err = -ENOMEM;
        char name[TASK_COMM_LEN];
 
-       host = scsi_host_alloc(&scsifront_sht, sizeof(*info));
+       host = scsi_host_alloc(&scsifront_sht, sizeof(*info), NULL);
        if (!host) {
                xenbus_dev_fatal(dev, err, "fail to allocate scsi host");
                return err;
diff --git a/drivers/scsi/zorro_esp.c b/drivers/scsi/zorro_esp.c
index 1622285c9aec..5983015877a7 100644
--- a/drivers/scsi/zorro_esp.c
+++ b/drivers/scsi/zorro_esp.c
@@ -774,7 +774,7 @@ static int zorro_esp_probe(struct zorro_dev *z,
                goto fail_free_zep;
        }
 
-       host = scsi_host_alloc(tpnt, sizeof(struct esp));
+       host = scsi_host_alloc(tpnt, sizeof(struct esp), NULL);
 
        if (!host) {
                pr_err("No host detected; board configuration problem?\n");
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h
index be0ffe1e3395..17e545fa5c7e 100644
--- a/include/scsi/libfc.h
+++ b/include/scsi/libfc.h
@@ -883,7 +883,7 @@ libfc_host_alloc(const struct scsi_host_template *sht, int 
priv_size)
        struct fc_lport *lport;
        struct Scsi_Host *shost;
 
-       shost = scsi_host_alloc(sht, sizeof(*lport) + priv_size);
+       shost = scsi_host_alloc(sht, sizeof(*lport) + priv_size, NULL);
        if (!shost)
                return NULL;
        lport = shost_priv(shost);
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index 7e2011830ba4..09c82a41b7a1 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -796,7 +796,8 @@ static inline int scsi_host_in_recovery(struct Scsi_Host 
*shost)
 extern int scsi_queue_work(struct Scsi_Host *, struct work_struct *);
 extern void scsi_flush_work(struct Scsi_Host *);
 
-extern struct Scsi_Host *scsi_host_alloc(const struct scsi_host_template *, 
int);
+extern struct Scsi_Host *scsi_host_alloc(const struct scsi_host_template *sht,
+                                        int privsize, struct device *dev);
 extern int __must_check scsi_add_host_with_dma(struct Scsi_Host *,
                                               struct device *,
                                               struct device *);
-- 
2.43.7


Reply via email to