CPC G06F 12/1483 (2013.01) [G06F 12/0862 (2013.01); G06F 12/1009 (2013.01); G06F 13/1668 (2013.01); G06F 13/4282 (2013.01); G06F 2212/1052 (2013.01); G06F 2212/305 (2013.01); G06F 2212/6028 (2013.01); G06F 2213/0026 (2013.01)] | 18 Claims |
1. A system comprising:
a memory operable to store data;
an Input/Output Memory Management Unit (IOMMU) coupled to the memory; and
a host-to-device link coupling the IOMMU with one or more devices, wherein the IOMMU is operable as a translation agent on behalf of the one or more devices in connection with memory operations relating to the memory, including:
maintaining, by the IOMMU, a host permission table (HPT) that associates a page permission entry with each physical page of a plurality of physical pages of the memory and one or more contexts of the one or more devices on a per-bus, per-device, per-port, per-function, or per-process basis;
receiving a translated request from a discrete device of the one or more devices via the host-to-device link, wherein the translated request specifies a memory operation and a physical address within the memory pertaining to the memory operation;
determining page access permissions assigned to a context of the discrete device for a physical page of the memory within which the physical address resides by locating the page permission entry corresponding to the context of the discrete device and the physical page within the HPT;
allowing the memory operation to proceed when the page access permissions permit the memory operation; and
blocking the memory operation when the page access permissions do not permit the memory operation.
|