Il 14/05/2013 19:15, Alex Williamson ha scritto: > On Tue, 2013-05-14 at 19:13 +1000, David Gibson wrote: >> > This patch adds a NotifierList to MemoryRegions which represent IOMMUs >> > allowing other parts of the code to register interest in mappings or >> > unmappings from the IOMMU. All IOMMU implementations will need to call >> > memory_region_notify_iommu() to inform those waiting on the notifier list, >> > whenever an IOMMU mapping is made or removed. >> > >> > Signed-off-by: David Gibson <da...@gibson.dropbear.id.au> >> > --- >> > hw/ppc/spapr_iommu.c | 8 ++++++++ >> > include/exec/memory.h | 7 +++++++ >> > memory.c | 18 ++++++++++++++++++ >> > 3 files changed, 33 insertions(+) >> > >> > diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c >> > index 07a6307..6d40485 100644 >> > --- a/hw/ppc/spapr_iommu.c >> > +++ b/hw/ppc/spapr_iommu.c >> > @@ -194,6 +194,7 @@ static target_ulong put_tce_emu(sPAPRTCETable *tcet, >> > target_ulong ioba, >> > target_ulong tce) >> > { >> > sPAPRTCE *tcep; >> > + IOMMUTLBEntry entry; >> > >> > if (ioba >= tcet->window_size) { >> > hcall_dprintf("spapr_vio_put_tce on out-of-bounds IOBA 0x" >> > @@ -204,6 +205,13 @@ static target_ulong put_tce_emu(sPAPRTCETable *tcet, >> > target_ulong ioba, >> > tcep = tcet->table + (ioba >> SPAPR_TCE_PAGE_SHIFT); >> > tcep->tce = tce; >> > >> > + entry.iova = ioba & ~SPAPR_TCE_PAGE_MASK; >> > + entry.translated_addr = tce & ~SPAPR_TCE_PAGE_MASK; >> > + entry.addr_mask = SPAPR_TCE_PAGE_MASK; >> > + entry.perm[0] = !!(tce & SPAPR_TCE_RO); >> > + entry.perm[1] = !!(tce & SPAPR_TCE_WO); > I really wish these perms were addressed by #defines (ie. > perm[READ]/perm[WRITE]) or explicitly named. >
I will make it a 2-bit field. Paolo