Skip to content

Commit ecd7e21

Browse files
committed
Add address range invalidation extension
1 parent 7b0a5b5 commit ecd7e21

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

src/iommu_extensions.adoc

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ Architecture:
1414
| <<NLINV, _Non-leaf Invalidation Extension_>>
1515
|_0.1_
1616
|_Draft_
17+
| <<ARINV, _Address Range Invalidation Extension_>>
18+
|_0.1_
19+
|_Draft_
1720
|===
1821

1922
[[QOSID]]
@@ -167,3 +170,40 @@ applies to the address range determined by the `ADDR` and `S` operands.
167170
the VM address spaces identified by the `GSCID` operand.
168171

169172
<<<
173+
174+
[[ARINV]]
175+
=== Address Range Invalidation Extension, Version 0.1
176+
177+
The address range invalidation extension enables specifying a range of addresses
178+
in an IOMMU ATC invalidation command, reducing the number of commands queued to
179+
the IOMMU. This facility is especially useful when superpages are employed in
180+
page tables.
181+
182+
A range-size (`S`) operand is defined at bit 73 in the `IOTINVAL.VMA` and
183+
`IOTINVAL.GVMA` commands. The ability to set this field to 1 is enumerated by
184+
`capabilities.S` (bit 43) being 1.
185+
186+
When the `GV` operand is 0, the `S` operand is ignored by the `IOTINVAL.GVMA`
187+
command. When the `AV` operand is not ignored and is 0, the `S` operand
188+
is ignored by the `IOTINVAL.VMA` and the `IOTINVAL.GVMA` commands.
189+
190+
When the `S` operand is 1, the `ADDR` operand represents a NAPOT range encoded
191+
in the `ADDR` operand itself. Starting from bit position 0 of the `ADDR`
192+
operand, if the first bit set to 0 is at position `X`, the range size is
193+
`2^(X+13)` KiB.
194+
195+
If the `S` operand is 1 and all bits of the `ADDR` operand are 1, the behavior
196+
is UNSPECIFIED.
197+
198+
If the `S` operand is 1 and the most significant bit of the `ADDR` operand is 0
199+
while all other bits are 1, the specified address range covers the entire
200+
address space.
201+
202+
[NOTE]
203+
====
204+
The NAPOT range encoding used by this extension follows the convention used by
205+
PCIe ATS Invalidation Requests to denote address ranges.
206+
207+
Simpler implementations may invalidate all address-translation cache entries
208+
when the `S` bit is set to 1.
209+
====

0 commit comments

Comments
 (0)