aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx/qla_attr.c
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2007-10-19 18:59:15 -0400
committerJames Bottomley <jejb@mulgrave.localdomain>2007-10-23 15:53:55 -0400
commit2c96d8d0c17978bbf5eb82314d488f46d4a51280 (patch)
tree7506cb5fb1f90adae103fd223574411d68f2a4fe /drivers/scsi/qla2xxx/qla_attr.c
parenta3a63d55a4eec418d845a91222ac53443f62717b (diff)
[SCSI] qla2xxx: Handle unaligned sector writes during NVRAM/VPD updates.
Since both NVRAM and VPD regions of the flash reside on unaligned sector boundaries, during update, the driver must perform a read-modify-write operation to the composite NVRAM/VPD region. This affects ISP25xx type boards only. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_attr.c')
-rw-r--r--drivers/scsi/qla2xxx/qla_attr.c6
1 files changed, 0 insertions, 6 deletions
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index 05fa7796a559..2f0bd5abb9ac 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -114,7 +114,6 @@ qla2x00_sysfs_write_nvram(struct kobject *kobj,
114{ 114{
115 struct scsi_qla_host *ha = shost_priv(dev_to_shost(container_of(kobj, 115 struct scsi_qla_host *ha = shost_priv(dev_to_shost(container_of(kobj,
116 struct device, kobj))); 116 struct device, kobj)));
117 unsigned long flags;
118 uint16_t cnt; 117 uint16_t cnt;
119 118
120 if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->nvram_size) 119 if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->nvram_size)
@@ -144,11 +143,9 @@ qla2x00_sysfs_write_nvram(struct kobject *kobj,
144 } 143 }
145 144
146 /* Write NVRAM. */ 145 /* Write NVRAM. */
147 spin_lock_irqsave(&ha->hardware_lock, flags);
148 ha->isp_ops->write_nvram(ha, (uint8_t *)buf, ha->nvram_base, count); 146 ha->isp_ops->write_nvram(ha, (uint8_t *)buf, ha->nvram_base, count);
149 ha->isp_ops->read_nvram(ha, (uint8_t *)ha->nvram, ha->nvram_base, 147 ha->isp_ops->read_nvram(ha, (uint8_t *)ha->nvram, ha->nvram_base,
150 count); 148 count);
151 spin_unlock_irqrestore(&ha->hardware_lock, flags);
152 149
153 set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); 150 set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
154 151
@@ -397,16 +394,13 @@ qla2x00_sysfs_write_vpd(struct kobject *kobj,
397{ 394{
398 struct scsi_qla_host *ha = shost_priv(dev_to_shost(container_of(kobj, 395 struct scsi_qla_host *ha = shost_priv(dev_to_shost(container_of(kobj,
399 struct device, kobj))); 396 struct device, kobj)));
400 unsigned long flags;
401 397
402 if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->vpd_size) 398 if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->vpd_size)
403 return 0; 399 return 0;
404 400
405 /* Write NVRAM. */ 401 /* Write NVRAM. */
406 spin_lock_irqsave(&ha->hardware_lock, flags);
407 ha->isp_ops->write_nvram(ha, (uint8_t *)buf, ha->vpd_base, count); 402 ha->isp_ops->write_nvram(ha, (uint8_t *)buf, ha->vpd_base, count);
408 ha->isp_ops->read_nvram(ha, (uint8_t *)ha->vpd, ha->vpd_base, count); 403 ha->isp_ops->read_nvram(ha, (uint8_t *)ha->vpd, ha->vpd_base, count);
409 spin_unlock_irqrestore(&ha->hardware_lock, flags);
410 404
411 return count; 405 return count;
412} 406}