lkml.org 
[lkml]   [2017]   [Nov]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 04/16] x86/fixmap: Generalize the GDT fixmap mechanism
    On Mon, 20 Nov 2017, Andy Lutomirski wrote:

    Just a few nits.

    > /* Provide the fixmap address of the remapped GDT */
    > static inline struct desc_struct *get_cpu_gdt_ro(int cpu)
    > {
    > - unsigned int idx = get_cpu_gdt_ro_index(cpu);
    > - return (struct desc_struct *)__fix_to_virt(idx);
    > + return (struct desc_struct *)&get_cpu_entry_area(cpu)->gdt;
    > }
    >
    > /* Provide the current read-only GDT */
    > diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h
    > index b0c505fe9a95..5ff8e251772a 100644
    > --- a/arch/x86/include/asm/fixmap.h
    > +++ b/arch/x86/include/asm/fixmap.h
    > @@ -44,6 +44,17 @@ extern unsigned long __FIXADDR_TOP;
    > PAGE_SIZE)
    > #endif
    >
    > +/*
    > + * cpu_entry_area is a percpu region in the fixmap that contains things
    > + * need by the CPU and early entry/exit code. Real types aren't used here

    s/need/needed/

    > + * to avoid circular header dependencies.

    :(

    > + */
    > +struct cpu_entry_area
    > +{
    > + char gdt[PAGE_SIZE];
    > +};
    > +
    > +#define CPU_ENTRY_AREA_PAGES (sizeof(struct cpu_entry_area) / PAGE_SIZE)

    > +static inline unsigned int __get_cpu_entry_area_page_index(int cpu, int page)
    > +{
    > + BUILD_BUG_ON(sizeof(struct cpu_entry_area) % PAGE_SIZE != 0);
    > +
    > + return FIX_CPU_ENTRY_AREA_BOTTOM - cpu*CPU_ENTRY_AREA_PAGES - page;
    > +}
    > +
    > +#define __get_cpu_entry_area_offset_index(cpu, offset) ({ \
    > + BUILD_BUG_ON(offset % PAGE_SIZE != 0); \
    > + __get_cpu_entry_area_page_index(cpu, offset / PAGE_SIZE); \
    > + })
    > +
    > +#define get_cpu_entry_area_index(cpu, field) \
    > + __get_cpu_entry_area_offset_index((cpu), offsetof(struct cpu_entry_area, field))

    Any reason why those need to be macros?

    > +static inline struct cpu_entry_area *get_cpu_entry_area(int cpu)
    > +{
    > + return (struct cpu_entry_area *)
    > + __fix_to_virt(__get_cpu_entry_area_page_index(cpu, 0));
    > +}
    > +

    Thanks,

    tglx

    \
     
     \ /
      Last update: 2017-11-20 23:01    [W:4.517 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site