View Issue Details

IDProjectCategoryView StatusLast Update
0001223channel: elrepo/el7--elrepo--request-for-enhancement--public2022-06-21 19:06
Reportersvreid Assigned Topperry  
PrioritynormalSeverityminorReproducibilityN/A
Status assignedResolutionopen 
Summary0001223: Would like to request kmod for NVMe drivers
DescriptionWould it be possible to provide the latest NVMe drivers as a kmod? The version included with EL7 isn't able to detect devices that are visible under EL8. Thanks!
TagsNo tags attached.
Reported upstream

Activities

pperry

2022-05-19 18:33

administrator   ~0008353

Please can you provide more information. I must admit I don't know much about nvme drivers - I have 2 x NVMe drives on rhel7 and they just work.

What is the driver in question - presumably nvme and nvme_core? Or at least that's what's loaded on my rhel7 machine:

# lsmod | grep -i nvme
nvme 32382 2
nvme_core 63547 5 nvme

Also it would be useful to show examples of hardware that is supported in rhel8 but not rhel7.

A cursory look at the supported hardware (with modinfo) for rhel7 vs rhel8, there are certainly more devices listed:

RHEL7:
alias: pci:v*d*sv*sd*bc01sc08i02*
alias: pci:v00001E0Fd00000007sv00001028sd*bc*sc*i*
alias: pci:v0000144Dd0000A824sv00001028sd*bc*sc*i*
alias: pci:v0000144Dd0000A822sv*sd*bc*sc*i*
alias: pci:v0000144Dd0000A821sv*sd*bc*sc*i*
alias: pci:v00001C5Fd00000540sv*sd*bc*sc*i*
alias: pci:v00001C58d00000023sv*sd*bc*sc*i*
alias: pci:v00001C58d00000003sv*sd*bc*sc*i*
alias: pci:v00001BB1d00000100sv*sd*bc*sc*i*
alias: pci:v00008086d00005845sv*sd*bc*sc*i*
alias: pci:v00008086d0000F1A6sv*sd*bc*sc*i*
alias: pci:v00008086d0000F1A5sv*sd*bc*sc*i*
alias: pci:v00008086d00000A55sv*sd*bc*sc*i*
alias: pci:v00008086d00000A54sv*sd*bc*sc*i*
alias: pci:v00008086d00000A53sv*sd*bc*sc*i*
alias: pci:v00008086d00000953sv*sd*bc*sc*i*

RHEL8:
alias: pci:v*d*sv*sd*bc01sc08i02*
alias: pci:v0000106Bd00002005sv*sd*bc*sc*i*
alias: pci:v0000106Bd00002003sv*sd*bc*sc*i*
alias: pci:v0000106Bd00002001sv*sd*bc*sc*i*
alias: pci:v00001D0Fd0000CD02sv*sd*bc*sc*i*
alias: pci:v00001D0Fd0000CD01sv*sd*bc*sc*i*
alias: pci:v00001D0Fd0000CD00sv*sd*bc*sc*i*
alias: pci:v00001D0Fd00008061sv*sd*bc*sc*i*
alias: pci:v00001D0Fd00000065sv*sd*bc*sc*i*
alias: pci:v00001D0Fd00000061sv*sd*bc*sc*i*
alias: pci:v00002646d00002263sv*sd*bc*sc*i*
alias: pci:v00002646d00002262sv*sd*bc*sc*i*
alias: pci:v00001D97d00002263sv*sd*bc*sc*i*
alias: pci:v000015B7d00002001sv*sd*bc*sc*i*
alias: pci:v00001C5Cd00001504sv*sd*bc*sc*i*
alias: pci:v00001CC1d00008201sv*sd*bc*sc*i*
alias: pci:v000010ECd00005762sv*sd*bc*sc*i*
alias: pci:v00001D1Dd00002601sv*sd*bc*sc*i*
alias: pci:v00001D1Dd00002807sv*sd*bc*sc*i*
alias: pci:v00001D1Dd00001F1Fsv*sd*bc*sc*i*
alias: pci:v00001B4Bd00001092sv*sd*bc*sc*i*
alias: pci:v00001987d00005016sv*sd*bc*sc*i*
alias: pci:v0000144Dd0000A822sv*sd*bc*sc*i*
alias: pci:v0000144Dd0000A821sv*sd*bc*sc*i*
alias: pci:v00001C5Fd00000540sv*sd*bc*sc*i*
alias: pci:v00001C58d00000023sv*sd*bc*sc*i*
alias: pci:v00001C58d00000003sv*sd*bc*sc*i*
alias: pci:v00001BB1d00000100sv*sd*bc*sc*i*
alias: pci:v0000126Fd00002263sv*sd*bc*sc*i*
alias: pci:v00008086d00005845sv*sd*bc*sc*i*
alias: pci:v00008086d0000F1A6sv*sd*bc*sc*i*
alias: pci:v00008086d0000F1A5sv*sd*bc*sc*i*
alias: pci:v00008086d00000A55sv*sd*bc*sc*i*
alias: pci:v00008086d00000A54sv*sd*bc*sc*i*
alias: pci:v00008086d00000A53sv*sd*bc*sc*i*
alias: pci:v00008086d00000953sv*sd*bc*sc*i*

pperry

2022-05-19 18:48

administrator   ~0008354

Something I have come across before, but it may be more an issue that the device is not detected (but is supported) so the nvme driver isn't automatically loaded and hence is not in the initramfs image. The solution may be as simple as forcing the nvme driver to load with a dracut conf file containing:

add_drivers+=" nvme "

Are you able to load the nvme module with modprobe and then see if the device is visible, or is it genuinely a case that some devices are not supported by the nvme driver?

A couple of references:
https://bugzilla.redhat.com/show_bug.cgi?id=910734
https://bugzilla.redhat.com/show_bug.cgi?id=1368828

svreid

2022-05-19 19:17

reporter   ~0008355

Here's what I see when I have CentOS 8 running:
# lsmod | grep -i nvm
nvme 45056 6
name_core 114688 7 nvme
t10_p1 15384 2 sd_mod, nvme_core

I don't have the machine at my disposal to try your other suggestions at the moment. My ability to test for SL 7 is limited as I need to be able to see the NVMe disks to install the OS, but have not been able to see them when attempting to install or using a live image earlier than CentOS 8.

svreid

2022-06-01 15:59

reporter   ~0008382

lspci identities the device as "Raid Bus Controller: Intel Corporation Volume Management Device MNVe Raid Controller (rev 04)
Under CentOS 7.9 I loaded NVMe with modprobe, but was still unable to see the device. It does show up in lspci, but the associated volumes aren't visible (they are under CentOS 8).

jcpunk

2022-06-21 11:01

reporter   ~0008436

Detailed `lspci -vv`

64:00.5 RAID bus controller: Intel Corporation Volume Management Device NVMe RAID Controller (rev 04)
    Subsystem: Intel Corporation Device 0000
    Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0, Cache Line Size: 64 bytes
    NUMA node: 0
    Region 0: Memory at 213ffc000000 (64-bit, prefetchable) [size=32M]
    Region 2: Memory at c2000000 (32-bit, non-prefetchable) [size=32M]
    Region 4: Memory at 213ffff00000 (64-bit, non-prefetchable) [size=1M]
    Capabilities: [80] MSI-X: Enable- Count=64 Masked-
        Vector table: BAR=4 offset=00000000
        PBA: BAR=4 offset=00001000
    Capabilities: [90] Express (v2) Root Complex Integrated Endpoint, MSI 00
        DevCap: MaxPayload 128 bytes, PhantFunc 0
            ExtTag- RBE-
        DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
            RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
            MaxPayload 128 bytes, MaxReadReq 128 bytes
        DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
        DevCap2: Completion Timeout: Not Supported, TimeoutDis-, LTR-, OBFF Not Supported
        DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
    Capabilities: [e0] Power Management version 3
        Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
        Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-

jcpunk

2022-06-21 11:52

reporter   ~0008437

With the 5.14-lt kernel:

0000:64:00.5 RAID bus controller: Intel Corporation Volume Management Device NVMe RAID Controller (rev 04)
    Subsystem: Intel Corporation Device 0000
    Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0, Cache Line Size: 64 bytes
    NUMA node: 0
    Region 0: Memory at 213ffc000000 (64-bit, prefetchable) [size=32M]
    Region 2: Memory at c2000000 (32-bit, non-prefetchable) [size=32M]
    Region 4: Memory at 213ffff00000 (64-bit, non-prefetchable) [size=1M]
    Capabilities: [80] MSI-X: Enable+ Count=64 Masked-
        Vector table: BAR=4 offset=00000000
        PBA: BAR=4 offset=00001000
    Capabilities: [90] Express (v2) Root Complex Integrated Endpoint, MSI 00
        DevCap: MaxPayload 128 bytes, PhantFunc 0
            ExtTag- RBE-
        DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
            RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
            MaxPayload 128 bytes, MaxReadReq 128 bytes
        DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
        DevCap2: Completion Timeout: Not Supported, TimeoutDis-, LTR-, OBFF Not Supported
        DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
    Capabilities: [e0] Power Management version 3
        Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
        Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
    Kernel driver in use: vmd
    Kernel modules: vmd

jcpunk

2022-06-21 12:01

reporter   ~0008438

Based on this, I'm thinking this hardware will need a new `vmd.ko` via `./drivers/pci/controller/vmd.c`

toracat

2022-06-21 14:02

administrator   ~0008439

Thanks, @jcpunk, for the notes. Looks like vmd.c first appeared in kernel-4.18. Not sure how hard/easy it is to backport to el7 (kernel-3.10).

pperry

2022-06-21 19:04

administrator   ~0008443

Last edited: 2022-06-21 19:05

@jcpunk thanks for the extra info.

Having reviewed VMD, it would appear VMD is compiled into the kernel for all RHEL releases RHEL7 through to RHEL9. Therefore I do not believe we can backport a vmd.ko module and use that to override what is already built into the RHEL kernel.

CONFIG_VMD=y

So this doesn't look like something we can fix with a kmod release. The solution would appear to be a custom kernel with the appropriate hardware support.

toracat

2022-06-21 19:06

administrator   ~0008444

In fact, In el7, vmc.c is in a different location: arch/x86/pci/vmd.c.

Issue History

Date Modified Username Field Change
2022-05-19 15:53 svreid New Issue
2022-05-19 15:53 svreid Status new => assigned
2022-05-19 15:53 svreid Assigned To => stindall
2022-05-19 15:56 burakkucat Assigned To stindall => toracat
2022-05-19 15:56 burakkucat Category --elrepo--OTHER-- => --elrepo--request-for-enhancement--
2022-05-19 15:57 burakkucat Reproducibility have not tried => N/A
2022-05-19 18:33 pperry Note Added: 0008353
2022-05-19 18:48 pperry Note Added: 0008354
2022-05-19 18:50 pperry Assigned To toracat => pperry
2022-05-19 19:17 svreid Note Added: 0008355
2022-06-01 15:59 svreid Note Added: 0008382
2022-06-21 11:01 jcpunk Note Added: 0008436
2022-06-21 11:52 jcpunk Note Added: 0008437
2022-06-21 12:01 jcpunk Note Added: 0008438
2022-06-21 14:02 toracat Note Added: 0008439
2022-06-21 19:04 pperry Note Added: 0008443
2022-06-21 19:05 pperry Note Edited: 0008443
2022-06-21 19:06 toracat Note Added: 0008444