RE: [PATCH] hpsa: use bus '3' for legacy HBA devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Hannes Reinecke [mailto:hare@xxxxxxx]
> Sent: Thursday, November 17, 2016 5:16 AM
> To: Don Brace
> Cc: Martin K. Petersen; Christoph Hellwig; James Bottomley; Johannes
> Thumshirn; Jack Suter; linux-scsi@xxxxxxxxxxxxxxx; Hannes Reinecke; Hannes
> Reinecke
> Subject: [PATCH] hpsa: use bus '3' for legacy HBA devices
> 
> EXTERNAL EMAIL
> 
> 
> Older controllers use SCSI target id '0' for the first internal
> disk. As the controllers are now placed on the same bus than the
> internal disks this leads to a clash with the SCSI target id of
> controller.
> This patch checks the SCSI revision, and moves older controller
> to bus '3' to be compatible with older releases and avoid this
> problem.
> 
> Fixes: 09371d623c9 ("hpsa: Change SAS transport devices to bus 0.")
> Signed-off-by: Hannes Reinecke <hare@xxxxxxxx>

Acked-by: Don Brace <don.brace@xxxxxxxxxxxxx>


> ---
>  drivers/scsi/hpsa.c | 14 ++++++++++----
>  drivers/scsi/hpsa.h |  2 ++
>  2 files changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
> index ef4e81a..d0a22aa 100644
> --- a/drivers/scsi/hpsa.c
> +++ b/drivers/scsi/hpsa.c
> @@ -2034,7 +2034,8 @@ static int hpsa_slave_alloc(struct scsi_device *sdev)
>                         sd->target = sdev_id(sdev);
>                         sd->lun = sdev->lun;
>                 }
> -       } else
> +       }
> +       if (!sd)
>                 sd = lookup_hpsa_scsi_dev(h, sdev_channel(sdev),
>                                         sdev_id(sdev), sdev->lun);
> 
> @@ -3850,6 +3851,7 @@ static int hpsa_update_device_info(struct ctlr_info
> *h,
>                 sizeof(this_device->vendor));
>         memcpy(this_device->model, &inq_buff[16],
>                 sizeof(this_device->model));
> +       this_device->rev = inq_buff[2];
>         memset(this_device->device_id, 0,
>                 sizeof(this_device->device_id));
>         if (hpsa_get_device_id(h, scsi3addr, this_device->device_id, 8,
> @@ -3939,10 +3941,14 @@ static void figure_bus_target_lun(struct ctlr_info
> *h,
> 
>         if (!is_logical_dev_addr_mode(lunaddrbytes)) {
>                 /* physical device, target and lun filled in later */
> -               if (is_hba_lunid(lunaddrbytes))
> +               if (is_hba_lunid(lunaddrbytes)) {
> +                       int bus = HPSA_HBA_BUS;
> +
> +                       if (!device->rev)
> +                               bus = HPSA_LEGACY_HBA_BUS;
>                         hpsa_set_bus_target_lun(device,
> -                                       HPSA_HBA_BUS, 0, lunid & 0x3fff);
> -               else
> +                                       bus, 0, lunid & 0x3fff);
> +               } else
>                         /* defer target, lun assignment for physical devices */
>                         hpsa_set_bus_target_lun(device,
>                                         HPSA_PHYSICAL_DEVICE_BUS, -1, -1);
> diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h
> index 3faf6cf..64e9829 100644
> --- a/drivers/scsi/hpsa.h
> +++ b/drivers/scsi/hpsa.h
> @@ -69,6 +69,7 @@ struct hpsa_scsi_dev_t {
>         u64 sas_address;
>         unsigned char vendor[8];        /* bytes 8-15 of inquiry data */
>         unsigned char model[16];        /* bytes 16-31 of inquiry data */
> +       unsigned char rev;              /* byte 2 of inquiry data */
>         unsigned char raid_level;       /* from inquiry page 0xC1 */
>         unsigned char volume_offline;   /* discovered via TUR or VPD */
>         u16 queue_depth;                /* max queue_depth for this device */
> @@ -400,6 +401,7 @@ struct offline_device_entry {
>  #define HPSA_RAID_VOLUME_BUS           1
>  #define HPSA_EXTERNAL_RAID_VOLUME_BUS  2
>  #define HPSA_HBA_BUS                   0
> +#define HPSA_LEGACY_HBA_BUS            3
> 
>  /*
>         Send the command to the hardware
> --
> 1.8.5.6

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux