[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4] x86: add p2m_mmio_write_dm
>>> On 28.11.14 at 08:59, <yu.c.zhang@xxxxxxxxxxxxxxx> wrote: > --- a/xen/arch/x86/hvm/hvm.c > +++ b/xen/arch/x86/hvm/hvm.c > @@ -2838,7 +2838,8 @@ int hvm_hap_nested_page_fault(paddr_t gpa, unsigned > long gla, > * to the mmio handler. > */ > if ( (p2mt == p2m_mmio_dm) || > - (npfec.write_access && (p2mt == p2m_ram_ro)) ) > + (npfec.write_access && > + ((p2mt == p2m_ram_ro) || (p2mt == p2m_mmio_write_dm))) ) Why are you corrupting indentation here? Furthermore the code you modify here suggests that p2m_ram_ro already has the needed semantics - writes get passed to the DM. None of the other changes you make, and none of the other uses of p2m_ram_ro appear to be in conflict with your intentions, so you'd really need to explain better why you need the new type. > @@ -5922,6 +5923,8 @@ long do_hvm_op(unsigned long op, > XEN_GUEST_HANDLE_PARAM(void) arg) > a.mem_type = HVMMEM_ram_rw; > else if ( p2m_is_grant(t) ) > a.mem_type = HVMMEM_ram_rw; > + else if ( t == p2m_mmio_write_dm ) > + a.mem_type = HVMMEM_mmio_write_dm; > else > a.mem_type = HVMMEM_mmio_dm; > rc = __copy_to_guest(arg, &a, 1) ? -EFAULT : 0; > @@ -5941,7 +5944,8 @@ long do_hvm_op(unsigned long op, > XEN_GUEST_HANDLE_PARAM(void) arg) > static const p2m_type_t memtype[] = { > [HVMMEM_ram_rw] = p2m_ram_rw, > [HVMMEM_ram_ro] = p2m_ram_ro, > - [HVMMEM_mmio_dm] = p2m_mmio_dm > + [HVMMEM_mmio_dm] = p2m_mmio_dm, > + [HVMMEM_mmio_write_dm] = p2m_mmio_write_dm > }; > > if ( copy_from_guest(&a, arg, 1) ) > @@ -5987,14 +5991,17 @@ long do_hvm_op(unsigned long op, > XEN_GUEST_HANDLE_PARAM(void) arg) > rc = -EAGAIN; > goto param_fail4; > } > + Stray addition of a blank line? > if ( !p2m_is_ram(t) && > - (!p2m_is_hole(t) || a.hvmmem_type != HVMMEM_mmio_dm) ) > + (!p2m_is_hole(t) || a.hvmmem_type != HVMMEM_mmio_dm) && > + t != p2m_mmio_write_dm ) Do you really want to permit e.g. transitions between mmio_dm and mmio_write_dm? We should be as restrictive as possible here to not open up paths to security problems. > { > put_gfn(d, pfn); > goto param_fail4; > } > > rc = p2m_change_type_one(d, pfn, t, memtype[a.hvmmem_type]); > + > put_gfn(d, pfn); > if ( rc ) > goto param_fail4; Another stray newline addition. > --- a/xen/include/asm-x86/p2m.h > +++ b/xen/include/asm-x86/p2m.h > @@ -72,6 +72,7 @@ typedef enum { > p2m_ram_shared = 12, /* Shared or sharable memory */ > p2m_ram_broken = 13, /* Broken page, access cause domain crash > */ > p2m_map_foreign = 14, /* ram pages from foreign domain */ > + p2m_mmio_write_dm = 15, /* Read-only; writes go to the device > model */ > } p2m_type_t; > > /* Modifiers to the query */ > If the new type is really needed, shouldn't this get added to P2M_RO_TYPES? Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |