At the moment only a single command can be submitted to the HCA at a time, and then that command is polled for completion. The HCA supports up to 32 concurrent commands with interrupt driven completions, we should move to that. Alongside this, the method for acquiring pages for the hardware had to be slightly modified. # The number of pages in a single command was increased from 512 to 4096. # Previously, when the hardware required pages, the driver would iterate in a loop giving pages in 512 page chunks at a time, inside the interrupt thread. When this was moved to a taskq, it unblocked the interrupt and caused a storm of page request interrupts as each 512 did not satisfy the hardware's request. The solution is to remove the iteration, and just give pages to the hardware in chunks of 4096, and let the h/w drive another interrupt until its needs have been satisfied.