IP Library Granted Patent US 11,741,029
Granted Patent B2
US 11,741,029 · App. 17/894,116 · Granted Aug 29, 2023

System to use descriptor rings for I/O communication

Inventor: Michael Tsirkin (Yokneam Illit, IL)
Assignee: Red Hat, Inc.
G06F13/20G06F9/45558G06F13/4282G06F2009/45579G06F2213/0026
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 11,741,029
App. No.
17/894,116
Granted
Aug 29, 2023
Kind
B2
Abstract

A system and method for input/output communication is disclosed. In one embodiment, a device identifies a queue including a plurality of input/output (I/O) descriptors, each of the plurality of I/O descriptors representing one of: an active descriptor associated with an active I/O request or an executed descriptor that is associated with an executed I/O request. The device retrieves, from a first index in the queue, one or more active descriptors associated with an I/O request. The device executes the I/O request. The device writes a first executed descriptor to a second index in the queue, where the first executed descriptor indicates the I/O request has been executed.

Claims (51)

1. A system, comprising:

a memory; and

a processor, coupled to the memory, the processor to:

identify, by a device, a queue comprising a plurality of input/output (I/O) descriptors, each of the plurality of I/O descriptors representing one of: an active descriptor associated with an active I/O request or an executed descriptor that is associated with an executed I/O request;

retrieve, from a first index in the queue, one or more first active descriptors associated with a first I/O request;

execute, by the device, the first I/O request;

write a first executed descriptor to a position in the queue, the position being identified by a second index, wherein the first executed descriptor indicates the first I/O request has been executed, and wherein the second index is updated upon executing an I/O request; and

increment the second index to an adjacent position in the queue responsive to determining that the device has not processed an active descriptor in a last position in the queue.

2. The system of claim 1 , wherein the processor is further to:

update the second index to another position in the queue responsive to determining that the device has processed an active descriptor in a last position in the queue.

3. The system of claim 1 , wherein a size of the queue is equal to a size of a PCI express packet.

4. The system of claim 1 , wherein the processor is further to:

maintain, by the device, a list of active descriptors corresponding to pending requests.

5. The system of claim 1 , wherein the device is a virtual device and the processor is further to:

write, by a driver, the one or more first active descriptors for the first I/O request to execute one or more operations by a physical device associated with the virtual device.

6. The system of claim 1 , wherein the processor is further to:

responsive to writing an active descriptor, send, by a driver, a notification to the device to notify that the active descriptor is available to be processed.

7. A method, comprising:

identifying, by a device, a queue comprising a plurality of input/output (I/O) descriptors, each of the plurality of I/O descriptors representing one of: an active descriptor associated with an active I/O request or an executed descriptor that is associated with an executed I/O request;

retrieving, from a first position in the queue, one or more first active descriptors associated with a first I/O request;

executing, by the device, the first I/O request;

writing an executed descriptor to a second position in the queue, wherein the executed descriptor indicates that the I/O request has been executed, and wherein the second position is updated upon executing an I/O request; and

increment the second position to an adjacent position in the queue responsive to determining that the device has not processed an active descriptor for in a last position in the queue.

8. The method of claim 7 , further comprising:

updating the second position to another position in the queue responsive to determining that a predetermined condition is satisfied.

9. The method of claim 7 , further comprising:

incrementing, by a number of the one or more first active descriptors associated with the first I/O request, a counter representing a number of active descriptors in the queue that are executed;

responsive to determining that the counter reaches a predefined threshold value, decrementing the counter by the predefined threshold value; and

updating the second position in the queue to another position.

10. The method of claim 9 , wherein the predefined threshold value includes a size of the queue or a size of a PCI express packet.

11. The method of claim 7 , further comprising:

maintaining, by the device, a list of active descriptors corresponding to requests yet to be executed.

12. The method of claim 7 , wherein the device is a virtual device and the method further comprises:

writing, by a driver, the one or more first active descriptors for the first I/O request to execute one or more operations by a physical device associated with the virtual device.

13. The method of claim 7 , further comprising:

responsive to writing at a last position in the queue, writing, by a driver, a next active descriptor to another position in the queue.

14. The method of claim 7 , further comprising:

responsive to writing an active descriptor, sending, by a driver, a notification to the device to notify that the active descriptor is available to be processed.

15. The method of claim 14 , wherein the driver operates within a kernel space of a virtual machine.

16. A non-transitory machine-readable storage medium including instructions that, when executed by a processor, cause the processor to:

identify, by a device, a queue comprising a plurality of input/output (I/O) descriptors, each of the plurality of I/O descriptors representing one of: an active descriptor associated with an active I/O request or an executed descriptor that is associated with an executed I/O request;

retrieve, from a first index in the queue, one or more first active descriptors associated with a first I/O request;

execute, by the device, the first I/O request;

write a first executed descriptor to a position in the queue, the position identified by a second index in the queue, wherein the first executed descriptor indicates the I/O request has been executed, and wherein the second index is updated upon executing an I/O request; and

increment the second index to an adjacent position in the queue responsive to determining that the device has not processed an active descriptor in a last position in the queue.

17. The non-transitory machine-readable storage medium of claim 16 , wherein the processor is further to:

update the second index to another position in the queue responsive to a predetermined condition being satisfied.

18. The non-transitory machine-readable storage medium of claim 17 , wherein the predetermined condition comprises: a determination that the device has processed an active descriptor in a last position in the queue.

19. The non-transitory machine-readable storage medium of claim 16 , wherein a size of the queue is equal to a size of a PCI express packet.

20. The non-transitory machine-readable storage medium of claim 16 , wherein the processor is further to:

maintain, by the device, a list of active descriptors corresponding to pending requests.

Assignments (2)
CHANGE OF NAME Recorded Mar 3, 2026
From: RED HAT, INC.
To: RED HAT, LLC
Reel/Frame 074913/0759 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 25, 2022
From: TSIRKIN, MICHAEL
To: RED HAT, INC.
Reel/Frame 060904/0908 →