Message ID | 20240903201633.93182-2-dbarboza@ventanamicro.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | riscv: QEMU RISC-V IOMMU Support | expand |
On 9/3/24 13:16, Daniel Henrique Barboza wrote: > From: Tomasz Jeznach <tjeznach@rivosinc.com> > > Extend memory transaction attributes with process identifier to allow > per-request address translation logic to use requester_id / process_id > to identify memory mapping (e.g. enabling IOMMU w/ PASID translations). > > Signed-off-by: Tomasz Jeznach <tjeznach@rivosinc.com> > Reviewed-by: Frank Chang <frank.chang@sifive.com> > Reviewed-by: Jason Chien <jason.chien@sifive.com> > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> > Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> > --- > include/exec/memattrs.h | 5 +++++ > 1 file changed, 5 insertions(+) What is this for? What is different about it than requester_id? r~ > > diff --git a/include/exec/memattrs.h b/include/exec/memattrs.h > index 14cdd8d582..e27c18f3dc 100644 > --- a/include/exec/memattrs.h > +++ b/include/exec/memattrs.h > @@ -52,6 +52,11 @@ typedef struct MemTxAttrs { > unsigned int memory:1; > /* Requester ID (for MSI for example) */ > unsigned int requester_id:16; > + > + /* > + * PID (PCI PASID) support: Limited to 8 bits process identifier. > + */ > + unsigned int pid:8; > } MemTxAttrs; > > /* Bus masters which don't specify any attributes will get this,
On 9/3/24 5:31 PM, Richard Henderson wrote: > On 9/3/24 13:16, Daniel Henrique Barboza wrote: >> From: Tomasz Jeznach <tjeznach@rivosinc.com> >> >> Extend memory transaction attributes with process identifier to allow >> per-request address translation logic to use requester_id / process_id >> to identify memory mapping (e.g. enabling IOMMU w/ PASID translations). >> >> Signed-off-by: Tomasz Jeznach <tjeznach@rivosinc.com> >> Reviewed-by: Frank Chang <frank.chang@sifive.com> >> Reviewed-by: Jason Chien <jason.chien@sifive.com> >> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> >> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> >> --- >> include/exec/memattrs.h | 5 +++++ >> 1 file changed, 5 insertions(+) > > What is this for? What is different about it than requester_id? The IOMMU memory region uses both the requester_id (internally called device_id) and the process id (the PASID for PCI devices) to identify a context because the IOMMU allows the same PID to be used by multiple requester_ids. Using only the requester_id is not enough to identify the IOMMU context. Thanks, Daniel > > > r~ > >> >> diff --git a/include/exec/memattrs.h b/include/exec/memattrs.h >> index 14cdd8d582..e27c18f3dc 100644 >> --- a/include/exec/memattrs.h >> +++ b/include/exec/memattrs.h >> @@ -52,6 +52,11 @@ typedef struct MemTxAttrs { >> unsigned int memory:1; >> /* Requester ID (for MSI for example) */ >> unsigned int requester_id:16; >> + >> + /* >> + * PID (PCI PASID) support: Limited to 8 bits process identifier. >> + */ >> + unsigned int pid:8; >> } MemTxAttrs; >> /* Bus masters which don't specify any attributes will get this, >
diff --git a/include/exec/memattrs.h b/include/exec/memattrs.h index 14cdd8d582..e27c18f3dc 100644 --- a/include/exec/memattrs.h +++ b/include/exec/memattrs.h @@ -52,6 +52,11 @@ typedef struct MemTxAttrs { unsigned int memory:1; /* Requester ID (for MSI for example) */ unsigned int requester_id:16; + + /* + * PID (PCI PASID) support: Limited to 8 bits process identifier. + */ + unsigned int pid:8; } MemTxAttrs; /* Bus masters which don't specify any attributes will get this,