mirror of
https://github.com/opnsense/src.git
synced 2026-06-08 16:22:46 -04:00
Delete extra IO qpairs allocated based on number of MSI-X vectors, but
later found to not be usable because the controller doesn't support the same number of queues. This is not the normal case, but does occur with the Chatham prototype board. Sponsored by: Intel
This commit is contained in:
parent
07dbf2c768
commit
bb852ae89b
1 changed files with 14 additions and 6 deletions
|
|
@ -489,7 +489,7 @@ static int
|
|||
nvme_ctrlr_set_num_qpairs(struct nvme_controller *ctrlr)
|
||||
{
|
||||
struct nvme_completion_poll_status status;
|
||||
int cq_allocated, sq_allocated;
|
||||
int cq_allocated, i, sq_allocated;
|
||||
|
||||
status.done = FALSE;
|
||||
nvme_ctrlr_cmd_set_num_queues(ctrlr, ctrlr->num_io_queues,
|
||||
|
|
@ -511,16 +511,24 @@ nvme_ctrlr_set_num_qpairs(struct nvme_controller *ctrlr)
|
|||
|
||||
/*
|
||||
* Check that the controller was able to allocate the number of
|
||||
* queues we requested. If not, revert to one IO queue.
|
||||
* queues we requested. If not, revert to one IO queue pair.
|
||||
*/
|
||||
if (sq_allocated < ctrlr->num_io_queues ||
|
||||
cq_allocated < ctrlr->num_io_queues) {
|
||||
|
||||
/*
|
||||
* Destroy extra IO queue pairs that were created at
|
||||
* controller construction time but are no longer
|
||||
* needed. This will only happen when a controller
|
||||
* supports fewer queues than MSI-X vectors. This
|
||||
* is not the normal case, but does occur with the
|
||||
* Chatham prototype board.
|
||||
*/
|
||||
for (i = 1; i < ctrlr->num_io_queues; i++)
|
||||
nvme_io_qpair_destroy(&ctrlr->ioq[i]);
|
||||
|
||||
ctrlr->num_io_queues = 1;
|
||||
ctrlr->per_cpu_io_queues = 0;
|
||||
|
||||
/* TODO: destroy extra queues that were created
|
||||
* previously but now found to be not needed.
|
||||
*/
|
||||
}
|
||||
|
||||
return (0);
|
||||
|
|
|
|||
Loading…
Reference in a new issue