nvme-pci: make sure write/poll_queues less or equal then cpu count
Check module parameter write/poll_queues before using it to catch
too large values.
Reproducer:
modprobe -r nvme
modprobe nvme write_queues=`nproc`
echo $((`nproc`+1)) > /sys/module/nvme/parameters/write_queues
echo 1 > /sys/block/nvme0n1/device/reset_controller
[ 657.069000] ------------[ cut here ]------------
[ 657.069022] WARNING: CPU: 10 PID: 1163 at kernel/irq/affinity.c:390 irq_create_affinity_masks+0x47c/0x4a0
[ 657.069056] dm_region_hash dm_log dm_mod
[ 657.069059] CPU: 10 PID: 1163 Comm: kworker/u193:9 Kdump: loaded Tainted: G W 5.6.0+ #8
[ 657.069060] Hardware name: Inspur SA5212M5/YZMB-00882-104, BIOS 4.0.9 08/27/2019
[ 657.069064] Workqueue: nvme-reset-wq nvme_reset_work [nvme]
[ 657.069066] RIP: 0010:irq_create_affinity_masks+0x47c/0x4a0
[ 657.069067] Code: fe ff ff 48 c7 c0 b0 89 14 95 48 89 46 20 e9 e9 fb ff ff 31 c0 e9 90 fc ff ff 0f 0b 48 c7 44 24 08 00 00 00 00 e9 e9 fc ff ff <0f> 0b e9 87 fe ff ff 48 8b 7c 24 28 e8 33 a0 80 00 e9 b6 fc ff ff
[ 657.069068] RSP: 0018:
ffffb505ce1ffc78 EFLAGS:
00010202
[ 657.069069] RAX:
0000000000000060 RBX:
ffff9b97921fe5c0 RCX:
0000000000000000
[ 657.069069] RDX:
ffff9b67bad80000 RSI:
00000000ffffffa0 RDI:
0000000000000000
[ 657.069070] RBP:
0000000000000000 R08:
0000000000000000 R09:
ffff9b97921fe718
[ 657.069070] R10:
ffff9b97921fe710 R11:
0000000000000001 R12:
0000000000000064
[ 657.069070] R13:
0000000000000060 R14:
0000000000000000 R15:
0000000000000001
[ 657.069071] FS:
0000000000000000(0000) GS:
ffff9b67c0880000(0000) knlGS:
0000000000000000
[ 657.069072] CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
[ 657.069072] CR2:
0000559eac6fc238 CR3:
000000057860a002 CR4:
00000000007606e0
[ 657.069073] DR0:
0000000000000000 DR1:
0000000000000000 DR2:
0000000000000000
[ 657.069073] DR3:
0000000000000000 DR6:
00000000fffe0ff0 DR7:
0000000000000400
[ 657.069073] PKRU:
55555554
[ 657.069074] Call Trace:
[ 657.069080] __pci_enable_msix_range+0x233/0x5a0
[ 657.069085] ? kernfs_put+0xec/0x190
[ 657.069086] pci_alloc_irq_vectors_affinity+0xbb/0x130
[ 657.069089] nvme_reset_work+0x6e6/0xeab [nvme]
[ 657.069093] ? __switch_to_asm+0x34/0x70
[ 657.069094] ? __switch_to_asm+0x40/0x70
[ 657.069095] ? nvme_irq_check+0x30/0x30 [nvme]
[ 657.069098] process_one_work+0x1a7/0x370
[ 657.069101] worker_thread+0x1c9/0x380
[ 657.069102] ? max_active_store+0x80/0x80
[ 657.069103] kthread+0x112/0x130
[ 657.069104] ? __kthread_parkme+0x70/0x70
[ 657.069105] ret_from_fork+0x35/0x40
[ 657.069106] ---[ end trace
f4f06b7d24513d06 ]---
[ 657.077110] nvme nvme0: 95/1/0 default/read/poll queues
Signed-off-by: Weiping Zhang <zhangweiping@didiglobal.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>