nvme: read all uevents
Currently when the uevent processing code finds a non-uio/vfio uevent, it just stops its loops and returns. This means that if there are a lot of non-uio/vfio uevents, the netlink socket buffer can build up until its full because only one non-uio/vfio event gets drained per spdk_nvme_probe() call (which may be very infrequently). So modify parse_event so that it does not indicate error when a non-uio/vfio event is found. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: Ic8a40f71ee89d597ce46129eac889fe5b7ef5171 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3876 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
parent
79f508b047
commit
178291a516
@ -144,9 +144,7 @@ parse_event(const char *buf, struct spdk_uevent *event)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
spdk_pci_addr_fmt(event->traddr, sizeof(event->traddr), &pci_addr);
|
spdk_pci_addr_fmt(event->traddr, sizeof(event->traddr), &pci_addr);
|
||||||
return 1;
|
} else if (!strncmp(driver, "vfio-pci", 8)) {
|
||||||
}
|
|
||||||
if (!strncmp(driver, "vfio-pci", 8)) {
|
|
||||||
struct spdk_pci_addr pci_addr;
|
struct spdk_pci_addr pci_addr;
|
||||||
|
|
||||||
event->subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_VFIO;
|
event->subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_VFIO;
|
||||||
@ -161,10 +159,11 @@ parse_event(const char *buf, struct spdk_uevent *event)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
spdk_pci_addr_fmt(event->traddr, sizeof(event->traddr), &pci_addr);
|
spdk_pci_addr_fmt(event->traddr, sizeof(event->traddr), &pci_addr);
|
||||||
return 1;
|
} else {
|
||||||
|
event->subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_UNRECOGNIZED;
|
||||||
}
|
}
|
||||||
return -1;
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#ifndef SPDK_UEVENT_H_
|
#ifndef SPDK_UEVENT_H_
|
||||||
#define SPDK_UEVENT_H_
|
#define SPDK_UEVENT_H_
|
||||||
|
|
||||||
|
#define SPDK_NVME_UEVENT_SUBSYSTEM_UNRECOGNIZED 0
|
||||||
#define SPDK_NVME_UEVENT_SUBSYSTEM_UIO 1
|
#define SPDK_NVME_UEVENT_SUBSYSTEM_UIO 1
|
||||||
#define SPDK_NVME_UEVENT_SUBSYSTEM_VFIO 2
|
#define SPDK_NVME_UEVENT_SUBSYSTEM_VFIO 2
|
||||||
|
|
||||||
|
@ -47,8 +47,6 @@ enum uevent_parse_event_return_type {
|
|||||||
uevent_expected_continue = 1
|
uevent_expected_continue = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SPDK_NVME_UEVENT_SUBSYSTEM_NULL 0xFF
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_nvme_uevent_parse_event(void)
|
test_nvme_uevent_parse_event(void)
|
||||||
{
|
{
|
||||||
@ -62,19 +60,19 @@ test_nvme_uevent_parse_event(void)
|
|||||||
/* Case 1: Add wrong non-uio or vfio-pci /devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0 */
|
/* Case 1: Add wrong non-uio or vfio-pci /devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0 */
|
||||||
commands =
|
commands =
|
||||||
"ACTION=add\0DEVPATH=/devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0\0SUBSYSTEM= \0DRIVER= \0PCI_SLOT_NAME= \0";
|
"ACTION=add\0DEVPATH=/devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0\0SUBSYSTEM= \0DRIVER= \0PCI_SLOT_NAME= \0";
|
||||||
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_NULL;
|
uevent.subsystem = 0xFF;
|
||||||
uevent.action = 0;
|
uevent.action = 0;
|
||||||
|
|
||||||
rc = parse_event(commands, &uevent);
|
rc = parse_event(commands, &uevent);
|
||||||
|
|
||||||
CU_ASSERT(rc == uevent_abnormal_exit);
|
CU_ASSERT(rc == uevent_expected_continue);
|
||||||
CU_ASSERT(uevent.subsystem == SPDK_NVME_UEVENT_SUBSYSTEM_NULL);
|
CU_ASSERT(uevent.subsystem == SPDK_NVME_UEVENT_SUBSYSTEM_UNRECOGNIZED);
|
||||||
CU_ASSERT(uevent.action == SPDK_NVME_UEVENT_ADD);
|
CU_ASSERT(uevent.action == SPDK_NVME_UEVENT_ADD);
|
||||||
|
|
||||||
/* Case 2: Add uio /devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0 */
|
/* Case 2: Add uio /devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0 */
|
||||||
commands =
|
commands =
|
||||||
"ACTION=add \0DEVPATH=/devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0\0SUBSYSTEM=uio\0DRIVER=\0PCI_SLOT_NAME= \0";
|
"ACTION=add \0DEVPATH=/devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0\0SUBSYSTEM=uio\0DRIVER=\0PCI_SLOT_NAME= \0";
|
||||||
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_NULL;
|
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_UNRECOGNIZED;
|
||||||
uevent.action = 0;
|
uevent.action = 0;
|
||||||
|
|
||||||
rc = parse_event(commands, &uevent);
|
rc = parse_event(commands, &uevent);
|
||||||
@ -86,7 +84,7 @@ test_nvme_uevent_parse_event(void)
|
|||||||
/* Case 3: Remove uio /devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0 */
|
/* Case 3: Remove uio /devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0 */
|
||||||
commands =
|
commands =
|
||||||
"ACTION=remove\0DEVPATH=/devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0\0SUBSYSTEM=uio\0DRIVER=\0PCI_SLOT_NAME= \0";
|
"ACTION=remove\0DEVPATH=/devices/pci0000:80/0000:80:01.0/0000:81:00.0/uio/uio0\0SUBSYSTEM=uio\0DRIVER=\0PCI_SLOT_NAME= \0";
|
||||||
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_NULL;
|
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_UNRECOGNIZED;
|
||||||
|
|
||||||
rc = parse_event(commands, &uevent);
|
rc = parse_event(commands, &uevent);
|
||||||
|
|
||||||
@ -96,7 +94,7 @@ test_nvme_uevent_parse_event(void)
|
|||||||
|
|
||||||
/* Case 4: Add vfio-pci 0000:81:00.0 */
|
/* Case 4: Add vfio-pci 0000:81:00.0 */
|
||||||
commands = "ACTION=bind\0DEVPATH=\0SUBSYSTEM= \0DRIVER=vfio-pci\0PCI_SLOT_NAME=0000:81:00.0\0";
|
commands = "ACTION=bind\0DEVPATH=\0SUBSYSTEM= \0DRIVER=vfio-pci\0PCI_SLOT_NAME=0000:81:00.0\0";
|
||||||
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_NULL;
|
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_UNRECOGNIZED;
|
||||||
|
|
||||||
rc = parse_event(commands, &uevent);
|
rc = parse_event(commands, &uevent);
|
||||||
|
|
||||||
@ -106,7 +104,7 @@ test_nvme_uevent_parse_event(void)
|
|||||||
|
|
||||||
/* Case 5: Remove vfio-pci 0000:81:00.0 */
|
/* Case 5: Remove vfio-pci 0000:81:00.0 */
|
||||||
commands = "ACTION=remove\0DEVPATH= \0SUBSYSTEM= \0DRIVER=vfio-pci \0PCI_SLOT_NAME=0000:81:00.0\0";
|
commands = "ACTION=remove\0DEVPATH= \0SUBSYSTEM= \0DRIVER=vfio-pci \0PCI_SLOT_NAME=0000:81:00.0\0";
|
||||||
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_NULL;
|
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_UNRECOGNIZED;
|
||||||
|
|
||||||
rc = parse_event(commands, &uevent);
|
rc = parse_event(commands, &uevent);
|
||||||
|
|
||||||
@ -116,7 +114,7 @@ test_nvme_uevent_parse_event(void)
|
|||||||
|
|
||||||
/* Case 6: Add wrong vfio-pci addr 000000 */
|
/* Case 6: Add wrong vfio-pci addr 000000 */
|
||||||
commands = "ACTION=bind\0DEVPATH= \0SUBSYSTEM= \0DRIVER=vfio-pci \0PCI_SLOT_NAME=000000\0";
|
commands = "ACTION=bind\0DEVPATH= \0SUBSYSTEM= \0DRIVER=vfio-pci \0PCI_SLOT_NAME=000000\0";
|
||||||
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_NULL;
|
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_UNRECOGNIZED;
|
||||||
|
|
||||||
rc = parse_event(commands, &uevent);
|
rc = parse_event(commands, &uevent);
|
||||||
|
|
||||||
@ -126,12 +124,12 @@ test_nvme_uevent_parse_event(void)
|
|||||||
|
|
||||||
/* Case 7: Add wrong type vfio 0000:81:00.0 */
|
/* Case 7: Add wrong type vfio 0000:81:00.0 */
|
||||||
commands = "ACTION=bind\0DEVPATH= \0SUBSYSTEM= \0DRIVER=vfio \0PCI_SLOT_NAME=0000:81:00.0\0";
|
commands = "ACTION=bind\0DEVPATH= \0SUBSYSTEM= \0DRIVER=vfio \0PCI_SLOT_NAME=0000:81:00.0\0";
|
||||||
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_NULL;
|
uevent.subsystem = SPDK_NVME_UEVENT_SUBSYSTEM_UIO;
|
||||||
uevent.action = 0;
|
uevent.action = 0;
|
||||||
rc = parse_event(commands, &uevent);
|
rc = parse_event(commands, &uevent);
|
||||||
|
|
||||||
CU_ASSERT(rc == uevent_abnormal_exit);
|
CU_ASSERT(rc == uevent_expected_continue);
|
||||||
CU_ASSERT(uevent.subsystem == SPDK_NVME_UEVENT_SUBSYSTEM_NULL);
|
CU_ASSERT(uevent.subsystem == SPDK_NVME_UEVENT_SUBSYSTEM_UNRECOGNIZED);
|
||||||
CU_ASSERT(uevent.action == SPDK_NVME_UEVENT_ADD);
|
CU_ASSERT(uevent.action == SPDK_NVME_UEVENT_ADD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user