lkml.org 
[lkml]   [2018]   [May]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 52/62] nvme: add quirk to force medium priority for SQ creation
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jens Axboe <axboe@kernel.dk>

    commit 9abd68ef454c824bfd18629033367b4382b5f390 upstream.

    Some P3100 drives have a bug where they think WRRU (weighted round robin)
    is always enabled, even though the host doesn't set it. Since they think
    it's enabled, they also look at the submission queue creation priority. We
    used to set that to MEDIUM by default, but that was removed in commit
    81c1cd98351b. This causes various issues on that drive. Add a quirk to
    still set MEDIUM priority for that controller.

    Fixes: 81c1cd98351b ("nvme/pci: Don't set reserved SQ create flags")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Keith Busch <keith.busch@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/nvme/host/nvme.h | 5 +++++
    drivers/nvme/host/pci.c | 12 +++++++++++-
    2 files changed, 16 insertions(+), 1 deletion(-)

    --- a/drivers/nvme/host/nvme.h
    +++ b/drivers/nvme/host/nvme.h
    @@ -80,6 +80,11 @@ enum nvme_quirks {
    * Supports the LighNVM command set if indicated in vs[1].
    */
    NVME_QUIRK_LIGHTNVM = (1 << 6),
    +
    + /*
    + * Set MEDIUM priority on SQ creation
    + */
    + NVME_QUIRK_MEDIUM_PRIO_SQ = (1 << 7),
    };

    /*
    --- a/drivers/nvme/host/pci.c
    +++ b/drivers/nvme/host/pci.c
    @@ -947,10 +947,19 @@ static int adapter_alloc_cq(struct nvme_
    static int adapter_alloc_sq(struct nvme_dev *dev, u16 qid,
    struct nvme_queue *nvmeq)
    {
    + struct nvme_ctrl *ctrl = &dev->ctrl;
    struct nvme_command c;
    int flags = NVME_QUEUE_PHYS_CONTIG;

    /*
    + * Some drives have a bug that auto-enables WRRU if MEDIUM isn't
    + * set. Since URGENT priority is zeroes, it makes all queues
    + * URGENT.
    + */
    + if (ctrl->quirks & NVME_QUIRK_MEDIUM_PRIO_SQ)
    + flags |= NVME_SQ_PRIO_MEDIUM;
    +
    + /*
    * Note: we (ab)use the fact the the prp fields survive if no data
    * is attached to the request.
    */
    @@ -2523,7 +2532,8 @@ static const struct pci_device_id nvme_i
    .driver_data = NVME_QUIRK_STRIPE_SIZE |
    NVME_QUIRK_DEALLOCATE_ZEROES, },
    { PCI_VDEVICE(INTEL, 0xf1a5), /* Intel 600P/P3100 */
    - .driver_data = NVME_QUIRK_NO_DEEPEST_PS },
    + .driver_data = NVME_QUIRK_NO_DEEPEST_PS |
    + NVME_QUIRK_MEDIUM_PRIO_SQ },
    { PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */
    .driver_data = NVME_QUIRK_IDENTIFY_CNS, },
    { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */

    \
     
     \ /
      Last update: 2018-05-14 09:16    [W:4.149 / U:0.276 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site