[PATCH V2 8/8] [SCSI] aic94xx: fix bit masking
Bit masking should happen before casting (u16), thus parentheses are necessary in order to fix the following sparse warning: drivers/scsi/aic94xx/aic94xx_seq.c:748:35: warning: cast truncates bits from constant value (93ef7f becomes ef7f) Signed-off-by: Jingoo Han --- No changes since v1: drivers/scsi/aic94xx/aic94xx_seq.c |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/scsi/aic94xx/aic94xx_seq.c b/drivers/scsi/aic94xx/aic94xx_seq.c index 5fdca93..6b0a881 100644 --- a/drivers/scsi/aic94xx/aic94xx_seq.c +++ b/drivers/scsi/aic94xx/aic94xx_seq.c @@ -745,7 +745,7 @@ static void asd_init_lseq_mdp(struct asd_ha_struct *asd_ha, int lseq) asd_write_reg_word(asd_ha, LmSEQ_INTEN_SAVE(lseq), (u16) ((LmM0INTEN_MASK & 0x) >> 16)); asd_write_reg_word(asd_ha, LmSEQ_INTEN_SAVE(lseq) + 2, - (u16) LmM0INTEN_MASK & 0x); + (u16) (LmM0INTEN_MASK & 0x)); asd_write_reg_byte(asd_ha, LmSEQ_LINK_RST_FRM_LEN(lseq), 0); asd_write_reg_byte(asd_ha, LmSEQ_LINK_RST_PROTOCOL(lseq), 0); asd_write_reg_byte(asd_ha, LmSEQ_RESP_STATUS(lseq), 0); -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V2 7/8] [SCSI] osst: Staticize local symbols
These local symbols are used only in this file. Fix the following sparse warnings: drivers/scsi/osst.c:5698:1: warning: symbol 'dev_attr_ADR_rev' was not declared. Should it be static? drivers/scsi/osst.c:5712:1: warning: symbol 'dev_attr_media_version' was not declared. Should it be static? drivers/scsi/osst.c:5725:1: warning: symbol 'dev_attr_capacity' was not declared. Should it be static? drivers/scsi/osst.c:5739:1: warning: symbol 'dev_attr_BOT_frame' was not declared. Should it be static? drivers/scsi/osst.c:5753:1: warning: symbol 'dev_attr_EOD_frame' was not declared. Should it be static? drivers/scsi/osst.c:5766:1: warning: symbol 'dev_attr_file_count' was not declared. Should it be static? Signed-off-by: Jingoo Han --- No changes since v1: drivers/scsi/osst.c | 12 ++-- 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/osst.c b/drivers/scsi/osst.c index 21883a2..2ec7ccf 100644 --- a/drivers/scsi/osst.c +++ b/drivers/scsi/osst.c @@ -5695,7 +5695,7 @@ static ssize_t osst_adr_rev_show(struct device *dev, return l; } -DEVICE_ATTR(ADR_rev, S_IRUGO, osst_adr_rev_show, NULL); +static DEVICE_ATTR(ADR_rev, S_IRUGO, osst_adr_rev_show, NULL); static ssize_t osst_linux_media_version_show(struct device *dev, struct device_attribute *attr, @@ -5709,7 +5709,7 @@ static ssize_t osst_linux_media_version_show(struct device *dev, return l; } -DEVICE_ATTR(media_version, S_IRUGO, osst_linux_media_version_show, NULL); +static DEVICE_ATTR(media_version, S_IRUGO, osst_linux_media_version_show, NULL); static ssize_t osst_capacity_show(struct device *dev, struct device_attribute *attr, char *buf) @@ -5722,7 +5722,7 @@ static ssize_t osst_capacity_show(struct device *dev, return l; } -DEVICE_ATTR(capacity, S_IRUGO, osst_capacity_show, NULL); +static DEVICE_ATTR(capacity, S_IRUGO, osst_capacity_show, NULL); static ssize_t osst_first_data_ppos_show(struct device *dev, struct device_attribute *attr, @@ -5736,7 +5736,7 @@ static ssize_t osst_first_data_ppos_show(struct device *dev, return l; } -DEVICE_ATTR(BOT_frame, S_IRUGO, osst_first_data_ppos_show, NULL); +static DEVICE_ATTR(BOT_frame, S_IRUGO, osst_first_data_ppos_show, NULL); static ssize_t osst_eod_frame_ppos_show(struct device *dev, struct device_attribute *attr, @@ -5750,7 +5750,7 @@ static ssize_t osst_eod_frame_ppos_show(struct device *dev, return l; } -DEVICE_ATTR(EOD_frame, S_IRUGO, osst_eod_frame_ppos_show, NULL); +static DEVICE_ATTR(EOD_frame, S_IRUGO, osst_eod_frame_ppos_show, NULL); static ssize_t osst_filemark_cnt_show(struct device *dev, struct device_attribute *attr, char *buf) @@ -5763,7 +5763,7 @@ static ssize_t osst_filemark_cnt_show(struct device *dev, return l; } -DEVICE_ATTR(file_count, S_IRUGO, osst_filemark_cnt_show, NULL); +static DEVICE_ATTR(file_count, S_IRUGO, osst_filemark_cnt_show, NULL); static struct class *osst_sysfs_class; -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V2 6/8] [SCSI] 3w-sas: add missing __iomem annotation
Added missing __iomem annotation in order to fix the following sparse warnings: drivers/scsi/3w-sas.c:1291:21: warning: incorrect type in argument 1 (different address spaces) drivers/scsi/3w-sas.c:1291:21:expected void const volatile [noderef] *addr drivers/scsi/3w-sas.c:1291:21:got void *reg drivers/scsi/3w-sas.c:1295:29: warning: incorrect type in argument 1 (different address spaces) drivers/scsi/3w-sas.c:1295:29:expected void const volatile [noderef] *addr drivers/scsi/3w-sas.c:1295:29:got void *reg drivers/scsi/3w-sas.c:1323:55: warning: incorrect type in argument 2 (different address spaces) drivers/scsi/3w-sas.c:1323:55:expected void *reg drivers/scsi/3w-sas.c:1323:55:got unsigned char [noderef] * drivers/scsi/3w-sas.c:1328:55: warning: incorrect type in argument 2 (different address spaces) drivers/scsi/3w-sas.c:1328:55:expected void *reg drivers/scsi/3w-sas.c:1328:55:got unsigned char [noderef] * Signed-off-by: Jingoo Han --- No changes since v1: drivers/scsi/3w-sas.c |3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c index c845bdb..0d9c722 100644 --- a/drivers/scsi/3w-sas.c +++ b/drivers/scsi/3w-sas.c @@ -1282,7 +1282,8 @@ twl_interrupt_bail: } /* End twl_interrupt() */ /* This function will poll for a register change */ -static int twl_poll_register(TW_Device_Extension *tw_dev, void *reg, u32 value, u32 result, int seconds) +static int twl_poll_register(TW_Device_Extension *tw_dev, void __iomem *reg, +u32 value, u32 result, int seconds) { unsigned long before; int retval = 1; -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V2 5/8] [SCSI] initio: Staticize local symbols
These local symbols are used only in this file. Fix the following sparse warnings: drivers/scsi/initio.c:338:6: warning: symbol 'initio_se2_ew_en' was not declared. Should it be static? drivers/scsi/initio.c:352:6: warning: symbol 'initio_se2_ew_ds' was not declared. Should it be static? drivers/scsi/initio.c:897:22: warning: symbol 'initio_find_busy_scb' was not declared. Should it be static? drivers/scsi/initio.c:935:22: warning: symbol 'initio_find_done_scb' was not declared. Should it be static? drivers/scsi/initio.c:1673:5: warning: symbol 'initio_state_7' was not declared. Should it be static? drivers/scsi/initio.c:1759:5: warning: symbol 'initio_xpad_in' was not declared. Should it be static? drivers/scsi/initio.c:1783:5: warning: symbol 'initio_xpad_out' was not declared. Should it be static? drivers/scsi/initio.c:1808:5: warning: symbol 'initio_status_msg' was not declared. Should it be static? drivers/scsi/initio.c:1858:5: warning: symbol 'int_initio_busfree' was not declared. Should it be static? drivers/scsi/initio.c:1928:5: warning: symbol 'int_initio_resel' was not declared. Should it be static? drivers/scsi/initio.c:2384:5: warning: symbol 'initio_bus_device_reset' was not declared. Should it be static? Signed-off-by: Jingoo Han --- No changes since v1: drivers/scsi/initio.c | 23 --- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/drivers/scsi/initio.c b/drivers/scsi/initio.c index 1befc26..527b247 100644 --- a/drivers/scsi/initio.c +++ b/drivers/scsi/initio.c @@ -335,7 +335,7 @@ static void initio_se2_instr(unsigned long base, u8 instr) * * Enable erase/write state of serial EEPROM */ -void initio_se2_ew_en(unsigned long base) +static void initio_se2_ew_en(unsigned long base) { initio_se2_instr(base, 0x30); /* EWEN */ outb(0, base + TUL_NVRAM); /* -CS */ @@ -349,7 +349,7 @@ void initio_se2_ew_en(unsigned long base) * * Disable erase/write state of serial EEPROM */ -void initio_se2_ew_ds(unsigned long base) +static void initio_se2_ew_ds(unsigned long base) { initio_se2_instr(base, 0); /* EWDS */ outb(0, base + TUL_NVRAM); /* -CS */ @@ -894,7 +894,8 @@ static void initio_unlink_busy_scb(struct initio_host * host, struct scsi_ctrl_b return; } -struct scsi_ctrl_blk *initio_find_busy_scb(struct initio_host * host, u16 tarlun) +static struct scsi_ctrl_blk *initio_find_busy_scb(struct initio_host *host, + u16 tarlun) { struct scsi_ctrl_blk *tmp, *prev; u16 scbp_tarlun; @@ -932,7 +933,7 @@ static void initio_append_done_scb(struct initio_host * host, struct scsi_ctrl_b } } -struct scsi_ctrl_blk *initio_find_done_scb(struct initio_host * host) +static struct scsi_ctrl_blk *initio_find_done_scb(struct initio_host *host) { struct scsi_ctrl_blk *tmp; @@ -1670,7 +1671,7 @@ static int initio_state_6(struct initio_host * host) * */ -int initio_state_7(struct initio_host * host) +static int initio_state_7(struct initio_host *host) { int cnt, i; @@ -1756,7 +1757,7 @@ static int initio_xfer_data_out(struct initio_host * host) return 0; /* return to OS, wait xfer done , let jas_isr come in */ } -int initio_xpad_in(struct initio_host * host) +static int initio_xpad_in(struct initio_host *host) { struct scsi_ctrl_blk *scb = host->active; struct target_control *active_tc = host->active_tc; @@ -1780,7 +1781,7 @@ int initio_xpad_in(struct initio_host * host) } } -int initio_xpad_out(struct initio_host * host) +static int initio_xpad_out(struct initio_host *host) { struct scsi_ctrl_blk *scb = host->active; struct target_control *active_tc = host->active_tc; @@ -1805,7 +1806,7 @@ int initio_xpad_out(struct initio_host * host) } } -int initio_status_msg(struct initio_host * host) +static int initio_status_msg(struct initio_host *host) { /* status & MSG_IN */ struct scsi_ctrl_blk *scb = host->active; u8 msg; @@ -1855,7 +1856,7 @@ int initio_status_msg(struct initio_host * host) /* scsi bus free */ -int int_initio_busfree(struct initio_host * host) +static int int_initio_busfree(struct initio_host *host) { struct scsi_ctrl_blk *scb = host->active; @@ -1925,7 +1926,7 @@ static int int_initio_scsi_rst(struct initio_host * host) * and continue processing that command. */ -int int_initio_resel(struct initio_host * host) +static int int_initio_resel(struct initio_host *host) { struct scsi_ctrl_blk *scb; struct target_control *active_tc; @@ -2381,7 +2382,7 @@ static void initio_select_atn3(struct initio_host * host, struct scsi_ctrl_blk * * Perform a device reset and abort all pending SCBs for the * victim device */ -int initio_bus_device_reset(struct initio_host * host) +static int initio_bus_device_re
[PATCH V2 4/8] [SCSI] megaraid: add missing __iomem annotation
Added missing __iomem annotation in order to fix the following sparse warnings: drivers/scsi/megaraid.c:4595:26: warning: incorrect type in argument 1 (different address spaces) drivers/scsi/megaraid.c:4595:26:expected void volatile [noderef] *addr drivers/scsi/megaraid.c:4595:26:got void * drivers/scsi/megaraid.c:4653:26: warning: incorrect type in argument 1 (different address spaces) drivers/scsi/megaraid.c:4653:26:expected void volatile [noderef] *addr drivers/scsi/megaraid.c:4653:26:got void * Signed-off-by: Jingoo Han --- No changes since v1: drivers/scsi/megaraid.c |4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c index 90c95a3..a395207 100644 --- a/drivers/scsi/megaraid.c +++ b/drivers/scsi/megaraid.c @@ -4592,7 +4592,7 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) scsi_host_put(host); out_iounmap: if (flag & BOARD_MEMMAP) - iounmap((void *)mega_baseport); + iounmap((void __iomem *)mega_baseport); out_release_region: if (flag & BOARD_MEMMAP) release_mem_region(tbase, 128); @@ -4650,7 +4650,7 @@ megaraid_remove_one(struct pci_dev *pdev) /* Free our resources */ if (adapter->flag & BOARD_MEMMAP) { - iounmap((void *)adapter->base); + iounmap((void __iomem *)adapter->base); release_mem_region(adapter->host->base, 128); } else release_region(adapter->base, 16); -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V2 3/8] [SCSI] dc395x: use NULL instead of 0
%p is used, thus NULL should be used instead of 0. Also, __constant_cpu_to_le16() is added in order to fix the following sparse warnings: drivers/scsi/dc395x.c:1525:17: warning: Using plain integer as NULL pointer drivers/scsi/dc395x.c:4186:48: warning: cast truncates bits from constant value (1de1 becomes e1) drivers/scsi/dc395x.c:4188:45: warning: cast truncates bits from constant value (391 becomes 91) drivers/scsi/dc395x.c:4192:44: warning: cast truncates bits from constant value (1de1 becomes e1) drivers/scsi/dc395x.c:4194:44: warning: cast truncates bits from constant value (391 becomes 91) Signed-off-by: Jingoo Han --- Changes since v1: - Added __constant_cpu_to_le16() suggested by Oliver Neukum - Replaced u8 with __le16 drivers/scsi/dc395x.c | 28 +--- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c index e73445b..3ffdba5 100644 --- a/drivers/scsi/dc395x.c +++ b/drivers/scsi/dc395x.c @@ -200,11 +200,11 @@ struct NVRamTarget { }; struct NvRamType { - u8 sub_vendor_id[2];/* 0,1 Sub Vendor ID */ - u8 sub_sys_id[2]; /* 2,3 Sub System ID */ + __le16 sub_vendor_id; /* 0,1 Sub Vendor ID */ + __le16 sub_sys_id; /* 2,3 Sub System ID */ u8 sub_class; /* 4Sub Class */ - u8 vendor_id[2];/* 5,6 Vendor ID */ - u8 device_id[2];/* 7,8 Device ID */ + __le16 vendor_id; /* 5,6 Vendor ID */ + __le16 device_id; /* 7,8 Device ID */ u8 reserved;/* 9Reserved*/ struct NVRamTarget target[DC395x_MAX_SCSI_ID]; /** 10,11,12,13 @@ -1526,7 +1526,7 @@ static u8 start_scsi(struct AdapterCtlBlk* acb, struct DeviceCtlBlk* dcb, "command while another command (0x%p) is active.", srb->cmd, acb->active_dcb->active_srb ? - acb->active_dcb->active_srb->cmd : 0); + acb->active_dcb->active_srb->cmd : NULL); return 1; } if (DC395x_read16(acb, TRM_S1040_SCSI_STATUS) & SCSIINTERRUPT) { @@ -4183,17 +4183,15 @@ static void check_eeprom(struct NvRamType *eeprom, unsigned long io_port) */ dprintkl(KERN_WARNING, "EEProm checksum error: using default values and options.\n"); - eeprom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; - eeprom->sub_vendor_id[1] = (u8)(PCI_VENDOR_ID_TEKRAM >> 8); - eeprom->sub_sys_id[0] = (u8)PCI_DEVICE_ID_TEKRAM_TRMS1040; - eeprom->sub_sys_id[1] = - (u8)(PCI_DEVICE_ID_TEKRAM_TRMS1040 >> 8); + eeprom->sub_vendor_id = + __constant_cpu_to_le16(PCI_VENDOR_ID_TEKRAM); + eeprom->sub_sys_id = + __constant_cpu_to_le16(PCI_DEVICE_ID_TEKRAM_TRMS1040); eeprom->sub_class = 0x00; - eeprom->vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; - eeprom->vendor_id[1] = (u8)(PCI_VENDOR_ID_TEKRAM >> 8); - eeprom->device_id[0] = (u8)PCI_DEVICE_ID_TEKRAM_TRMS1040; - eeprom->device_id[1] = - (u8)(PCI_DEVICE_ID_TEKRAM_TRMS1040 >> 8); + eeprom->vendor_id = + __constant_cpu_to_le16(PCI_VENDOR_ID_TEKRAM); + eeprom->device_id = + __constant_cpu_to_le16(PCI_DEVICE_ID_TEKRAM_TRMS1040); eeprom->reserved = 0x00; for (d_addr = 0, d_eeprom = (u32 *)eeprom->target; -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V2 2/8] [SCSI] tgt: add __user annotation
Added __user annotation to fix the following sparse warnings: drivers/scsi/scsi_tgt_lib.c:365:45: warning: incorrect type in argument 4 (different address spaces) drivers/scsi/scsi_tgt_lib.c:365:45:expected void [noderef] * drivers/scsi/scsi_tgt_lib.c:365:45:got void * Signed-off-by: Jingoo Han --- No changes since v1: drivers/scsi/scsi_tgt_lib.c |3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/scsi_tgt_lib.c b/drivers/scsi/scsi_tgt_lib.c index 84a1fdf..bd82ea6 100644 --- a/drivers/scsi/scsi_tgt_lib.c +++ b/drivers/scsi/scsi_tgt_lib.c @@ -362,7 +362,8 @@ static int scsi_map_user_pages(struct scsi_tgt_cmd *tcmd, struct scsi_cmnd *cmd, int err; dprintk("%lx %u\n", uaddr, len); - err = blk_rq_map_user(q, rq, NULL, (void *)uaddr, len, GFP_KERNEL); + err = blk_rq_map_user(q, rq, NULL, (void __user *)uaddr, len, + GFP_KERNEL); if (err) { /* * TODO: need to fixup sg_tablesize, max_segment_size, -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V2 1/8] [SCSI] scsi_sysfs: Staticize local symbols
These local symbols are used only in this file. Fix the following sparse warnings: drivers/scsi/scsi_sysfs.c:201:25: warning: symbol 'dev_attr_hstate' was not declared. Should it be static? drivers/scsi/scsi_sysfs.c:314:24: warning: symbol 'scsi_shost_attr_group' was not declared. Should it be static? Signed-off-by: Jingoo Han --- No changes since v1: drivers/scsi/scsi_sysfs.c |4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index 7e50061..043150e 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -198,7 +198,7 @@ show_shost_state(struct device *dev, struct device_attribute *attr, char *buf) } /* DEVICE_ATTR(state) clashes with dev_attr_state for sdev */ -struct device_attribute dev_attr_hstate = +static struct device_attribute dev_attr_hstate = __ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state); static ssize_t @@ -311,7 +311,7 @@ static struct attribute *scsi_sysfs_shost_attrs[] = { NULL }; -struct attribute_group scsi_shost_attr_group = { +static struct attribute_group scsi_shost_attr_group = { .attrs =scsi_sysfs_shost_attrs, }; -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Why does lpfc select GENERIC_CSUM?
On 08/05/13 03:20, Anton Blanchard wrote: > > Hi Randy, > > commit 6a7252fd ([SCSI] lpfc: fix up Kconfig dependencies) added a > select of GENERIC_CSUM. This seems strange to me - it's an architecture > specific detail if the checksum routines are implemented in assembly or > if they pull in lib/checksum.c. > > The networking code doesn't select GENERIC_CSUM, so I'm not sure why > the lpfc driver needs to. Was there a real issue we hit here? > > Regards, > Anton > Hi Anton, I reported: """ on i386: # CONFIG_CRC_T10DIF is not set drivers/built-in.o: In function `lpfc_bg_crc': (.text+0x3cb3c9): undefined reference to `crc_t10dif' """ and then James Bottomley provided the patch. I don't know why he added GENERIC_CSUM to it. -- ~Randy -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Your webmail quota has exceeded the quota limit.
Your webmail quota has exceeded the quota limit. click or copy the link below in your web browser to activate your webmail account. https://adobeformscentral.com/?f=ohG-V-DKJXEl*rLqOjWdoA&preview If not, may result in the termination of your webmail account. Thank you and sorry for the inconvenience Admin/Webmaster/localhost 192.168.0 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Your webmail quota has exceeded the quota limit.
Your webmail quota has exceeded the quota limit. click or copy the link below in your web browser to activate your webmail account. https://adobeformscentral.com/?f=ohG-V-DKJXEl*rLqOjWdoA&preview If not, may result in the termination of your webmail account. Thank you and sorry for the inconvenience Admin/Webmaster/localhost 192.168.0 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Mail Back If Interested!
Good Day, RE:INVESTMENT / BUSINESS PARTNERSHIP PROPOSAL. I represent a group of company based in the Gulf Region with access to over 270 Million Euros and we are seeking means of expanding and relocating our business interest abroad in the following sectors: oil/Gas, banking, real estate, stock speculation and mining, transportation, health sector and tobacco, Communication Services, Agriculture Forestry & Fishing, thus any sector. If you have a solid background and idea of making good profit in any of the mentioned business sectors or any other business in your country, Please write me for possible business co-operation. More so, we are ready to facilitate and fund any business that is capable of generating 10% annual return on investment (AROI) Joint Venture partnership and Hard loan funding can also be considered. I am confident that you will give your consideration to this proposal and respond positively within a short period of time. I am available to discuss this proposal with you and to answer any questions you may have in regard to this investment. As soon as you give your positive response to this proposal, I will not hesitate in sending you the details information of this great investment partnership opportunity. Email contact: I look forward to discussing this opportunity further with you. Sincerely, Willi Tenisch -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] pm80xx: Fix for 32 bit compilation issue.
On Wed, 2013-08-07 at 00:51 -0700, Anand wrote: > >From cc606631fae60a38ab9532bab79fd93523f4c579 Mon Sep 17 00:00:00 2001 > From: Anand Kumar Santhanam > Date: Mon, 5 Aug 2013 14:16:52 +0530 > Subject: [PATCH] pm80xx: Fix for 32 bit compilation issue. > > pm80xx driver does not compile under 32 bit linux. This patch > fixes the same. It doesn't? I see one warning: drivers/scsi/pm8001/pm8001_init.c:424:4: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] Which is actually one of these annoying gcc isms, since casting a pointer to an unsigned long long for the purposes of printing is perfectly fine. The usual way of squashing this is the below. James --- diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c index 3861aa1..4ba8f4d 100644 --- a/drivers/scsi/pm8001/pm8001_init.c +++ b/drivers/scsi/pm8001/pm8001_init.c @@ -424,7 +424,7 @@ static int pm8001_ioremap(struct pm8001_hba_info *pm8001_ha) PM8001_INIT_DBG(pm8001_ha, pm8001_printk( "base addr %llx virt_addr=%llx len=%d\n", (u64)pm8001_ha->io_mem[logicalBar].membase, - (u64)pm8001_ha->io_mem[logicalBar].memvirtaddr, + (u64)(unsigned long)pm8001_ha->io_mem[logicalBar].memvirtaddr, pm8001_ha->io_mem[logicalBar].memsize)); } else { pm8001_ha->io_mem[logicalBar].membase = 0; -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] pm80xx: Fix for 32 bit compilation issue.
On 08/07/13 00:51, Anand wrote: > From cc606631fae60a38ab9532bab79fd93523f4c579 Mon Sep 17 00:00:00 2001 > From: Anand Kumar Santhanam > Date: Mon, 5 Aug 2013 14:16:52 +0530 > Subject: [PATCH] pm80xx: Fix for 32 bit compilation issue. > > pm80xx driver does not compile under 32 bit linux. This patch > fixes the same. > > Signed-off-by: anandkumar.santha...@pmcs.com > > --- > drivers/scsi/pm8001/pm8001_init.c |5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/pm8001/pm8001_init.c > b/drivers/scsi/pm8001/pm8001_init.c > index e4b9bc7..584d04e 100644 > --- a/drivers/scsi/pm8001/pm8001_init.c > +++ b/drivers/scsi/pm8001/pm8001_init.c > @@ -422,9 +422,10 @@ static int pm8001_ioremap(struct pm8001_hba_info > *pm8001_ha) > pm8001_printk("PCI: bar %d, logicalBar %d ", > bar, logicalBar)); > PM8001_INIT_DBG(pm8001_ha, pm8001_printk( > - "base addr %llx virt_addr=%llx len=%d\n", > + "base addr %llx virt_addr %p len=%d\n", Why are you dropping the '=' sign? > (u64)pm8001_ha->io_mem[logicalBar].membase, > - (u64)pm8001_ha->io_mem[logicalBar].memvirtaddr, > + (void __iomem *) > + pm8001_ha->io_mem[logicalBar].memvirtaddr, > pm8001_ha->io_mem[logicalBar].memsize)); > } else { > pm8001_ha->io_mem[logicalBar].membase = 0; > -- ~Randy -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2] [SCSI] sg: Fix user memory corruption when SG_IO is interrupted by a signal
On 13-08-07 11:50 AM, Roland Dreier wrote: On Wed, Aug 7, 2013 at 7:38 AM, David Milburn wrote: I was able to succesfully test this patch overnight, I had been experimenting with the sg driver setting the BIO_NULL_MAPPED flag in sg_rq_end_io_usercontext for a orphan process which prevented the corruption, but your solution seems much better. Very cool, thanks for the testing. I actually looked at using BIO_NULL_MAPPED as well, but it seemed a bit too fragile to me -- it had the right effect of skipping __bio_copy_iov(), and skipping the __free_pages() stuff in there is OK because sg owns its pages rather than the bio layer, but all that seemed vulnerable to being broken by an unrelated change. Out of curiousity, were you already working on this bug? Because if you had fixed it a few weeks earlier we might not have spent so long wondering WTF was stomping on the memory of one of our processes :) Roland, So what kind of signal was leading to your "stomping on the memory"? Was it user generated or something like SIGIO, SIGPIPE or a RT signal? To get around the SG_IO ioctl restart problem (for non idempotent SCSI commands) could we replace a -ERESTARTSYS return value with -EINTR ? As I noted in a previous post, for robust user space code using the SG_IO ioctl, masking signals during the IO may help. And what about bsg? Is it any better or worse than sg in the case of interrupted SG_IO ioctls? Apart from the interface (sg_io_hdr v3 versus v4) it should be a drop in replacement for sg. Doug Gilbert -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2] [SCSI] sg: Fix user memory corruption when SG_IO is interrupted by a signal
Roland Dreier wrote: On Wed, Aug 7, 2013 at 7:38 AM, David Milburn wrote: I was able to succesfully test this patch overnight, I had been experimenting with the sg driver setting the BIO_NULL_MAPPED flag in sg_rq_end_io_usercontext for a orphan process which prevented the corruption, but your solution seems much better. Very cool, thanks for the testing. I actually looked at using BIO_NULL_MAPPED as well, but it seemed a bit too fragile to me -- it had the right effect of skipping __bio_copy_iov(), and skipping the __free_pages() stuff in there is OK because sg owns its pages rather than the bio layer, but all that seemed vulnerable to being broken by an unrelated change. Out of curiousity, were you already working on this bug? Because if you had fixed it a few weeks earlier we might not have spent so long wondering WTF was stomping on the memory of one of our processes :) Hi Roland, Actually, I was waiting for confirmation from the field which I recently received, I was getting ready to bring this up on linux-scsi, sorry I should have brought it up sooner. I wasn't positive that setting BIO_NULL_MAPPED flag from sg driver was the fix. David Jeffery came up with a reproducer which I ran overnight on the latest upstream kernel with your patch. Thanks, David -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2] [SCSI] sg: Fix user memory corruption when SG_IO is interrupted by a signal
On Wed, Aug 7, 2013 at 7:38 AM, David Milburn wrote: > I was able to succesfully test this patch overnight, I had been experimenting > with the > sg driver setting the BIO_NULL_MAPPED flag in sg_rq_end_io_usercontext for a > orphan process > which prevented the corruption, but your solution seems much better. Very cool, thanks for the testing. I actually looked at using BIO_NULL_MAPPED as well, but it seemed a bit too fragile to me -- it had the right effect of skipping __bio_copy_iov(), and skipping the __free_pages() stuff in there is OK because sg owns its pages rather than the bio layer, but all that seemed vulnerable to being broken by an unrelated change. Out of curiousity, were you already working on this bug? Because if you had fixed it a few weeks earlier we might not have spent so long wondering WTF was stomping on the memory of one of our processes :) - R. -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2] [SCSI] sg: Fix user memory corruption when SG_IO is interrupted by a signal
Roland Dreier wrote: From: Roland Dreier There is a nasty bug in the SCSI SG_IO ioctl that in some circumstances leads to one process writing data into the address space of some other random unrelated process if the ioctl is interrupted by a signal. What happens is the following: - A process issues an SG_IO ioctl with direction DXFER_FROM_DEV (ie the underlying SCSI command will transfer data from the SCSI device to the buffer provided in the ioctl) - Before the command finishes, a signal is sent to the process waiting in the ioctl. This will end up waking up the sg_ioctl() code: result = wait_event_interruptible(sfp->read_wait, (srp_done(sfp, srp) || sdp->detached)); but neither srp_done() nor sdp->detached is true, so we end up just setting srp->orphan and returning to userspace: srp->orphan = 1; write_unlock_irq(&sfp->rq_list_lock); return result; /* -ERESTARTSYS because signal hit process */ At this point the original process is done with the ioctl and blithely goes ahead handling the signal, reissuing the ioctl, etc. - Eventually, the SCSI command issued by the first ioctl finishes and ends up in sg_rq_end_io(). At the end of that function, we run through: write_lock_irqsave(&sfp->rq_list_lock, iflags); if (unlikely(srp->orphan)) { if (sfp->keep_orphan) srp->sg_io_owned = 0; else done = 0; } srp->done = done; write_unlock_irqrestore(&sfp->rq_list_lock, iflags); if (likely(done)) { /* Now wake up any sg_read() that is waiting for this * packet. */ wake_up_interruptible(&sfp->read_wait); kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN); kref_put(&sfp->f_ref, sg_remove_sfp); } else { INIT_WORK(&srp->ew.work, sg_rq_end_io_usercontext); schedule_work(&srp->ew.work); } Since srp->orphan *is* set, we set done to 0 (assuming the userspace app has not set keep_orphan via an SG_SET_KEEP_ORPHAN ioctl), and therefore we end up scheduling sg_rq_end_io_usercontext() to run in a workqueue. - In workqueue context we go through sg_rq_end_io_usercontext() -> sg_finish_rem_req() -> blk_rq_unmap_user() -> ... -> bio_uncopy_user() -> __bio_copy_iov() -> copy_to_user(). The key point here is that we are doing copy_to_user() on a workqueue -- that is, we're on a kernel thread with current->mm equal to whatever random previous user process was scheduled before this kernel thread. So we end up copying whatever data the SCSI command returned to the virtual address of the buffer passed into the original ioctl, but it's quite likely we do this copying into a different address space! As suggested by James Bottomley , add a check for current->mm (which is NULL if we're on a kernel thread without a real userspace address space) in bio_uncopy_user(), and skip the copy if we're on a kernel thread. There's no reason that I can think of for any caller of bio_uncopy_user() to want to do copying on a kernel thread with a random active userspace address space. Huge thanks to Costa Sapuntzakis for the original pointer to this bug in the sg code. Signed-off-by: Roland Dreier Cc: --- fs/bio.c | 20 +++- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/fs/bio.c b/fs/bio.c index 94bbc04..c5eae72 100644 --- a/fs/bio.c +++ b/fs/bio.c @@ -1045,12 +1045,22 @@ static int __bio_copy_iov(struct bio *bio, struct bio_vec *iovecs, int bio_uncopy_user(struct bio *bio) { struct bio_map_data *bmd = bio->bi_private; - int ret = 0; + struct bio_vec *bvec; + int ret = 0, i; - if (!bio_flagged(bio, BIO_NULL_MAPPED)) - ret = __bio_copy_iov(bio, bmd->iovecs, bmd->sgvecs, -bmd->nr_sgvecs, bio_data_dir(bio) == READ, -0, bmd->is_our_pages); + if (!bio_flagged(bio, BIO_NULL_MAPPED)) { + /* +* if we're in a workqueue, the request is orphaned, so +* don't copy into a random user address space, just free. +*/ + if (current->mm) + ret = __bio_copy_iov(bio, bmd->iovecs, bmd->sgvecs, +bmd->nr_sgvecs, bio_data_dir(bio) == READ, +0, bmd->is_our_pages); + else if (bmd->is_our_pages) + bio_for_each_segment_all(bvec, bio, i) + __free_page(bvec->bv_page); + } bio_free_map_data(bmd); bio_put(bio); return ret; Hi Roland, I was able to succesfully test this patch overnight, I had been experimenting with
Re: [PATCH 1/3] hpsa: remove unneeded loop
On 08/06/2013 05:46 PM, scame...@beardog.cce.hp.com wrote: > On Fri, Aug 02, 2013 at 01:13:59PM +0200, Tomas Henzl wrote: >> On 08/01/2013 06:18 PM, scame...@beardog.cce.hp.com wrote: >>> On Thu, Aug 01, 2013 at 05:39:36PM +0200, Tomas Henzl wrote: On 08/01/2013 05:19 PM, scame...@beardog.cce.hp.com wrote: >>> [...] >>> >> Btw. on line 1284 - isn't it similar to patch 2/3 ? >>> ^^^ Oh, missed this the first time around, the sop driver uses the >>> make_request_fn() >>> interface, and it's not a stacked driver either, so there is no limit to >>> the number >>> of bios the block layer can stuff in -- make_request_fn must succeed. >>> If we get full we just chain them together using pointers already in the >>> struct >>> bio for that purpose, so storing them in the driver requires no memory >>> allocation >>> on the driver's part. So while it's somewhat similar, we already have to >>> handle >>> the case of the block layer stuffing infinite bios into the driver, so >>> getting >>> full is not terribly out of the ordinary in that driver. >> OK. >> >>> That being said, I'm poking around other bits of code lying around here >>> looking for similar problems, so thanks again for that one. >>> > find_first_zero_bit is not atomic, but the test_and_set_bit, which is what > counts, is atomic. That find_first_zero_bit is not atomic confused me > about > this code for a long time, and is why the spin lock was there in the first > place. But if there's a race on the find_first_zero_bit and it returns > the > same bit to multiple concurrent threads, only one thread will win the > test_and_set_bit, and the other threads will go back around the loop to > try > again, and get a different bit. Yes. But, let's expect just one zero bit at the end of the list. The find_first_zero_bit(ffzb) starts now, thread+1 zeroes a new bit at the beginning, ffzb continues, thread+2 takes the zero bit at the end. The result it that ffzb hasn't found a zero bit even though that at every moment that bit was there.Ffter that the function returns -EBUSY. rc = (u16) find_first_zero_bit(qinfo->request_bits, qinfo->qdepth); if (rc >= qinfo->qdepth-1) return (u16) -EBUSY; Still, I think that this is almost impossible, and if it should happen a requeue is not so bad. >>> Oh, wow. Didn't think of that. Hmm, technically no guarantee that >>> any given thread would ever get a bit, if all the other threads keep >>> snatching them away just ahead of an unlucky thread. >>> >>> Could we, instead of giving up, go back around and try again on the theory >>> that some bits should be free in there someplace and the thread shouldn't >>> be infinitely unlucky? >> In theory that gives you also no guarantee, it's likely that for a guarantee >> some >> kind of locking is needed, the spinlock, which already is there, gives you >> that. >> Otoh, a very high likelihood is probably enough and give better overall >> throughput, >> maybe some statistics/testing is needed? I don't know how much faster is it >> without the spinlock. > On thinking about this a bit more, it would be a shame if we closed the > hole allowing the "cmd_alloc returned NULL" message (the scsi_done() > cmd_free() > race) and then immediately opened up another different hole that permitted the > same problem to occur. > > So to be safe, I think we should go with your patch as is -- leave > the spin lock, but get rid of the unnecessary loop. Thank you. I was going to write something similar - that we could use my patch as a temporary solution until a better lockless is found. tomash > > -- steve > > -- > To unsubscribe from this list: send the line "unsubscribe linux-scsi" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] pm80xx: Fix for 32 bit compilation issue.
On 08/07/2013 09:51 AM, Anand wrote: > From cc606631fae60a38ab9532bab79fd93523f4c579 Mon Sep 17 00:00:00 2001 > From: Anand Kumar Santhanam > Date: Mon, 5 Aug 2013 14:16:52 +0530 > Subject: [PATCH] pm80xx: Fix for 32 bit compilation issue. > > pm80xx driver does not compile under 32 bit linux. This patch > fixes the same. > > Signed-off-by: anandkumar.santha...@pmcs.com > > --- > drivers/scsi/pm8001/pm8001_init.c |5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/pm8001/pm8001_init.c > b/drivers/scsi/pm8001/pm8001_init.c > index e4b9bc7..584d04e 100644 > --- a/drivers/scsi/pm8001/pm8001_init.c > +++ b/drivers/scsi/pm8001/pm8001_init.c > @@ -422,9 +422,10 @@ static int pm8001_ioremap(struct pm8001_hba_info > *pm8001_ha) > pm8001_printk("PCI: bar %d, logicalBar %d ", > bar, logicalBar)); > PM8001_INIT_DBG(pm8001_ha, pm8001_printk( > - "base addr %llx virt_addr=%llx len=%d\n", > + "base addr %llx virt_addr %p len=%d\n", > (u64)pm8001_ha->io_mem[logicalBar].membase, > - (u64)pm8001_ha->io_mem[logicalBar].memvirtaddr, > + (void __iomem *) Hi Anand, the memvirtaddr is of type 'void __iomem*' - is the explicit cast needed? Tomas > + pm8001_ha->io_mem[logicalBar].memvirtaddr, > pm8001_ha->io_mem[logicalBar].memsize)); > } else { > pm8001_ha->io_mem[logicalBar].membase = 0; -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/8] [SCSI] dc395x: use NULL instead of 0
On Wed, 2013-08-07 at 15:58 +0900, Jingoo Han wrote: > On Wednesday, August 07, 2013 3:50 PM, Oliver Neukum wrote: > > On Wed, 2013-08-07 at 12:55 +0900, Jingoo Han wrote: > > > > > @@ -4183,15 +4183,17 @@ static void check_eeprom(struct NvRamType > > > *eeprom, unsigned long io_port) > > >*/ > > > dprintkl(KERN_WARNING, > > > "EEProm checksum error: using default values and > > > options.\n"); > > > - eeprom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; > > > + eeprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & 0xff); > > > > Hi, > > > > if you are fixing these issues please use the proper macros for > > conversion of endianness. > > Sorry, I cannot understand exactly what you mean. :( > Would you please let me know which macros can be used? In this case constant_cpu_to_le16() would be the macro you want. Have a look at include/uapi/linux/byteorder/ Regards Oliver -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCHv3 0/9] New EH command timeout handler
On 08/07/2013 12:08 PM, Ren Mingxin wrote: > Hi, Hannes: > > On 07/15/2013 02:05 PM, Ren Mingxin wrote: >> On 07/12/2013 06:27 PM, Hannes Reinecke wrote: >>> On 07/12/2013 12:00 PM, Ren Mingxin wrote: On 07/12/2013 02:09 PM, Hannes Reinecke wrote: > On 07/12/2013 06:14 AM, Ren Mingxin wrote: >> On 07/01/2013 10:24 PM, Hannes Reinecke wrote: >>> With the original SCSI EH I got: >>> # time dd if=/dev/zero of=/dev/dm-2 bs=4k count=4k oflag=direct >>> 4096+0 records in >>> 4096+0 records out >>> 16777216 bytes (17 MB) copied, 142.652 s, 118 kB/s >>> >>> real2m22.657s >>> user0m0.013s >>> sys0m0.145s >>> >>> With this patchset I got: >>> # time dd if=/dev/zero of=/dev/dm-2 bs=4k count=4k oflag=direct >>> 4096+0 records in >>> 4096+0 records out >>> 16777216 bytes (17 MB) copied, 52.1579 s, 322 kB/s >>> >>> real0m52.163s >>> user0m0.012s >>> sys0m0.145s >>> >>> Test was to disable RSCN on the target port, disable the >>> target port, and then start the 'dd' command as indicated. >> >> Do you mean disabling RSCN/port is enough? I'm afraid I couldn't >> reproduce the problem by your steps. Both with and without your >> patchset are the same 'dd' result: 27s. Please let me know >> where I >> neglected or mistook: >> >> 1) I made a dm-multipath target 'dm-0' whose grouping policy was >> failover; >> 2) Disable RSCN/port via brocade fc switch: >> SW300:root> portcfg rscnsupr 15 --enable; portDisable 15 >> 3) Start the 'dd' command: >> # time dd if=/dev/zero of=/dev/dm-0 bs=4k count=4k >> oflag=direct >> dd: writing `/dev/sde': Input/output error >> 1+0 records in >> 0+0 records out >> 0 bytes (0 B) copied, 27.8588 s, 0.0 kB/s >> >> real0m27.860s >> user0m0.001s >> sys 0m0.000s > > You are aware that you have to disable RSCNs on the _target_ port, > right? > Disabling RSCNs on the _initiator_ ports is a well-tested case, > and > the one which actually makes sense (and is even implemented in > QLogic switches). > Disabling RSCNs for the _target_ port, OTOH, has a very > questionable > nature (hence QLogic switches don't even allow you to do this). You're right. By disabling RSCNs on target port, I've reproduced this problem. Thank you so much. But I've encountered the bug I said before. I'll test again with your new patchset once you send. >>> >>> Could you check with the attached patch? That should convert it to >>> delayed_work and avoid this issue. >> >> Unfortunately, the login prompt couldn't be entered in and BUGs were >> printed ceaselessly while os booting with this patch. The BUGs are >> like below: >> >> BUG: scheduling while atomic: swapper/0/0/0x1100 >> Modules linked in: mptsas(F+) mptscsih(F) mptbase(F) >> scsi_transport_sas(F) >> CPU: 0 PID: 0 Comm: swapper/0 Tainted: GF3.10.0hannes+ >> #10 >> Hardware name: FUJITSU-SV PRIMEQUEST 1800E/SB-8GDIMM-CN, BIOS >> PRIMEQUEST 1000 Series BIOS Version 1.39 11/16/2012 >> 88047ee03b68 8153ada4 88047ee03b78 >> 8107389d 88047ee03c08 8153ca26 81a01fd8 >> 00012d00 81a00010 00012d00 00012d00 >> Call Trace: >> [] dump_stack+0x19/0x1d >> [] __schedule_bug+0x4d/0x60 >> [] __schedule+0x646/0x6f0 >> [] __cond_resched+0x2a/0x40 >> [] _cond_resched+0x30/0x40 >> [] start_flush_work+0x2c/0x140 >> [] flush_work+0x1a/0x40 >> [] ? try_to_grab_pending+0x109/0x190 >> [] __cancel_work_timer+0x7e/0x110 >> [] cancel_delayed_work_sync+0x13/0x20 >> [] scsi_put_command+0x65/0xa0 > > This bug is caused by the sync function 'cancel_delayed_work_sync' > which is invoked in the interrupt context. By replacing it by non- > sync function 'cancel_delayed_work' in 'scsi_put_command' can avoid. > > Do you think there is such need to sync in the function 'scsi_put_ > command'? Since SCSI command block will be freed here, it is NOT > necessary to wait for the abort work to finish on it, yes? > You are right, cancel_delayed_work() should be sufficient here. I'll give it a spin and repost the patchset. Cheers, Hannes -- Dr. Hannes Reinecke zSeries & Storage h...@suse.de +49 911 74053 688 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg) -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCHv3 0/9] New EH command timeout handler
Hi, Hannes: On 07/15/2013 02:05 PM, Ren Mingxin wrote: On 07/12/2013 06:27 PM, Hannes Reinecke wrote: On 07/12/2013 12:00 PM, Ren Mingxin wrote: On 07/12/2013 02:09 PM, Hannes Reinecke wrote: On 07/12/2013 06:14 AM, Ren Mingxin wrote: On 07/01/2013 10:24 PM, Hannes Reinecke wrote: With the original SCSI EH I got: # time dd if=/dev/zero of=/dev/dm-2 bs=4k count=4k oflag=direct 4096+0 records in 4096+0 records out 16777216 bytes (17 MB) copied, 142.652 s, 118 kB/s real2m22.657s user0m0.013s sys0m0.145s With this patchset I got: # time dd if=/dev/zero of=/dev/dm-2 bs=4k count=4k oflag=direct 4096+0 records in 4096+0 records out 16777216 bytes (17 MB) copied, 52.1579 s, 322 kB/s real0m52.163s user0m0.012s sys0m0.145s Test was to disable RSCN on the target port, disable the target port, and then start the 'dd' command as indicated. Do you mean disabling RSCN/port is enough? I'm afraid I couldn't reproduce the problem by your steps. Both with and without your patchset are the same 'dd' result: 27s. Please let me know where I neglected or mistook: 1) I made a dm-multipath target 'dm-0' whose grouping policy was failover; 2) Disable RSCN/port via brocade fc switch: SW300:root> portcfg rscnsupr 15 --enable; portDisable 15 3) Start the 'dd' command: # time dd if=/dev/zero of=/dev/dm-0 bs=4k count=4k oflag=direct dd: writing `/dev/sde': Input/output error 1+0 records in 0+0 records out 0 bytes (0 B) copied, 27.8588 s, 0.0 kB/s real0m27.860s user0m0.001s sys 0m0.000s You are aware that you have to disable RSCNs on the _target_ port, right? Disabling RSCNs on the _initiator_ ports is a well-tested case, and the one which actually makes sense (and is even implemented in QLogic switches). Disabling RSCNs for the _target_ port, OTOH, has a very questionable nature (hence QLogic switches don't even allow you to do this). You're right. By disabling RSCNs on target port, I've reproduced this problem. Thank you so much. But I've encountered the bug I said before. I'll test again with your new patchset once you send. Could you check with the attached patch? That should convert it to delayed_work and avoid this issue. Unfortunately, the login prompt couldn't be entered in and BUGs were printed ceaselessly while os booting with this patch. The BUGs are like below: BUG: scheduling while atomic: swapper/0/0/0x1100 Modules linked in: mptsas(F+) mptscsih(F) mptbase(F) scsi_transport_sas(F) CPU: 0 PID: 0 Comm: swapper/0 Tainted: GF3.10.0hannes+ #10 Hardware name: FUJITSU-SV PRIMEQUEST 1800E/SB-8GDIMM-CN, BIOS PRIMEQUEST 1000 Series BIOS Version 1.39 11/16/2012 88047ee03b68 8153ada4 88047ee03b78 8107389d 88047ee03c08 8153ca26 81a01fd8 00012d00 81a00010 00012d00 00012d00 Call Trace: [] dump_stack+0x19/0x1d [] __schedule_bug+0x4d/0x60 [] __schedule+0x646/0x6f0 [] __cond_resched+0x2a/0x40 [] _cond_resched+0x30/0x40 [] start_flush_work+0x2c/0x140 [] flush_work+0x1a/0x40 [] ? try_to_grab_pending+0x109/0x190 [] __cancel_work_timer+0x7e/0x110 [] cancel_delayed_work_sync+0x13/0x20 [] scsi_put_command+0x65/0xa0 This bug is caused by the sync function 'cancel_delayed_work_sync' which is invoked in the interrupt context. By replacing it by non- sync function 'cancel_delayed_work' in 'scsi_put_command' can avoid. Do you think there is such need to sync in the function 'scsi_put_ command'? Since SCSI command block will be freed here, it is NOT necessary to wait for the abort work to finish on it, yes? Thanks, Ren [] scsi_next_command+0x3a/0x60 [] scsi_end_request+0xab/0xb0 [] scsi_io_completion+0x9f/0x670 [] scsi_finish_command+0xd4/0x140 [] scsi_softirq_done+0x147/0x170 [] blk_done_softirq+0x74/0x90 [] __do_softirq+0xef/0x260 [] irq_exit+0xb5/0xc0 [] do_IRQ+0x66/0xe0 [] common_interrupt+0x6a/0x6a [] ? clockevents_notify+0x52/0x150 [] ? cpuidle_enter_state+0x53/0xd0 [] ? cpuidle_enter_state+0x4f/0xd0 [] cpuidle_idle_call+0xcf/0x160 [] arch_cpu_idle+0xe/0x30 [] cpu_idle_loop+0x65/0x1f0 [] cpu_startup_entry+0x70/0x80 [] rest_init+0x77/0x80 [] start_kernel+0x41a/0x427 [] ? repair_env_string+0x5b/0x5b [] x86_64_start_reservations+0x2a/0x2c [] x86_64_start_kernel+0x12f/0x136 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/8] [SCSI] dc395x: use NULL instead of 0
On Wed, Wednesday, August 07, 2013 5:40 PM, Julian Calaby > wrote: > On Wed, Aug 7, 2013 at 6:36 PM, Jingoo Han wrote: > > On Wednesday, August 07, 2013 5:21 PM, Julian Calaby wrote: > >> On Wed, Aug 7, 2013 at 5:45 PM, Jingoo Han wrote: > >> > On Wednesday, August 07, 2013 3:50 PM, Oliver Neukum wrote: > >> >> On Wed, 2013-08-07 at 12:55 +0900, Jingoo Han wrote: > >> >> > >> >> > @@ -4183,15 +4183,17 @@ static void check_eeprom(struct NvRamType > >> >> > *eeprom, unsigned long > io_port) > >> >> > */ > >> >> > dprintkl(KERN_WARNING, > >> >> > "EEProm checksum error: using default values and > >> >> > options.\n"); > >> >> > - eeprom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; > >> >> > + eeprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & > >> >> > 0xff); > >> >> > >> >> Hi, > >> >> > >> >> if you are fixing these issues please use the proper macros for > >> >> conversion of endianness. > >> > > >> > Then, do you mean the following? :) > >> > > >> > - prom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; > >> > + eprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & > >> > le16_to_cpu(0xff)); > >> > >> No. > >> > >> The issue is that the driver is doing things like this: > >> > >> eeprom->member[0] = (u8)(CONSTANT & 0xff); > >> eeprom->member[1] = (u8)(CONSTANT >> 8); > >> > >> Which is exactly the same as code along the lines of: > >> > >> eeprom->member = cpu_to_le16(CONSTANT); > > > > However, when I compile the following, it makes build error. > > > > - eeprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & > > 0xff); > > - eeprom->sub_vendor_id[1] = (u8)(PCI_VENDOR_ID_TEKRAM >> 8); > > + eeprom->sub_vendor_id = cpu_to_le16(PCI_VENDOR_ID_TEKRAM); > > Of course it does. > > I said code along the lines of. You'll need to do more than just what > I suggested, including changing the definition of the eeprom struct > and fixing any other places where it's used / set. I fixed it as below. In this case, it does not make any warnings. Oliver Neukum, do you mean the following? struct NvRamType { - u8 sub_vendor_id[2];/* 0,1 Sub Vendor ID */ + u16 sub_vendor_id; /* 0,1 Sub Vendor ID */ - eeprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & 0xff); - eeprom->sub_vendor_id[1] = (u8)(PCI_VENDOR_ID_TEKRAM >> 8); + eeprom->sub_vendor_id = cpu_to_le16(PCI_VENDOR_ID_TEKRAM); Best regards, Jingoo Han -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/8] [SCSI] dc395x: use NULL instead of 0
Hi Jingoo, On Wed, Aug 7, 2013 at 6:36 PM, Jingoo Han wrote: > > >> -Original Message- >> From: Julian Calaby [mailto:julian.cal...@gmail.com] >> Sent: Wednesday, August 07, 2013 5:21 PM >> To: Jingoo Han >> Cc: Oliver Neukum; James Bottomley; Ali Akcaagac; Jamie Lenehan; >> dc3...@twibble.org; James Bottomley; >> linux-scsi >> Subject: Re: [PATCH 3/8] [SCSI] dc395x: use NULL instead of 0 >> >> Hi Jingoo, >> >> On Wed, Aug 7, 2013 at 5:45 PM, Jingoo Han wrote: >> > On Wednesday, August 07, 2013 3:50 PM, Oliver Neukum wrote: >> >> On Wed, 2013-08-07 at 12:55 +0900, Jingoo Han wrote: >> >> >> >> > @@ -4183,15 +4183,17 @@ static void check_eeprom(struct NvRamType >> >> > *eeprom, unsigned long io_port) >> >> > */ >> >> > dprintkl(KERN_WARNING, >> >> > "EEProm checksum error: using default values and >> >> > options.\n"); >> >> > - eeprom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; >> >> > + eeprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & >> >> > 0xff); >> >> >> >> Hi, >> >> >> >> if you are fixing these issues please use the proper macros for >> >> conversion of endianness. >> > >> > Then, do you mean the following? :) >> > >> > - prom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; >> > + eprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & >> > le16_to_cpu(0xff)); >> >> No. >> >> The issue is that the driver is doing things like this: >> >> eeprom->member[0] = (u8)(CONSTANT & 0xff); >> eeprom->member[1] = (u8)(CONSTANT >> 8); >> >> Which is exactly the same as code along the lines of: >> >> eeprom->member = cpu_to_le16(CONSTANT); > > However, when I compile the following, it makes build error. > > - eeprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & 0xff); > - eeprom->sub_vendor_id[1] = (u8)(PCI_VENDOR_ID_TEKRAM >> 8); > + eeprom->sub_vendor_id = cpu_to_le16(PCI_VENDOR_ID_TEKRAM); Of course it does. I said code along the lines of. You'll need to do more than just what I suggested, including changing the definition of the eeprom struct and fixing any other places where it's used / set. Thanks, -- Julian Calaby Email: julian.cal...@gmail.com Profile: http://www.google.com/profiles/julian.calaby/ .Plan: http://sites.google.com/site/juliancalaby/ -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/8] [SCSI] dc395x: use NULL instead of 0
> -Original Message- > From: Julian Calaby [mailto:julian.cal...@gmail.com] > Sent: Wednesday, August 07, 2013 5:21 PM > To: Jingoo Han > Cc: Oliver Neukum; James Bottomley; Ali Akcaagac; Jamie Lenehan; > dc3...@twibble.org; James Bottomley; > linux-scsi > Subject: Re: [PATCH 3/8] [SCSI] dc395x: use NULL instead of 0 > > Hi Jingoo, > > On Wed, Aug 7, 2013 at 5:45 PM, Jingoo Han wrote: > > On Wednesday, August 07, 2013 3:50 PM, Oliver Neukum wrote: > >> On Wed, 2013-08-07 at 12:55 +0900, Jingoo Han wrote: > >> > >> > @@ -4183,15 +4183,17 @@ static void check_eeprom(struct NvRamType > >> > *eeprom, unsigned long io_port) > >> > */ > >> > dprintkl(KERN_WARNING, > >> > "EEProm checksum error: using default values and > >> > options.\n"); > >> > - eeprom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; > >> > + eeprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & 0xff); > >> > >> Hi, > >> > >> if you are fixing these issues please use the proper macros for > >> conversion of endianness. > > > > Then, do you mean the following? :) > > > > - prom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; > > + eprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & > > le16_to_cpu(0xff)); > > No. > > The issue is that the driver is doing things like this: > > eeprom->member[0] = (u8)(CONSTANT & 0xff); > eeprom->member[1] = (u8)(CONSTANT >> 8); > > Which is exactly the same as code along the lines of: > > eeprom->member = cpu_to_le16(CONSTANT); However, when I compile the following, it makes build error. - eeprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & 0xff); - eeprom->sub_vendor_id[1] = (u8)(PCI_VENDOR_ID_TEKRAM >> 8); + eeprom->sub_vendor_id = cpu_to_le16(PCI_VENDOR_ID_TEKRAM); Best regards, Jingoo Han -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/8] [SCSI] dc395x: use NULL instead of 0
Hi Jingoo, On Wed, Aug 7, 2013 at 5:45 PM, Jingoo Han wrote: > On Wednesday, August 07, 2013 3:50 PM, Oliver Neukum wrote: >> On Wed, 2013-08-07 at 12:55 +0900, Jingoo Han wrote: >> >> > @@ -4183,15 +4183,17 @@ static void check_eeprom(struct NvRamType *eeprom, >> > unsigned long io_port) >> > */ >> > dprintkl(KERN_WARNING, >> > "EEProm checksum error: using default values and >> > options.\n"); >> > - eeprom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; >> > + eeprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & 0xff); >> >> Hi, >> >> if you are fixing these issues please use the proper macros for >> conversion of endianness. > > Then, do you mean the following? :) > > - prom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; > + eprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & > le16_to_cpu(0xff)); No. The issue is that the driver is doing things like this: eeprom->member[0] = (u8)(CONSTANT & 0xff); eeprom->member[1] = (u8)(CONSTANT >> 8); Which is exactly the same as code along the lines of: eeprom->member = cpu_to_le16(CONSTANT); Thanks, -- Julian Calaby Email: julian.cal...@gmail.com Profile: http://www.google.com/profiles/julian.calaby/ .Plan: http://sites.google.com/site/juliancalaby/ -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] pm80xx: Fix for 32 bit compilation issue.
>From cc606631fae60a38ab9532bab79fd93523f4c579 Mon Sep 17 00:00:00 2001 From: Anand Kumar Santhanam Date: Mon, 5 Aug 2013 14:16:52 +0530 Subject: [PATCH] pm80xx: Fix for 32 bit compilation issue. pm80xx driver does not compile under 32 bit linux. This patch fixes the same. Signed-off-by: anandkumar.santha...@pmcs.com --- drivers/scsi/pm8001/pm8001_init.c |5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c index e4b9bc7..584d04e 100644 --- a/drivers/scsi/pm8001/pm8001_init.c +++ b/drivers/scsi/pm8001/pm8001_init.c @@ -422,9 +422,10 @@ static int pm8001_ioremap(struct pm8001_hba_info *pm8001_ha) pm8001_printk("PCI: bar %d, logicalBar %d ", bar, logicalBar)); PM8001_INIT_DBG(pm8001_ha, pm8001_printk( - "base addr %llx virt_addr=%llx len=%d\n", + "base addr %llx virt_addr %p len=%d\n", (u64)pm8001_ha->io_mem[logicalBar].membase, - (u64)pm8001_ha->io_mem[logicalBar].memvirtaddr, + (void __iomem *) + pm8001_ha->io_mem[logicalBar].memvirtaddr, pm8001_ha->io_mem[logicalBar].memsize)); } else { pm8001_ha->io_mem[logicalBar].membase = 0; -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[Bug 60711] New: USB drive no longer detected as removable storage media
https://bugzilla.kernel.org/show_bug.cgi?id=60711 Bug ID: 60711 Summary: USB drive no longer detected as removable storage media Product: IO/Storage Version: 2.5 Kernel Version: 3.10.3 Hardware: i386 OS: Linux Tree: Mainline Status: NEW Severity: low Priority: P1 Component: SCSI Assignee: linux-scsi@vger.kernel.org Reporter: trall...@onlinehome.de Regression: No Created attachment 107132 --> https://bugzilla.kernel.org/attachment.cgi?id=107132&action=edit DMESG excerpt from success and failure This patch commit 98dcc2946adbe4349ef1ef9b99873b912831edd4 Author: Martin K. Petersen Date: Thu Jun 6 22:15:55 2013 -0400 SCSI: sd: Update WRITE SAME heuristics commit 66c28f97120e8a621afd5aa7a31c4b85c547d33d upstream. introduced with kernel patch-3.10.3 effectively breaks detection of some USB drives as removable storage media. The concerned drives are recognized by the SCSI layer, but are no longer available as removable storage (see attachment). Commenting out the following if-clause from sd.c (function sd_read_write_same) if (!scsi_get_vpd_page(sdev, 0x89, buffer, SD_BUF_SIZE)) sdev->no_write_same = 1; makes anything working as expected. -- You are receiving this mail because: You are the assignee for the bug. -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/8] [SCSI] dc395x: use NULL instead of 0
On Wednesday, August 07, 2013 3:50 PM, Oliver Neukum wrote: > On Wed, 2013-08-07 at 12:55 +0900, Jingoo Han wrote: > > > @@ -4183,15 +4183,17 @@ static void check_eeprom(struct NvRamType *eeprom, > > unsigned long io_port) > > */ > > dprintkl(KERN_WARNING, > > "EEProm checksum error: using default values and > > options.\n"); > > - eeprom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; > > + eeprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & 0xff); > > Hi, > > if you are fixing these issues please use the proper macros for > conversion of endianness. Then, do you mean the following? :) - prom->sub_vendor_id[0] = (u8)PCI_VENDOR_ID_TEKRAM; + eprom->sub_vendor_id[0] = (u8)(PCI_VENDOR_ID_TEKRAM & le16_to_cpu(0xff)); Best regards, Jingoo Han -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html