Message ID | CAKv+Gu8X22ghgvez5tTfwrm8PDzsB6xatHDs6S5_BM4YWaKgmQ@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Ard, On 18/08/16 12:55, Ard Biesheuvel wrote: > Actually, it is not even necessary to align the end of .mmuoff.data, > as long as the next section starts at at 2 KB aligned boundary (which > is guaranteed for .bss since it covers page aligned data, although it > would make sense to make that explicit) I.e., something like > > diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S > index 659963d40bb4..70aa77060729 100644 > --- a/arch/arm64/kernel/vmlinux.lds.S > +++ b/arch/arm64/kernel/vmlinux.lds.S > @@ -185,10 +185,18 @@ SECTIONS > _data = .; > _sdata = .; > RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) > + > + .mmuoff.read : ALIGN(SZ_2K) { > + *(.mmuoff.read) > + } > + .mmuoff.write : ALIGN(SZ_2K) { > + *(.mmuoff.write) > + } > + > PECOFF_EDATA_PADDING > _edata = .; > > - BSS_SECTION(0, 0, 0) > + BSS_SECTION(SZ_2K, SZ_2K, 0) > > . = ALIGN(PAGE_SIZE); > idmap_pg_dir = .; > > AFAICT, this should allow you to drop the alignments in the code. This > is also more future proof, since you can simply emit variables into > these sections anywhere, whereas the explicit .align directive aligns > that particular variable, which could lead to more waste of space. Thanks! This looks a lot better. I think the 2K alignment is only needed for the mmuoff.write section as it invalidates cache lines. I don't see a problem with the mmuoff.read section's CWG overlapping with the BSS or other data as the cache maintenance is clean+invalidate. Thanks, James
diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S index 659963d40bb4..70aa77060729 100644 --- a/arch/arm64/kernel/vmlinux.lds.S +++ b/arch/arm64/kernel/vmlinux.lds.S @@ -185,10 +185,18 @@ SECTIONS _data = .; _sdata = .; RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) + + .mmuoff.read : ALIGN(SZ_2K) { + *(.mmuoff.read) + } + .mmuoff.write : ALIGN(SZ_2K) { + *(.mmuoff.write) + } + PECOFF_EDATA_PADDING _edata = .; - BSS_SECTION(0, 0, 0) + BSS_SECTION(SZ_2K, SZ_2K, 0) . = ALIGN(PAGE_SIZE); idmap_pg_dir = .;