On Saturday, September 30, 2017 10:25:45 AM CEST christophe leroy wrote: > > Le 28/09/2017 à 20:32, Christian Lamparter a écrit : > > The mmu context on the 40x, 44x does not define pte_frag > > entry. This causes gcc abort the compilation due to: > > > > setup-common.c: In function ‘setup_arch’: > > setup-common.c:908: error: ‘mm_context_t’ has no ‘pte_frag’ > > > > This patch fixes the issue by adding additional guard > > conditions, that limit the initialization to just > > platforms that define the pte_frag variable in the > > mmu context. > > Wouldn't it be better to amend mm_context_t with the following, just > like other platforms, instead of a #ifdef in setup_arch() ? > > #ifdef CONFIG_PPC_64K_PAGES > /* for 4K PTE fragment support */ > void *pte_frag; > #endif
This would require to add this dead weight to the mm_context_t of asm/mmu-40x.h, asm/mmu-44x.h and asm/mmu-8xx.h. asm/mmu-book3e.h already has the pte_frag defined. But it is not used by any mmu-book3e/mmu-32 code as far as I can tell. > Otherwise, since init_mm is defined in BSS, is setting pte_frag to NULL > needed at all ? > I think removing this line would be better. Yes, in fact it's guaranteed to be NULL by C99. This is because init_mm is of external linkage and this makes it of "static storage class" according to 6.2.4.3: "An object whose identifier is declared with external or internal linkage, or with the storage-class specifier static has static storage duration." And C99 defines in 6.7.8.10 Initialization that: " If an object that has static storage duration is not initialized explicitly, then: — if it has pointer type, it is initialized to a null pointer; [...] " so yes, init_mm.context.pte_frag = NULL; can be dropped. The question is what to do with BOOK3E mmu.h? After all the pte_frag serves no purpose there. Regards, Christian