mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-11-07 04:36:52 -10:00
nvme: drop the S3X single-outstanding-I/O quirk
The quirk's 8KB transfer clamp exposed raw character-device I/O to the oversized-mapping stall fixed earlier, and its single tracker turned a stranded request into a complete I/O stall. Without it an S3X controller runs 128 trackers at its MDTS-derived transfer size with no retries, failures, or timeouts, at about seven times the serialized throughput. Reviewed by: imp, adrian, ngie Approved by: ngie (co-mentor) Differential Revision: https://reviews.freebsd.org/D59156
This commit is contained in:
1 parent
764761d316
commit
e6fc1765bd
3 files changed
+1
-7
No files matched your search
@@ -201,8 +201,6 @@ nvme_ctrlr_construct_io_qpairs(struct nvme_controller *ctrlr)
|
||||
if (ctrlr->quirks & QUIRK_APPLE_SHARED_CID_SPACE)
|
||||
num_trackers = min(num_trackers,
|
||||
NVME_ADMIN_ENTRIES - ctrlr->adminq.num_trackers);
|
||||
if (ctrlr->quirks & QUIRK_APPLE_S3X_SERIALIZE)
|
||||
num_trackers = 1;
|
||||
|
||||
/*
|
||||
* Our best estimate for the maximum number of I/Os that we should
|
||||
@@ -538,8 +536,6 @@ nvme_ctrlr_identify(struct nvme_controller *ctrlr)
|
||||
ctrlr->max_xfer_size = min(ctrlr->max_xfer_size,
|
||||
1 << (ctrlr->cdata.mdts + NVME_MPS_SHIFT +
|
||||
NVME_CAP_HI_MPSMIN(ctrlr->cap_hi)));
|
||||
if (ctrlr->quirks & QUIRK_APPLE_S3X_SERIALIZE)
|
||||
ctrlr->max_xfer_size = min(ctrlr->max_xfer_size, 8192U);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -99,8 +99,7 @@ static struct _pcsid
|
||||
{ 0x07f015ad, 0, 0, "VMware NVMe Controller" },
|
||||
{ 0x2003106b, 0, 0, "Apple S3X NVMe Controller",
|
||||
QUIRK_APPLE_NO_ASYNC_EVENT | QUIRK_APPLE_S3X_NS1_ONLY |
|
||||
QUIRK_PCIE_FLR_ON_FATAL | QUIRK_APPLE_S3X_SERIALIZE |
|
||||
QUIRK_IGNORE_RAB },
|
||||
QUIRK_PCIE_FLR_ON_FATAL | QUIRK_IGNORE_RAB },
|
||||
{ 0x2005106b, 0, 0, "Apple ANS2 NVMe Controller (T2)",
|
||||
QUIRK_APPLE_IDENTIFY_CNS_BROKEN | QUIRK_APPLE_SHARED_CID_SPACE |
|
||||
QUIRK_APPLE_NO_ASYNC_EVENT | QUIRK_APPLE_SINGLE_VECTOR |
|
||||
|
||||
@@ -248,7 +248,6 @@ struct nvme_controller {
|
||||
#define QUIRK_APPLE_S3X_NS1_ONLY 0x200 /* Ignore Apple-internal namespace 2 */
|
||||
#define QUIRK_APPLE_128_BYTE_SQES 0x400 /* T2 uses 128-byte I/O SQEs */
|
||||
#define QUIRK_PCIE_FLR_ON_FATAL 0x800 /* Use FLR for a fatal controller */
|
||||
#define QUIRK_APPLE_S3X_SERIALIZE 0x1000 /* One S3X I/O at a time */
|
||||
#define QUIRK_IGNORE_RAB 0x2000 /* Don't configure AB from RAB */
|
||||
|
||||
/* Values programmed into CC.IOSQES (log2 of the SQE size in bytes). */
|
||||
|
||||
Reference in new issue
Block a user