[PATCH V4] scsi: core: use blk_mq_requeue_request in __scsi_queue_insert
In scsi core, __scsi_queue_insert should just put request back on the queue and retry using the same command as before. However, for blk-mq, scsi_mq_requeue_cmd is employed here which will unprepare the request. To align with the semantics of __scsi_queue_insert, use blk_mq_requeue_request with kick_requeue_list == true and put the reference of scsi_device. Cc: Christoph HellwigSigned-off-by: Jianchao Wang Reviewed-by: Bart Van Assche --- Changelog: V3 -> V4: - modify the comment and make it more clearly V2 -> V3: - add comment to explain why we need a put_device in __scsi_queue_insert - add reviewed-by V1 -> V2: - add put_device on scsi_device->sdev_gendev drivers/scsi/scsi_lib.c | 14 +- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index a86df9c..6ce33f6 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -191,7 +191,19 @@ static void __scsi_queue_insert(struct scsi_cmnd *cmd, int reason, bool unbusy) */ cmd->result = 0; if (q->mq_ops) { - scsi_mq_requeue_cmd(cmd); + /* +* Before a SCSI command is dispatched, +* get_device(>sdev_gendev) is called and the host, +* target and device busy counters are increased. Since +* requeuing a request causes these actions to be repeated and +* since scsi_device_unbusy() has already been called, +* put_device(>sdev_gendev) must still be called. Call +* put_device() after blk_mq_requeue_request() to avoid that +* removal of the SCSI device can start before requeueing has +* happened. +*/ + blk_mq_requeue_request(cmd->request, true); + put_device(>sdev_gendev); return; } spin_lock_irqsave(q->queue_lock, flags); -- 2.7.4
Re: [PATCH V3] scsi: core: use blk_mq_requeue_request in __scsi_queue_insert
Hi Bart Thanks for your kindly response and directive. On 03/03/2018 12:31 AM, Bart Van Assche wrote: > On Fri, 2018-03-02 at 11:31 +0800, Jianchao Wang wrote: >> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c >> index a86df9c..d2f1838 100644 >> --- a/drivers/scsi/scsi_lib.c >> +++ b/drivers/scsi/scsi_lib.c >> @@ -191,7 +191,13 @@ static void __scsi_queue_insert(struct scsi_cmnd *cmd, >> int reason, bool unbusy) >> */ >> cmd->result = 0; >> if (q->mq_ops) { >> -scsi_mq_requeue_cmd(cmd); >> +/* >> + * scsi_device.sdev_gendev will be get every time in >> .get_budget and >> + * be put in scsi_end_request. Hence we need to put the >> reference >> + * here when we decide to requeue request. >> + */ >> +blk_mq_requeue_request(cmd->request, true); >> +put_device(>sdev_gendev); >> return; >> } >> spin_lock_irqsave(q->queue_lock, flags); > > Please consider to change the new comment into something like the following: > "Before a SCSI command is dispatched, get_device(>sdev_gendev) is called > and the host, target and device busy counters are increased. Since requeuing a > request causes these actions to be repeated and since scsi_device_unbusy() has > already been called, put_device(>sdev_gendev) must still be called. > Call > put_device() after blk_mq_requeue_request() to avoid that removal of the SCSI > device can start before requeueing has happened." Yes, your comment is more detailed and clearly. Sincerely Jianchao
Re: [PATCH V3 1/8] scsi: hpsa: fix selection of reply queue
On Fri, 2018-03-02 at 15:03 +, Don Brace wrote: > > -Original Message- > > From: Laurence Oberman [mailto:lober...@redhat.com] > > Sent: Friday, March 02, 2018 8:09 AM > > To: Ming Lei> > Cc: Don Brace ; Jens Axboe > k>; > > linux-bl...@vger.kernel.org; Christoph Hellwig ; > > Mike > > Snitzer ; linux-scsi@vger.kernel.org; Hannes > > Reinecke > > ; Arun Easi ; Omar Sandoval > > ; Martin K . Petersen ; > > James > > Bottomley ; Christoph > > Hellwig > > ; Kashyap Desai ; Peter > > Rivera > > ; Meelis Roos > > Subject: Re: [PATCH V3 1/8] scsi: hpsa: fix selection of reply > > queue > > > > EXTERNAL EMAIL > > > > > > On Fri, 2018-03-02 at 10:16 +0800, Ming Lei wrote: > > > On Thu, Mar 01, 2018 at 04:19:34PM -0500, Laurence Oberman wrote: > > > > On Thu, 2018-03-01 at 14:01 -0500, Laurence Oberman wrote: > > > > > On Thu, 2018-03-01 at 16:18 +, Don Brace wrote: > > > > > > > -Original Message- > > > > > > > From: Ming Lei [mailto:ming@redhat.com] > > > > > > > Sent: Tuesday, February 27, 2018 4:08 AM > > > > > > > To: Jens Axboe ; linux-block@vger.kernel > > > > > > > .org > > > > > > > ; > > > > > > > Christoph > > > > > > > Hellwig ; Mike Snitzer > > > > > > .com > > > > > > > > > > > > > > > > > > > > > > Cc: linux-scsi@vger.kernel.org; Hannes Reinecke > > > > > > e.de > > > > > > > > ; > > > > > > > > > > > > > > Arun Easi > > > > > > > ; Omar Sandoval ; > > > > > > > Martin K > > > > > > > . > > > > > > > Petersen ; James Bottomley > > > > > > > ; Christoph > > > > > > > Hellwig > > > > > > ch@l > > > > > > > st > > > > > > > .de>; > > > > > > > Don Brace ; Kashyap Desai > > > > > > > ; Peter Rivera > > > > > > broa > > > > > > > dcom > > > > > > > .c > > > > > > > om>; > > > > > > > Laurence Oberman ; Ming Lei > > > > > > > ; Meelis Roos > > > > > > > Subject: [PATCH V3 1/8] scsi: hpsa: fix selection of > > > > > > > reply > > > > > > > queue > > > > > > > > > > > > > Seems Don run into IO failure without blk-mq, could you run your > > > tests again > > > in legacy mode? > > > > > > Thanks, > > > Ming > > > > Hello Ming > > I ran multiple passes on Legacy and still see no issues in my test > > bed > > > > BOOT_IMAGE=/vmlinuz-4.16.0-rc2.ming+ root=UUID=43f86d71-b1bf-4789- > > a28e- > > 21c6ddc90195 ro crashkernel=256M@64M log_buf_len=64M > > console=ttyS1,115200n8 > > > > HEAD of the git kernel I am using > > > > 694e16f scsi: megaraid: improve scsi_mq performance via > > .host_tagset > > 793686c scsi: hpsa: improve scsi_mq performance via .host_tagset > > 60d5b36 block: null_blk: introduce module parameter of > > 'g_host_tags' > > 8847067 scsi: Add template flag 'host_tagset' > > a8fbdd6 blk-mq: introduce BLK_MQ_F_HOST_TAGS > > 4710fab blk-mq: introduce 'start_tag' field to 'struct blk_mq_tags' > > 09bb153 scsi: megaraid_sas: fix selection of reply queue > > 52700d8 scsi: hpsa: fix selection of reply queue > > I checkout out Linus's tree (4.16.0-rc3+) and re-applied the above > patches. > I and have been running 24 hours with no issues. > Evidently my forked copy was corrupted. > > So, my I/O testing has gone well. > > I'll run some performance numbers next. > > Thanks, > Don Unless Kashyap is not happy we need to consider getting this in to Linus now because we are seeing HPE servers that keep hanging now with the original commit now upstream. Kashyap, are you good with the v3 patchset or still concerned with performance. I was getting pretty good IOPS/sec to individual SSD drives set up as jbod devices on the megaraid_sas. With larger I/O sizes like 1MB I was getting good MB/sec and not seeing a measurable performance impact. I dont have the hardware you have to mimic your configuration. Thanks Laurence
Re: [PATCH V3] scsi: core: use blk_mq_requeue_request in __scsi_queue_insert
On Fri, 2018-03-02 at 11:31 +0800, Jianchao Wang wrote: > diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c > index a86df9c..d2f1838 100644 > --- a/drivers/scsi/scsi_lib.c > +++ b/drivers/scsi/scsi_lib.c > @@ -191,7 +191,13 @@ static void __scsi_queue_insert(struct scsi_cmnd *cmd, > int reason, bool unbusy) >*/ > cmd->result = 0; > if (q->mq_ops) { > - scsi_mq_requeue_cmd(cmd); > + /* > + * scsi_device.sdev_gendev will be get every time in > .get_budget and > + * be put in scsi_end_request. Hence we need to put the > reference > + * here when we decide to requeue request. > + */ > + blk_mq_requeue_request(cmd->request, true); > + put_device(>sdev_gendev); > return; > } > spin_lock_irqsave(q->queue_lock, flags); Please consider to change the new comment into something like the following: "Before a SCSI command is dispatched, get_device(>sdev_gendev) is called and the host, target and device busy counters are increased. Since requeuing a request causes these actions to be repeated and since scsi_device_unbusy() has already been called, put_device(>sdev_gendev) must still be called. Call put_device() after blk_mq_requeue_request() to avoid that removal of the SCSI device can start before requeueing has happened." Thanks, Bart.
Re: [PATCH v2 1/8] dt-bindings: scsi: hisi_sas: add an property of signal attenuation
On 02/03/2018 15:57, Rob Herring wrote: On Fri, Mar 2, 2018 at 9:06 AM, John Garrywrote: > From: Xiaofei Tan > > For some new boards with hip07 chipset we are required to > set PHY config registers differently. The hw property which > determines how to set these registers is in the PHY signal > attenuation readings. > > This patch add an devicetree property, hisi-signal-attenuation, > which is used to describe the signal attenuation of an board. > > Cc: Rob Herring > Cc: Mark Rutland > Signed-off-by: Xiaofei Tan > Signed-off-by: John Garry > --- > Documentation/devicetree/bindings/scsi/hisilicon-sas.txt | 7 +++ > 1 file changed, 7 insertions(+) > > diff --git a/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt b/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt > index df3bef7..6f6876a 100644 > --- a/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt > +++ b/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt > @@ -53,6 +53,13 @@ Main node required properties: > Optional main node properties: > - hip06-sas-v2-quirk-amt : when set, indicates that the v2 controller has the > "am-max-transmissions" limitation. > + - hisi-signal-attenuation : array of 3 32-bit values, containing de-emphasis, The format for vendor prefixes is: ,property-name And should only be ones defined in vendor-prefixes.txt Hi Rob, To save a v4, that would be "hisilicon,signal-attenuation", right? Thanks, John > + preshoot, and boost attenuation readings for the board. They > + are used to describe the signal attenuation of the board. These
Re: [PATCH v2 1/8] dt-bindings: scsi: hisi_sas: add an property of signal attenuation
On Fri, Mar 2, 2018 at 9:06 AM, John Garrywrote: > From: Xiaofei Tan > > For some new boards with hip07 chipset we are required to > set PHY config registers differently. The hw property which > determines how to set these registers is in the PHY signal > attenuation readings. > > This patch add an devicetree property, hisi-signal-attenuation, > which is used to describe the signal attenuation of an board. > > Cc: Rob Herring > Cc: Mark Rutland > Signed-off-by: Xiaofei Tan > Signed-off-by: John Garry > --- > Documentation/devicetree/bindings/scsi/hisilicon-sas.txt | 7 +++ > 1 file changed, 7 insertions(+) > > diff --git a/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt > b/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt > index df3bef7..6f6876a 100644 > --- a/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt > +++ b/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt > @@ -53,6 +53,13 @@ Main node required properties: > Optional main node properties: > - hip06-sas-v2-quirk-amt : when set, indicates that the v2 controller has > the > "am-max-transmissions" limitation. > + - hisi-signal-attenuation : array of 3 32-bit values, containing > de-emphasis, The format for vendor prefixes is: ,property-name And should only be ones defined in vendor-prefixes.txt > + preshoot, and boost attenuation readings for the board. They > + are used to describe the signal attenuation of the board. > These > + values' range is 7600 to 12400, and used to represent -24dB to > + 24dB. > + The formula is "y = (x-1)/1". For example, 10478 > + means 4.78dB. > > Example: > sas0: sas@c100 { > -- > 1.9.1 >
[PATCH v2 3/8] scsi: hisi_sas: fix the issue of link rate inconsistency
From: Xiaofei TanIn sysfs, there are two files about minimum linkrate, and also two files for maximum linkrate. Take maximum linkrate example, maximum_linkrate_hw is read-only and indicated by the register HARD_PHY_LINKRATE, and maximum_linkrate is read-write and corresponding to the register PROG_PHY_LINK_RATE. But in the function phy_up_v*_hw(), we get *_linkrate value from HARD_PHY_LINKRATE. It is not right. This patch is to fix this issue. Unreferenced PHY-interrupt enum is also removed for v3 hw. Signed-off-by: Xiaofei Tan Signed-off-by: John Garry --- drivers/scsi/hisi_sas/hisi_sas_main.c | 2 ++ drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 1 - drivers/scsi/hisi_sas/hisi_sas_v2_hw.c | 8 +--- drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 13 + 4 files changed, 4 insertions(+), 20 deletions(-) diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c index 2d4dbed..9d16372 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -683,6 +683,8 @@ static void hisi_sas_phy_init(struct hisi_hba *hisi_hba, int phy_no) phy->hisi_hba = hisi_hba; phy->port = NULL; + phy->minimum_linkrate = SAS_LINK_RATE_1_5_GBPS; + phy->maximum_linkrate = hisi_hba->hw->phy_get_max_linkrate(); sas_phy->enabled = (phy_no < hisi_hba->n_phy) ? 1 : 0; sas_phy->class = SAS; sas_phy->iproto = SAS_PROTOCOL_ALL; diff --git a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c index 679e76f..38bbda9 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c @@ -873,7 +873,6 @@ static void phy_set_linkrate_v1_hw(struct hisi_hba *hisi_hba, int phy_no, sas_phy->phy->maximum_linkrate = max; sas_phy->phy->minimum_linkrate = min; - min -= SAS_LINK_RATE_1_5_GBPS; max -= SAS_LINK_RATE_1_5_GBPS; for (i = 0; i <= max; i++) diff --git a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c index 3a0b4ed..edd0c89 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c @@ -1603,7 +1603,6 @@ static void phy_set_linkrate_v2_hw(struct hisi_hba *hisi_hba, int phy_no, sas_phy->phy->maximum_linkrate = max; sas_phy->phy->minimum_linkrate = min; - min -= SAS_LINK_RATE_1_5_GBPS; max -= SAS_LINK_RATE_1_5_GBPS; for (i = 0; i <= max; i++) @@ -2684,7 +2683,7 @@ static int prep_abort_v2_hw(struct hisi_hba *hisi_hba, static int phy_up_v2_hw(int phy_no, struct hisi_hba *hisi_hba) { int i, res = IRQ_HANDLED; - u32 port_id, link_rate, hard_phy_linkrate; + u32 port_id, link_rate; struct hisi_sas_phy *phy = _hba->phy[phy_no]; struct asd_sas_phy *sas_phy = >sas_phy; struct device *dev = hisi_hba->dev; @@ -2723,11 +2722,6 @@ static int phy_up_v2_hw(int phy_no, struct hisi_hba *hisi_hba) } sas_phy->linkrate = link_rate; - hard_phy_linkrate = hisi_sas_phy_read32(hisi_hba, phy_no, - HARD_PHY_LINKRATE); - phy->maximum_linkrate = hard_phy_linkrate & 0xf; - phy->minimum_linkrate = (hard_phy_linkrate >> 4) & 0xf; - sas_phy->oob_mode = SAS_OOB_MODE; memcpy(sas_phy->attached_sas_addr, >sas_addr, SAS_ADDR_SIZE); dev_info(dev, "phyup: phy%d link_rate=%d\n", phy_no, link_rate); diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c index a1f1868..1ee95ab 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c @@ -340,12 +340,6 @@ struct hisi_sas_err_record_v3 { #define HISI_SAS_COMMAND_ENTRIES_V3_HW 4096 #define HISI_SAS_MSI_COUNT_V3_HW 32 -enum { - HISI_SAS_PHY_PHY_UPDOWN, - HISI_SAS_PHY_CHNL_INT, - HISI_SAS_PHY_INT_NR -}; - #define DIR_NO_DATA 0 #define DIR_TO_INI 1 #define DIR_TO_DEVICE 2 @@ -1121,7 +1115,7 @@ static int prep_abort_v3_hw(struct hisi_hba *hisi_hba, static int phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba) { int i, res = 0; - u32 context, port_id, link_rate, hard_phy_linkrate; + u32 context, port_id, link_rate; struct hisi_sas_phy *phy = _hba->phy[phy_no]; struct asd_sas_phy *sas_phy = >sas_phy; struct device *dev = hisi_hba->dev; @@ -1139,10 +1133,6 @@ static int phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba) goto end; } sas_phy->linkrate = link_rate; - hard_phy_linkrate = hisi_sas_phy_read32(hisi_hba, phy_no, - HARD_PHY_LINKRATE); - phy->maximum_linkrate = hard_phy_linkrate & 0xf; - phy->minimum_linkrate = (hard_phy_linkrate >> 4) & 0xf; phy->phy_type &= ~(PORT_TYPE_SAS | PORT_TYPE_SATA); /* Check for SATA
[PATCH v2 7/8] scsi: hisi_sas: fix return value of hisi_sas_task_prep()
From: Xiaofei TanIt is an implicit regulation that error code that function returned should be negative. But hisi_sas_task_prep() doesn't follow this. This may cause problems in the upper layer code. For example, in sas_expander.c of libsas, smp_execute_task_sg() may return the number of bytes of underrun. It will be conflicted with the scenaio lldd_execute_task() return an positive error code. This patch change the return value from SAS_PHY_DOWN to -ECOMM in hisi_sas_task_prep(). Signed-off-by: Xiaofei Tan Signed-off-by: John Garry --- drivers/scsi/hisi_sas/hisi_sas_main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c index 88ad8d4..dff9723 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -316,7 +316,7 @@ static int hisi_sas_task_prep(struct sas_task *task, struct hisi_sas_dq */ if (device->dev_type != SAS_SATA_DEV) task->task_done(task); - return SAS_PHY_DOWN; + return -ECOMM; } if (DEV_IS_GONE(sas_dev)) { @@ -327,7 +327,7 @@ static int hisi_sas_task_prep(struct sas_task *task, struct hisi_sas_dq dev_info(dev, "task prep: device %016llx not ready\n", SAS_ADDR(device->sas_addr)); - return SAS_PHY_DOWN; + return -ECOMM; } port = to_hisi_sas_port(sas_port); @@ -337,7 +337,7 @@ static int hisi_sas_task_prep(struct sas_task *task, struct hisi_sas_dq "SATA/STP" : "SAS", device->port->id); - return SAS_PHY_DOWN; + return -ECOMM; } if (!sas_protocol_ata(task->task_proto)) { -- 1.9.1
[PATCH v2 6/8] scsi: hisi_sas: remove unused variable hisi_sas_devices.running_req
From: Xiang ChenThe structure element hisi_sas_devices.running_req to count how many commands are active is in effect only ever written in the code, so remove it. Signed-off-by: Xiang Chen Signed-off-by: John Garry --- drivers/scsi/hisi_sas/hisi_sas.h | 1 - drivers/scsi/hisi_sas/hisi_sas_main.c | 9 - drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 3 --- 3 files changed, 13 deletions(-) diff --git a/drivers/scsi/hisi_sas/hisi_sas.h b/drivers/scsi/hisi_sas/hisi_sas.h index e7fd287..d1153e8 100644 --- a/drivers/scsi/hisi_sas/hisi_sas.h +++ b/drivers/scsi/hisi_sas/hisi_sas.h @@ -175,7 +175,6 @@ struct hisi_sas_device { struct hisi_sas_dq *dq; struct list_headlist; u64 attached_phy; - atomic64_t running_req; enum sas_device_typedev_type; int device_id; int sata_idx; diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c index 9ff8790..88ad8d4 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -200,8 +200,6 @@ void hisi_sas_slot_task_free(struct hisi_hba *hisi_hba, struct sas_task *task, if (task) { struct device *dev = hisi_hba->dev; - struct domain_device *device = task->dev; - struct hisi_sas_device *sas_dev = device->lldd_dev; if (!task->lldd_task) return; @@ -213,9 +211,6 @@ void hisi_sas_slot_task_free(struct hisi_hba *hisi_hba, struct sas_task *task, dma_unmap_sg(dev, task->scatter, task->num_scatter, task->data_dir); - - if (sas_dev) - atomic64_dec(_dev->running_req); } if (slot->buf) @@ -431,8 +426,6 @@ static int hisi_sas_task_prep(struct sas_task *task, struct hisi_sas_dq spin_unlock_irqrestore(>task_state_lock, flags); dq->slot_prep = slot; - - atomic64_inc(_dev->running_req); ++(*pass); return 0; @@ -1517,8 +1510,6 @@ static int hisi_sas_query_task(struct sas_task *task) dq->slot_prep = slot; - atomic64_inc(_dev->running_req); - /* send abort command to the chip */ hisi_hba->hw->start_delivery(dq); spin_unlock_irqrestore(>lock, flags_dq); diff --git a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c index 2eb8980..8dd0e6a6 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c @@ -1407,9 +1407,6 @@ static int slot_complete_v1_hw(struct hisi_hba *hisi_hba, } out: - if (sas_dev) - atomic64_dec(_dev->running_req); - hisi_sas_slot_task_free(hisi_hba, task, slot); sts = ts->stat; -- 1.9.1
[PATCH v2 1/8] dt-bindings: scsi: hisi_sas: add an property of signal attenuation
From: Xiaofei TanFor some new boards with hip07 chipset we are required to set PHY config registers differently. The hw property which determines how to set these registers is in the PHY signal attenuation readings. This patch add an devicetree property, hisi-signal-attenuation, which is used to describe the signal attenuation of an board. Cc: Rob Herring Cc: Mark Rutland Signed-off-by: Xiaofei Tan Signed-off-by: John Garry --- Documentation/devicetree/bindings/scsi/hisilicon-sas.txt | 7 +++ 1 file changed, 7 insertions(+) diff --git a/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt b/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt index df3bef7..6f6876a 100644 --- a/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt +++ b/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt @@ -53,6 +53,13 @@ Main node required properties: Optional main node properties: - hip06-sas-v2-quirk-amt : when set, indicates that the v2 controller has the "am-max-transmissions" limitation. + - hisi-signal-attenuation : array of 3 32-bit values, containing de-emphasis, + preshoot, and boost attenuation readings for the board. They + are used to describe the signal attenuation of the board. These + values' range is 7600 to 12400, and used to represent -24dB to + 24dB. + The formula is "y = (x-1)/1". For example, 10478 + means 4.78dB. Example: sas0: sas@c100 { -- 1.9.1
[PATCH v2 5/8] scsi: hisi_sas: increase timer expire of internal abort task
From: Xiaofei TanThe current 110ms expiry time is not long enough for the internal abort task. The reason is that the internal abort task could be blocked in HW if the HW is retrying to set up link. The internal abort task will be executed only when the retry process finished. The maximum time is 5s for the retry of setting up link. So, the timer expire should be more than 5s. This patch increases it from 110ms to 6s. Signed-off-by: Xiaofei Tan Signed-off-by: John Garry --- drivers/scsi/hisi_sas/hisi_sas_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c index 9d16372..9ff8790 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -871,6 +871,7 @@ static void hisi_sas_tmf_timedout(struct timer_list *t) #define TASK_TIMEOUT 20 #define TASK_RETRY 3 +#define INTERNAL_ABORT_TIMEOUT 6 static int hisi_sas_exec_internal_tmf_task(struct domain_device *device, void *parameter, u32 para_len, struct hisi_sas_tmf_task *tmf) @@ -1574,7 +1575,7 @@ static int hisi_sas_query_task(struct sas_task *task) task->task_proto = device->tproto; task->task_done = hisi_sas_task_done; task->slow_task->timer.function = hisi_sas_tmf_timedout; - task->slow_task->timer.expires = jiffies + msecs_to_jiffies(110); + task->slow_task->timer.expires = jiffies + INTERNAL_ABORT_TIMEOUT*HZ; add_timer(>slow_task->timer); res = hisi_sas_internal_abort_task_exec(hisi_hba, sas_dev->device_id, -- 1.9.1
[PATCH v2 0/8] hisi_sas: support x6000 board and some misc changes
This patchset primarily adds support for the Huawei x6000 board, which includes hip07 chipset. Unfortunately, due to some board layout differences with our development board, we need to set a PHY-related register differently for optimal signal quality. As such, a signal attenuation property is added to describe the differences in the boards and allow the PHY register to be set appropriately. In addition to this above feature, some misc changes are added for: - PHY linkrate sysfs interface - linkrate set function - internal abort timer timeout increase Differences to v1: - rename dt binding property name to include "hisi-" prefix Xiang Chen (2): scsi: hisi_sas: remove unused variable hisi_sas_devices.running_req scsi: hisi_sas: Code cleanup and minor bug fixes Xiaofei Tan (6): dt-bindings: scsi: hisi_sas: add an property of signal attenuation scsi: hisi_sas: support the property of signal attenuation for v2 hw scsi: hisi_sas: fix the issue of link rate inconsistency scsi: hisi_sas: fix the issue of setting linkrate register scsi: hisi_sas: increase timer expire of internal abort task scsi: hisi_sas: fix return value of hisi_sas_task_prep() .../devicetree/bindings/scsi/hisilicon-sas.txt | 7 +++ drivers/scsi/hisi_sas/hisi_sas.h | 1 - drivers/scsi/hisi_sas/hisi_sas_main.c | 34 +--- drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 13 +++-- drivers/scsi/hisi_sas/hisi_sas_v2_hw.c | 62 +- drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 34 +--- 6 files changed, 88 insertions(+), 63 deletions(-) -- 1.9.1
[PATCH v2 8/8] scsi: hisi_sas: Code cleanup and minor bug fixes
From: Xiang ChenThe patch does some code cleanup and fixes some small bugs: - Correct return status of phy_up_v3_hw() - Add static for function phy_get_max_linkrate_v3_hw() - Change exception return status when no reset method - Change magic value to ts->stat in slot_complete_vx_hw() - Remove unnecessary check for dev_is_sata() - Fix some issues of alignment and indents (Authored by Xiaofei Tan in another patch, but added here to be practical) Signed-off-by: Xiaofei Tan Signed-off-by: Xiang Chen Signed-off-by: John Garry --- drivers/scsi/hisi_sas/hisi_sas_main.c | 14 +++--- drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 4 +++- drivers/scsi/hisi_sas/hisi_sas_v2_hw.c | 10 ++ drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 16 +--- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c index dff9723..49c1fa6 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -33,7 +33,7 @@ u8 hisi_sas_get_ata_protocol(struct host_to_dev_fis *fis, int direction) case ATA_CMD_FPDMA_RECV: case ATA_CMD_FPDMA_SEND: case ATA_CMD_NCQ_NON_DATA: - return HISI_SAS_SATA_PROTOCOL_FPDMA; + return HISI_SAS_SATA_PROTOCOL_FPDMA; case ATA_CMD_DOWNLOAD_MICRO: case ATA_CMD_ID_ATA: @@ -45,7 +45,7 @@ u8 hisi_sas_get_ata_protocol(struct host_to_dev_fis *fis, int direction) case ATA_CMD_WRITE_LOG_EXT: case ATA_CMD_PIO_WRITE: case ATA_CMD_PIO_WRITE_EXT: - return HISI_SAS_SATA_PROTOCOL_PIO; + return HISI_SAS_SATA_PROTOCOL_PIO; case ATA_CMD_DSM: case ATA_CMD_DOWNLOAD_MICRO_DMA: @@ -64,7 +64,7 @@ u8 hisi_sas_get_ata_protocol(struct host_to_dev_fis *fis, int direction) case ATA_CMD_WRITE_LOG_DMA_EXT: case ATA_CMD_WRITE_STREAM_DMA_EXT: case ATA_CMD_ZAC_MGMT_IN: - return HISI_SAS_SATA_PROTOCOL_DMA; + return HISI_SAS_SATA_PROTOCOL_DMA; case ATA_CMD_CHK_POWER: case ATA_CMD_DEV_RESET: @@ -77,21 +77,21 @@ u8 hisi_sas_get_ata_protocol(struct host_to_dev_fis *fis, int direction) case ATA_CMD_STANDBY: case ATA_CMD_STANDBYNOW1: case ATA_CMD_ZAC_MGMT_OUT: - return HISI_SAS_SATA_PROTOCOL_NONDATA; + return HISI_SAS_SATA_PROTOCOL_NONDATA; default: { if (fis->command == ATA_CMD_SET_MAX) { switch (fis->features) { case ATA_SET_MAX_PASSWD: case ATA_SET_MAX_LOCK: - return HISI_SAS_SATA_PROTOCOL_PIO; + return HISI_SAS_SATA_PROTOCOL_PIO; case ATA_SET_MAX_PASSWD_DMA: case ATA_SET_MAX_UNLOCK_DMA: - return HISI_SAS_SATA_PROTOCOL_DMA; + return HISI_SAS_SATA_PROTOCOL_DMA; default: - return HISI_SAS_SATA_PROTOCOL_NONDATA; + return HISI_SAS_SATA_PROTOCOL_NONDATA; } } if (direction == DMA_NONE) diff --git a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c index 8dd0e6a6..520ba69 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c @@ -651,8 +651,10 @@ static int reset_hw_v1_hw(struct hisi_hba *hisi_hba) dev_err(dev, "De-reset failed\n"); return -EIO; } - } else + } else { dev_warn(dev, "no reset method\n"); + return -EIO; + } return 0; } diff --git a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c index 80fd4f4..02b77dc 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c @@ -1095,8 +1095,10 @@ static int reset_hw_v2_hw(struct hisi_hba *hisi_hba) dev_err(dev, "SAS de-reset fail.\n"); return -EIO; } - } else - dev_warn(dev, "no reset method\n"); + } else { + dev_err(dev, "no reset method\n"); + return -EIO; + } return 0; } @@ -2408,7 +2410,7 @@ static void slot_err_v2_hw(struct hisi_hba *hisi_hba, spin_lock_irqsave(_hba->lock, flags); hisi_sas_slot_task_free(hisi_hba, task, slot); spin_unlock_irqrestore(_hba->lock, flags); - return -1; + return ts->stat; } if (unlikely(!sas_dev)) { @@ -2667,7 +2669,7 @@ static int prep_abort_v2_hw(struct hisi_hba *hisi_hba, /* dw0 */ hdr->dw0 = cpu_to_le32((5
[PATCH v2 4/8] scsi: hisi_sas: fix the issue of setting linkrate register
From: Xiaofei TanIt is not right to set the register PROG_PHY_LINK_RATE while PHY is still enabled. So if we want to change PHY linkrate, we need to disable PHY before setting the register PROG_PHY_LINK_RATE, and then start-up PHY. This patch is to fix this issue. Signed-off-by: Xiaofei Tan Signed-off-by: John Garry --- drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 5 +++-- drivers/scsi/hisi_sas/hisi_sas_v2_hw.c | 5 +++-- drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c index 38bbda9..2eb8980 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c @@ -881,10 +881,11 @@ static void phy_set_linkrate_v1_hw(struct hisi_hba *hisi_hba, int phy_no, prog_phy_link_rate &= ~0xff; prog_phy_link_rate |= rate_mask; + disable_phy_v1_hw(hisi_hba, phy_no); + msleep(100); hisi_sas_phy_write32(hisi_hba, phy_no, PROG_PHY_LINK_RATE, prog_phy_link_rate); - - phy_hard_reset_v1_hw(hisi_hba, phy_no); + start_phy_v1_hw(hisi_hba, phy_no); } static int get_wideport_bitmap_v1_hw(struct hisi_hba *hisi_hba, int port_id) diff --git a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c index edd0c89..80fd4f4 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c @@ -1611,10 +1611,11 @@ static void phy_set_linkrate_v2_hw(struct hisi_hba *hisi_hba, int phy_no, prog_phy_link_rate &= ~0xff; prog_phy_link_rate |= rate_mask; + disable_phy_v2_hw(hisi_hba, phy_no); + msleep(100); hisi_sas_phy_write32(hisi_hba, phy_no, PROG_PHY_LINK_RATE, prog_phy_link_rate); - - phy_hard_reset_v2_hw(hisi_hba, phy_no); + start_phy_v2_hw(hisi_hba, phy_no); } static int get_wideport_bitmap_v2_hw(struct hisi_hba *hisi_hba, int port_id) diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c index 1ee95ab..8da9de7 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c @@ -1862,10 +1862,11 @@ static void phy_set_linkrate_v3_hw(struct hisi_hba *hisi_hba, int phy_no, prog_phy_link_rate &= ~0xff; prog_phy_link_rate |= rate_mask; + disable_phy_v3_hw(hisi_hba, phy_no); + msleep(100); hisi_sas_phy_write32(hisi_hba, phy_no, PROG_PHY_LINK_RATE, prog_phy_link_rate); - - phy_hard_reset_v3_hw(hisi_hba, phy_no); + start_phy_v3_hw(hisi_hba, phy_no); } static void interrupt_disable_v3_hw(struct hisi_hba *hisi_hba) -- 1.9.1
[PATCH v2 2/8] scsi: hisi_sas: support the property of signal attenuation for v2 hw
From: Xiaofei TanThe register SAS_PHY_CTRL is configured according to signal quality. The signal quality is calculated by signal attenuation of hardware physical link. It may be different for different PCB layout. So, in order to give better support to new board, this patch add support to reading the devicetree property, hisi-signal-attenuation. Of course, we still keep an default value in driver to adapt old board. Signed-off-by: Xiaofei Tan Signed-off-by: John Garry --- drivers/scsi/hisi_sas/hisi_sas_v2_hw.c | 39 +- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c index 4ccb61e..3a0b4ed 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c @@ -406,6 +406,17 @@ struct hisi_sas_err_record_v2 { __le32 dma_rx_err_type; }; +struct signal_attenuation_s { + u32 de_emphasis; + u32 preshoot; + u32 boost; +}; + +struct sig_atten_lu_s { + const struct signal_attenuation_s *att; + u32 sas_phy_ctrl; +}; + static const struct hisi_sas_hw_error one_bit_ecc_errors[] = { { .irq_msk = BIT(SAS_ECC_INTR_DQE_ECC_1B_OFF), @@ -1130,9 +1141,16 @@ static void phys_try_accept_stp_links_v2_hw(struct hisi_hba *hisi_hba) } } +static const struct signal_attenuation_s x6000 = {9200, 0, 10476}; +static const struct sig_atten_lu_s sig_atten_lu[] = { + { , 0x3016a68 }, +}; + static void init_reg_v2_hw(struct hisi_hba *hisi_hba) { struct device *dev = hisi_hba->dev; + u32 sas_phy_ctrl = 0x30b9908; + u32 signal[3]; int i; /* Global registers init */ @@ -1176,9 +1194,28 @@ static void init_reg_v2_hw(struct hisi_hba *hisi_hba) hisi_sas_write32(hisi_hba, AXI_AHB_CLK_CFG, 1); hisi_sas_write32(hisi_hba, HYPER_STREAM_ID_EN_CFG, 1); + /* Get sas_phy_ctrl value to deal with TX FFE issue. */ + if (!device_property_read_u32_array(dev, "hisi-signal-attenuation", + signal, ARRAY_SIZE(signal))) { + for (i = 0; i < ARRAY_SIZE(sig_atten_lu); i++) { + const struct sig_atten_lu_s *lookup = _atten_lu[i]; + const struct signal_attenuation_s *att = lookup->att; + + if ((signal[0] == att->de_emphasis) && + (signal[1] == att->preshoot) && + (signal[2] == att->boost)) { + sas_phy_ctrl = lookup->sas_phy_ctrl; + break; + } + } + + if (i == ARRAY_SIZE(sig_atten_lu)) + dev_warn(dev, "unknown signal attenuation values, using default PHY ctrl config\n"); + } + for (i = 0; i < hisi_hba->n_phy; i++) { hisi_sas_phy_write32(hisi_hba, i, PROG_PHY_LINK_RATE, 0x855); - hisi_sas_phy_write32(hisi_hba, i, SAS_PHY_CTRL, 0x30b9908); + hisi_sas_phy_write32(hisi_hba, i, SAS_PHY_CTRL, sas_phy_ctrl); hisi_sas_phy_write32(hisi_hba, i, SL_TOUT_CFG, 0x7d7d7d7d); hisi_sas_phy_write32(hisi_hba, i, SL_CONTROL, 0x0); hisi_sas_phy_write32(hisi_hba, i, TXID_AUTO, 0x2); -- 1.9.1
RE: [PATCH V3 1/8] scsi: hpsa: fix selection of reply queue
> -Original Message- > From: Laurence Oberman [mailto:lober...@redhat.com] > Sent: Friday, March 02, 2018 8:09 AM > To: Ming Lei> Cc: Don Brace ; Jens Axboe ; > linux-bl...@vger.kernel.org; Christoph Hellwig ; Mike > Snitzer ; linux-scsi@vger.kernel.org; Hannes Reinecke > ; Arun Easi ; Omar Sandoval > ; Martin K . Petersen ; James > Bottomley ; Christoph Hellwig > ; Kashyap Desai ; Peter Rivera > ; Meelis Roos > Subject: Re: [PATCH V3 1/8] scsi: hpsa: fix selection of reply queue > > EXTERNAL EMAIL > > > On Fri, 2018-03-02 at 10:16 +0800, Ming Lei wrote: > > On Thu, Mar 01, 2018 at 04:19:34PM -0500, Laurence Oberman wrote: > > > On Thu, 2018-03-01 at 14:01 -0500, Laurence Oberman wrote: > > > > On Thu, 2018-03-01 at 16:18 +, Don Brace wrote: > > > > > > -Original Message- > > > > > > From: Ming Lei [mailto:ming@redhat.com] > > > > > > Sent: Tuesday, February 27, 2018 4:08 AM > > > > > > To: Jens Axboe ; linux-bl...@vger.kernel.org > > > > > > ; > > > > > > Christoph > > > > > > Hellwig ; Mike Snitzer > > > > > > > > > > > > Cc: linux-scsi@vger.kernel.org; Hannes Reinecke > > > > > >; > > > > > > Arun Easi > > > > > > ; Omar Sandoval ; > > > > > > Martin K > > > > > > . > > > > > > Petersen ; James Bottomley > > > > > > ; Christoph Hellwig > > > > > ch@l > > > > > > st > > > > > > .de>; > > > > > > Don Brace ; Kashyap Desai > > > > > > ; Peter Rivera > > > > > dcom > > > > > > .c > > > > > > om>; > > > > > > Laurence Oberman ; Ming Lei > > > > > > ; Meelis Roos > > > > > > Subject: [PATCH V3 1/8] scsi: hpsa: fix selection of reply > > > > > > queue > > > > > > > > Seems Don run into IO failure without blk-mq, could you run your > > tests again > > in legacy mode? > > > > Thanks, > > Ming > > Hello Ming > I ran multiple passes on Legacy and still see no issues in my test bed > > BOOT_IMAGE=/vmlinuz-4.16.0-rc2.ming+ root=UUID=43f86d71-b1bf-4789- > a28e- > 21c6ddc90195 ro crashkernel=256M@64M log_buf_len=64M > console=ttyS1,115200n8 > > HEAD of the git kernel I am using > > 694e16f scsi: megaraid: improve scsi_mq performance via .host_tagset > 793686c scsi: hpsa: improve scsi_mq performance via .host_tagset > 60d5b36 block: null_blk: introduce module parameter of 'g_host_tags' > 8847067 scsi: Add template flag 'host_tagset' > a8fbdd6 blk-mq: introduce BLK_MQ_F_HOST_TAGS > 4710fab blk-mq: introduce 'start_tag' field to 'struct blk_mq_tags' > 09bb153 scsi: megaraid_sas: fix selection of reply queue > 52700d8 scsi: hpsa: fix selection of reply queue I checkout out Linus's tree (4.16.0-rc3+) and re-applied the above patches. I and have been running 24 hours with no issues. Evidently my forked copy was corrupted. So, my I/O testing has gone well. I'll run some performance numbers next. Thanks, Don
Re: [PATCH] scsi: sd: Keep disk read-only when re-reading partition
On Fri, Mar 02, 2018 at 02:11:02PM +, Jeremy Cline wrote: > Sure, I'll take care of it. Thanks a lot. Johannes -- Johannes Thumshirn Storage jthumsh...@suse.de+49 911 74053 689 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: Felix Imendörffer, Jane Smithard, Graham Norton HRB 21284 (AG Nürnberg) Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
Re: [PATCH] scsi: sd: Keep disk read-only when re-reading partition
On 03/02/2018 07:00 AM, Johannes Thumshirn wrote: > On Thu, Mar 01, 2018 at 02:08:10PM +, Jeremy Cline wrote: >> If the read-only flag is true on a SCSI disk, re-reading the partition >> table sets the flag back to false. >> >> To observe this bug, you can run: >> >> 1. blockdev --setro /dev/sda >> 2. blockdev --rereadpt /dev/sda >> 3. blockdev --getro /dev/sda > > hi Jeremy, > > Do you mind wiring up a testcase in blktest [1] for this? Given that > you already have a rather trivial reproducer. > > [1] https://github.com/osandov/ Hi Johannes, Sure, I'll take care of it. Regards, Jeremy
Re: [PATCH V3 1/8] scsi: hpsa: fix selection of reply queue
On Fri, 2018-03-02 at 10:16 +0800, Ming Lei wrote: > On Thu, Mar 01, 2018 at 04:19:34PM -0500, Laurence Oberman wrote: > > On Thu, 2018-03-01 at 14:01 -0500, Laurence Oberman wrote: > > > On Thu, 2018-03-01 at 16:18 +, Don Brace wrote: > > > > > -Original Message- > > > > > From: Ming Lei [mailto:ming@redhat.com] > > > > > Sent: Tuesday, February 27, 2018 4:08 AM > > > > > To: Jens Axboe; linux-bl...@vger.kernel.org > > > > > ; > > > > > Christoph > > > > > Hellwig ; Mike Snitzer > > > > > > > > > > Cc: linux-scsi@vger.kernel.org; Hannes Reinecke > > > > >; > > > > > Arun Easi > > > > > ; Omar Sandoval ; > > > > > Martin K > > > > > . > > > > > Petersen ; James Bottomley > > > > > ; Christoph Hellwig > > > > ch@l > > > > > st > > > > > .de>; > > > > > Don Brace ; Kashyap Desai > > > > > ; Peter Rivera > > > > dcom > > > > > .c > > > > > om>; > > > > > Laurence Oberman ; Ming Lei > > > > > ; Meelis Roos > > > > > Subject: [PATCH V3 1/8] scsi: hpsa: fix selection of reply > > > > > queue > > > > > > > > > > EXTERNAL EMAIL > > > > > > > > > > > > > > > From 84676c1f21 (genirq/affinity: assign vectors to all > > > > > possible > > > > > CPUs), > > > > > one msix vector can be created without any online CPU mapped, > > > > > then > > > > > one > > > > > command's completion may not be notified. > > > > > > > > > > This patch setups mapping between cpu and reply queue > > > > > according > > > > > to > > > > > irq > > > > > affinity info retrived by pci_irq_get_affinity(), and uses > > > > > this > > > > > mapping > > > > > table to choose reply queue for queuing one command. > > > > > > > > > > Then the chosen reply queue has to be active, and fixes IO > > > > > hang > > > > > caused > > > > > by using inactive reply queue which doesn't have any online > > > > > CPU > > > > > mapped. > > > > > > > > > > Cc: Hannes Reinecke > > > > > Cc: Arun Easi > > > > > Cc: "Martin K. Petersen" , > > > > > Cc: James Bottomley , > > > > > Cc: Christoph Hellwig , > > > > > Cc: Don Brace > > > > > Cc: Kashyap Desai > > > > > Cc: Peter Rivera > > > > > Cc: Laurence Oberman > > > > > Cc: Meelis Roos > > > > > Fixes: 84676c1f21e8 ("genirq/affinity: assign vectors to all > > > > > possible CPUs") > > > > > Signed-off-by: Ming Lei > > > > > > > > I am getting some issues that need to be tracked down: > > > > > > > > [ 1636.032984] hpsa :87:00.0: Acknowledging event: > > > > 0xc032 > > > > (HP > > > > SSD Smart Path configuration change) > > > > [ 1638.510656] hpsa :87:00.0: scsi 3:0:8:0: updated Direct- > > > > Access HP MO0400JDVEU PHYS DRV SSDSmartPathCap- > > > > En- > > > > Exp=0 > > > > [ 1653.967695] hpsa :87:00.0: Acknowledging event: > > > > 0x8020 > > > > (HP > > > > SSD Smart Path configuration change) > > > > [ 1656.770377] hpsa :87:00.0: scsi 3:0:8:0: updated Direct- > > > > Access HP MO0400JDVEU PHYS DRV SSDSmartPathCap- > > > > En- > > > > Exp=0 > > > > [ 2839.762267] hpsa :87:00.0: Acknowledging event: > > > > 0x8020 > > > > (HP > > > > SSD Smart Path configuration change) > > > > [ 2840.841290] hpsa :87:00.0: scsi 3:0:8:0: updated Direct- > > > > Access HP MO0400JDVEU PHYS DRV SSDSmartPathCap- > > > > En- > > > > Exp=0 > > > > [ 2917.582653] hpsa :87:00.0: Acknowledging event: > > > > 0xc020 > > > > (HP > > > > SSD Smart Path configuration change) > > > > [ 2919.087191] hpsa :87:00.0: scsi 3:1:0:1: updated Direct- > > > > Access HP LOGICAL VOLUME RAID-5 SSDSmartPathCap+ > > > > En+ > > > > Exp=1 > > > > [ 2919.142527] hpsa :87:00.0: hpsa_figure_phys_disk_ptrs: > > > > [3:1:0:2] A phys disk component of LV is missing, turning off > > > > offload_enabled for LV. > > > > [ 2919.203915] hpsa :87:00.0: hpsa_figure_phys_disk_ptrs: > > > > [3:1:0:2] A phys disk component of LV is missing, turning off > > > > offload_enabled for LV. > > > > [ 2919.266921] hpsa :87:00.0: hpsa_figure_phys_disk_ptrs: > > > > [3:1:0:2] A phys disk component of LV is missing, turning off > > > > offload_enabled for LV. > > > > [ 2934.999629] hpsa :87:00.0: Acknowledging event: > > > > 0x4000 > > > > (HP > > > > SSD Smart Path state change) > > > > [ 2936.937333] hpsa :87:00.0: hpsa_figure_phys_disk_ptrs: > > > > [3:1:0:2] A phys disk component of LV is missing, turning off > > > > offload_enabled for LV. > > > > [ 2936.998707]
[Bug 198975] New: Highpoint 840A RocketRAID Controller and drives are NOT detected by SCSI_HPTIOP kernel module
https://bugzilla.kernel.org/show_bug.cgi?id=198975 Bug ID: 198975 Summary: Highpoint 840A RocketRAID Controller and drives are NOT detected by SCSI_HPTIOP kernel module Product: SCSI Drivers Version: 2.5 Kernel Version: 4.15.7 Hardware: All OS: Linux Tree: Mainline Status: NEW Severity: high Priority: P1 Component: Other Assignee: scsi_drivers-ot...@kernel-bugs.osdl.org Reporter: mae.lipp...@gmail.com Regression: No Hello, This is my first kernel bugzilla report, so please have mercy ;-) My freshly bought Highpoint 840A RocketRAID Controller and its 8 connected "Samsung 860 EVO" ssd harddrives are NOT detected by the "SCSI_HPTIOP" kernel low-level scsi driver module, but it seems to be the smaller brother of the already from kernel supported 3740A RocketRAID controller by Highpoint. The only differnence seems to be that the 840A supports only 6Gb/s per channel. Thats is also confirmed by the top down view onto the expansion card. In the upper right corner you can see the described dual product markings "RocketRAID 3740A/840A", so the layout and most likely also the raid processor of the controller has been used at least twice by Highpoint. My controllers firmware is the recent 1.0.0 version. I couldnt find any other driver module that is matching my controller more closely. The current published linux drivers by highpoint are useless under (Gentoo) Linux. The controller and its connected drives are working flawlessy under Windows 10, so its not damaged. I am using a "Gigabyte X99-SLI" motherboard with recent F24a bios version. I am also willingly able to provide regular dump logs to kernel developers for driver debugging. I would be VERY thankful for including support into the next kernel for this cool piece of hardware! Top-down view onto the expansion card: https://www.bhphotovideo.com/images/images1000x1000/highpoint_rocketraid_3740a_12gb_s_pcie_1269779.jpg dmesg outputs only this, then nothing else related to my controller: RocketRAID 3xxx/4xxx Controller driver v1.10.0 lspci -kvv outputs this: 02:00.0 RAID bus controller: HighPoint Technologies, Inc. Device 0840 (rev a1) Subsystem: HighPoint Technologies, Inc. Device Physical Slot: 6 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- http://www.highpoint-tech.com/USA_new/series-rr800-overview.htm Highpoints 3700er series RocketRAID website: http://www.highpoint-tech.com/USA_new/series-rr3700-overview.htm -- You are receiving this mail because: You are watching the assignee of the bug.
Re: [PATCH] scsi: sd: Keep disk read-only when re-reading partition
On Thu, Mar 01, 2018 at 02:08:10PM +, Jeremy Cline wrote: > If the read-only flag is true on a SCSI disk, re-reading the partition > table sets the flag back to false. > > To observe this bug, you can run: > > 1. blockdev --setro /dev/sda > 2. blockdev --rereadpt /dev/sda > 3. blockdev --getro /dev/sda hi Jeremy, Do you mind wiring up a testcase in blktest [1] for this? Given that you already have a rather trivial reproducer. [1] https://github.com/osandov/ Thanks, Johannes -- Johannes Thumshirn Storage jthumsh...@suse.de+49 911 74053 689 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: Felix Imendörffer, Jane Smithard, Graham Norton HRB 21284 (AG Nürnberg) Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
Re: [PATCH] mvsas: fix wrong endianness of sgpio api
Hello Martin, Thanks, and I promise to keep on working hard on not falling over my own feet doing a git send-email! Am 02.03.18 um 03:09 schrieb Martin K. Petersen: Wilfried, This patch fixes the byte order of the SGPIO api and brings it back in sync with ledmon v0.80 and above. The patch was missing your Signed-off-by: tag. I added it and applied patch to 4.17/scsi-queue.
Re: [PATCH 1/8] dt-bindings: scsi: hisi_sas: add an property of signal attenuation
On 01/03/2018 21:40, Rob Herring wrote: On Tue, Feb 20, 2018 at 03:13:24AM +0800, John Garry wrote: From: Xiaofei TanFor some new boards with hip07 chipset we are required to set PHY config registers differently. The hw property which determines how to set these registers is in the PHY signal attenuation readings. This patch add an devicetree property, signal-attenuation, which is used to describe the signal attenuation of an board. Cc: Rob Herring Cc: Mark Rutland Signed-off-by: Xiaofei Tan Signed-off-by: John Garry --- Documentation/devicetree/bindings/scsi/hisilicon-sas.txt | 7 +++ 1 file changed, 7 insertions(+) diff --git a/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt b/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt index df3bef7..bd32ecd 100644 --- a/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt +++ b/Documentation/devicetree/bindings/scsi/hisilicon-sas.txt @@ -53,6 +53,13 @@ Main node required properties: Optional main node properties: - hip06-sas-v2-quirk-amt : when set, indicates that the v2 controller has the "am-max-transmissions" limitation. + - signal-attenuation : array of 3 32-bit values, containing de-emphasis, Needs a vendor prefix. Fine, I can add it. It's going to be "hisilicon-signal-attenuation" or similar. Thanks, John + preshoot, and boost attenuation readings for the board. They + are used to describe the signal attenuation of the board. These + values' range is 7600 to 12400, and used to represent -24dB to + 24dB. + The formula is "y = (x-1)/1". For example, 10478 + means 4.78dB. Example: sas0: sas@c100 { -- 1.9.1 .
[PATCH v1] scsi: ufs: add 2 lane support
From: Venkat GopalakrishnanQcom ufs controller v3.1.0 supports 2 lanes, add support to configure 2 lanes during phy initialization. Signed-off-by: Venkat Gopalakrishnan Signed-off-by: Subhash Jadavani Signed-off-by: Can Guo --- drivers/scsi/ufs/ufs-qcom.c | 20 +--- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c index 2b38db2..51889ad 100644 --- a/drivers/scsi/ufs/ufs-qcom.c +++ b/drivers/scsi/ufs/ufs-qcom.c @@ -113,10 +113,10 @@ static void ufs_qcom_disable_lane_clks(struct ufs_qcom_host *host) if (!host->is_lane_clks_enabled) return; - if (host->hba->lanes_per_direction > 1) + if (host->tx_l1_sync_clk) clk_disable_unprepare(host->tx_l1_sync_clk); clk_disable_unprepare(host->tx_l0_sync_clk); - if (host->hba->lanes_per_direction > 1) + if (host->rx_l1_sync_clk) clk_disable_unprepare(host->rx_l1_sync_clk); clk_disable_unprepare(host->rx_l0_sync_clk); @@ -147,18 +147,15 @@ static int ufs_qcom_enable_lane_clks(struct ufs_qcom_host *host) if (err) goto disable_tx_l0; - err = ufs_qcom_host_clk_enable(dev, "tx_lane1_sync_clk", - host->tx_l1_sync_clk); - if (err) - goto disable_rx_l1; + /* The tx lane1 clk could be muxed, hence keep this optional */ + if (host->tx_l1_sync_clk) + ufs_qcom_host_clk_enable(dev, "tx_lane1_sync_clk", +host->tx_l1_sync_clk); } host->is_lane_clks_enabled = true; goto out; -disable_rx_l1: - if (host->hba->lanes_per_direction > 1) - clk_disable_unprepare(host->rx_l1_sync_clk); disable_tx_l0: clk_disable_unprepare(host->tx_l0_sync_clk); disable_rx_l0: @@ -189,8 +186,9 @@ static int ufs_qcom_init_lane_clks(struct ufs_qcom_host *host) if (err) goto out; - err = ufs_qcom_host_clk_get(dev, "tx_lane1_sync_clk", - >tx_l1_sync_clk); + /* The tx lane1 clk could be muxed, hence keep this optional */ + ufs_qcom_host_clk_get(dev, "tx_lane1_sync_clk", + >tx_l1_sync_clk); } out: return err; -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project