Hey Kevin,

> Am 03.10.2020 um 03:47 schrieb Kevin O'Connor <ke...@koconnor.net>:
> 
> 
>> On Wed, Sep 30, 2020 at 11:10:56PM +0200, Alexander Graf wrote:
>> Some NVMe controllers only support small maximum request sizes, such as
>> the AWS EBS NVMe implementation which only supports NVMe requests of up
>> to 32 pages (256kb) at once.
>> 
>> BIOS callers can exceed those request sizes by defining sector counts
>> above this threshold. Currently we fall back to the bounce buffer
>> implementation for those. This is slow.
>> 
>> This patch introduces splitting logic to the NVMe I/O request code so
>> that every NVMe I/O request gets handled in a chunk size that is
>> consumable by the NVMe adapter, while maintaining the fast path PRPL
>> logic we just introduced.
>> 
>> Signed-off-by: Alexander Graf <g...@amazon.com>
>> ---
>> src/hw/nvme.c | 16 ++++++++++++++++
>> 1 file changed, 16 insertions(+)
>> 
>> diff --git a/src/hw/nvme.c b/src/hw/nvme.c
>> index b92ca52..cc37bca 100644
>> --- a/src/hw/nvme.c
>> +++ b/src/hw/nvme.c
>> @@ -727,6 +727,22 @@ nvme_cmd_readwrite(struct nvme_namespace *ns, struct 
>> disk_op_s *op, int write)
>>     u16 const max_blocks = NVME_PAGE_SIZE / ns->block_size;
>>     u16 i;
>> 
>> +    /* Split up requests that are larger than the device can handle */
>> +    if (op->count > ns->max_req_size) {
>> +        u16 count = op->count;
>> +
>> +        /* Handle the first max_req_size elements */
>> +        op->count = ns->max_req_size;
>> +        if (nvme_cmd_readwrite(ns, op, write))
>> +            return res;
>> +
>> +        /* Handle the remainder of the request */
>> +        op->count = count - ns->max_req_size;
>> +        op->lba += ns->max_req_size;
>> +        op->buf_fl += (ns->max_req_size * ns->block_size);
>> +        return nvme_cmd_readwrite(ns, op, write);
>> +    }
> 
> Depending on the disk access, this code could run with a small stack.
> I would avoid recursion.

This is tail recursion, which any reasonable compiler converts into a jmp :). 
Take a look at the .o file - for me it did become a plain jump.

> 
> Otherwise, the patch series looks okay to me.  (I don't have enough
> knowledge of the nvme code to give a full review though).

Thanks :)

Alex




Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss
Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
Sitz: Berlin
Ust-ID: DE 289 237 879


_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org

Reply via email to