1. 11 1月, 2018 35 次提交
  2. 09 1月, 2018 5 次提交
    • J
      scsi: libsas: use flush_workqueue to process disco events synchronously · 517e5153
      Jason Yan 提交于
      Now we are processing sas event and discover event in different
      workqueues.  It's safe to wait the discover event done in the sas event
      work. Use flush_workqueue() to insure the disco and revalidate events
      processed synchronously so that the whole discover and revalidate
      process will not be interrupted by other events.
      Signed-off-by: NJason Yan <yanaijie@huawei.com>
      CC: John Garry <john.garry@huawei.com>
      CC: Johannes Thumshirn <jthumshirn@suse.de>
      CC: Ewan Milne <emilne@redhat.com>
      CC: Christoph Hellwig <hch@lst.de>
      CC: Tomas Henzl <thenzl@redhat.com>
      CC: Dan Williams <dan.j.williams@intel.com>
      Reviewed-by: NHannes Reinecke <hare@suse.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      517e5153
    • J
      scsi: libsas: Use new workqueue to run sas event and disco event · 93bdbd06
      Jason Yan 提交于
      Now all libsas works are queued to scsi host workqueue, include sas
      event work post by LLDD and sas discovery work, and a sas hotplug flow
      may be divided into several works, e.g libsas receive a
      PORTE_BYTES_DMAED event, currently we process it as following steps:
      
      sas_form_port  --- run in work in shost workq
      	sas_discover_domain  --- run in another work in shost workq
      		...
      		sas_probe_devices  --- run in new work in shost workq
      We found during hot-add a device, libsas may need run several
      works in same workqueue to add device in system, the process is
      not atomic, it may interrupt by other sas event works, like
      PHYE_LOSS_OF_SIGNAL.
      
      This patch is preparation of execute libsas sas event in sync. We need
      to use different workqueue to run sas event and disco event. Otherwise
      the work will be blocked for waiting another chained work in the same
      workqueue.
      Signed-off-by: NYijing Wang <wangyijing@huawei.com>
      CC: John Garry <john.garry@huawei.com>
      CC: Johannes Thumshirn <jthumshirn@suse.de>
      CC: Ewan Milne <emilne@redhat.com>
      CC: Christoph Hellwig <hch@lst.de>
      CC: Tomas Henzl <thenzl@redhat.com>
      CC: Dan Williams <dan.j.williams@intel.com>
      Signed-off-by: NJason Yan <yanaijie@huawei.com>
      Reviewed-by: NHannes Reinecke <hare@suse.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      93bdbd06
    • J
      scsi: libsas: make the event threshold configurable · 8eea9dd8
      Jason Yan 提交于
      Add a sysfs attr that LLDD can configure it for every host. We made an
      example in hisi_sas. Other LLDDs using libsas can implement it if they
      want.
      Suggested-by: NHannes Reinecke <hare@suse.com>
      Signed-off-by: NJason Yan <yanaijie@huawei.com>
      CC: John Garry <john.garry@huawei.com>
      CC: Johannes Thumshirn <jthumshirn@suse.de>
      CC: Ewan Milne <emilne@redhat.com>
      CC: Christoph Hellwig <hch@lst.de>
      CC: Tomas Henzl <thenzl@redhat.com>
      CC: Dan Williams <dan.j.williams@intel.com>
      Acked-by: John Garry <john.garry@huawei.com> #for hisi_sas part
      Reviewed-by: NHannes Reinecke <hare@suse.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      8eea9dd8
    • J
      scsi: libsas: shut down the PHY if events reached the threshold · f12486e0
      Jason Yan 提交于
      If the PHY burst too many events, we will alloc a lot of events for the
      worker. This may leads to memory exhaustion.
      
      Dan Williams suggested to shut down the PHY if the events reached the
      threshold, because in this case the PHY may have gone into some
      erroneous state. Users can re-enable the PHY by sysfs if they want.
      
      We cannot use the fixed memory pool because if we run out of events, the
      shut down event and loss of signal event will lost too. The events still
      need to be allocated and processed in this case.
      Suggested-by: NDan Williams <dan.j.williams@intel.com>
      Signed-off-by: NJason Yan <yanaijie@huawei.com>
      CC: John Garry <john.garry@huawei.com>
      CC: Johannes Thumshirn <jthumshirn@suse.de>
      CC: Ewan Milne <emilne@redhat.com>
      CC: Christoph Hellwig <hch@lst.de>
      CC: Tomas Henzl <thenzl@redhat.com>
      Reviewed-by: NHannes Reinecke <hare@suse.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      f12486e0
    • J
      scsi: libsas: Use dynamic alloced work to avoid sas event lost · 1c393b97
      Jason Yan 提交于
      Now libsas hotplug work is static, every sas event type has its own
      static work, LLDD driver queues the hotplug work into shost->work_q.  If
      LLDD driver burst posts lots hotplug events to libsas, the hotplug
      events may pending in the workqueue like
      
      shost->work_q
      new work[PORTE_BYTES_DMAED] --> |[PHYE_LOSS_OF_SIGNAL][PORTE_BYTES_DMAED] -> processing
                                      |<-------wait worker to process-------->|
      
      In this case, a new PORTE_BYTES_DMAED event coming, libsas try to queue
      it to shost->work_q, but this work is already pending, so it would be
      lost. Finally, libsas delete the related sas port and sas devices, but
      LLDD driver expect libsas add the sas port and devices(last sas event).
      
      This patch use dynamic allocated work to avoid this issue.
      Signed-off-by: NYijing Wang <wangyijing@huawei.com>
      CC: John Garry <john.garry@huawei.com>
      CC: Johannes Thumshirn <jthumshirn@suse.de>
      CC: Ewan Milne <emilne@redhat.com>
      CC: Christoph Hellwig <hch@lst.de>
      CC: Tomas Henzl <thenzl@redhat.com>
      CC: Dan Williams <dan.j.williams@intel.com>
      Reviewed-by: NHannes Reinecke <hare@suse.com>
      Signed-off-by: NJason Yan <yanaijie@huawei.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      1c393b97