[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v4 1/7] xen/arm: introduce early_ioremap



On Thu, 10 Jan 2013, Ian Campbell wrote:
> On Tue, 2013-01-08 at 20:03 +0000, Stefano Stabellini wrote:
> > Introduce a function to map a range of physical memory into Xen virtual
> > memory.
> > It doesn't need domheap to be setup.
> > It is going to be used to map the videoram.
> > 
> > Add flush_xen_data_tlb_range_va, that flushes a range of virtual addresses.
> > Replace all the calls to flush_xen_data_tlb_va with calls to
> > flush_xen_data_tlb_range_va and remove flush_xen_data_tlb_va.
> > 
> > In the case of the dest_va tlb flush at the beginning of
> > setup_pagetables, flush the entire 2MB mapping rather than just the
> > first 4K.
> > 
> > 
> > Changes in v4:
> > - rename flush_xen_data_tlb_range to flush_xen_data_tlb_range_va;
> > - replace all the calls to flush_xen_data_tlb_va, with calls to
> > flush_xen_data_tlb_range_va;
> > - flush the entire 2MB mapping at BOOT_MISC_VIRT_START rather than just
> > the first 4k;
> > - remove flush_xen_data_tlb_va;
> 
> These all seem like a separate patch (or patches) to me.

I created three other patches: one to introduce
flush_xen_data_tlb_range_va and replace all the calls to
flush_xen_data_tlb_va with calls to flush_xen_data_tlb_range_va; a
second one to fix the 2MB flush at the beginning of setup_pagetables;
and a third one to introduce the missing FIRST, SECOND and THIRD MASK
and SIZE definitions.


> > - fix indentation;
> > - rename EARLY_VMAP_START/END to EARLY_VMAP_VIRT_START/END;
> > - mark early_ioremap as __init;
> > - reduce the amount of casts in early_ioremap.
> 
> [...]
> >  /*
> > - * Flush one VA's hypervisor mappings from the data TLB. This is not
> > + * Flush a range of VA's hypervisor mappings from the data TLB. This is not
> >   * sufficient when changing code mappings or for self modifying code.
> >   */
> > -static inline void flush_xen_data_tlb_va(unsigned long va)
> > +static inline void flush_xen_data_tlb_range_va(unsigned long va, unsigned 
> > long size)
> >  {
> > -    asm volatile("dsb;" /* Ensure preceding are visible */
> > -                 STORE_CP32(0, TLBIMVAH)
> > -                 "dsb;" /* Ensure completion of the TLB flush */
> > -                 "isb;"
> > -                 : : "r" (va) : "memory");
> > +    unsigned long end = va + size;
> > +    while ( va < end ) {
> > +        asm volatile("dsb;" /* Ensure preceding are visible */
> > +                     STORE_CP32(0, TLBIMVAH)
> > +                     "dsb;" /* Ensure completion of the TLB flush */
> > +                     "isb;"
> 
> You can hoist all the barriers here to above/below the loop I think.

OK

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.