Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> wrote: >On Wed, Aug 21, 2013 at 02:35:36PM +0200, H. Peter Anvin wrote: >> Global symbols are inaccessible in physical mode. > >Even if they are embedded in the assembler code and use >GLOBAL(paging_enabled) ? Yes, because the address is different in physical mode. Think about it. You could do a *function* like: paging_enabled: mov (%esp),%edx xor %eax,%eax cmpl $PAGE_OFFSET,%edx setae %al ret >> >> This is incidentally yet another example of "PV/weird platform >violence", since in their absence it would be trivial to work around >this by using segmentation. > >I don't follow why it could not. > >Why can't there be a __pa_symbol(paging_enabled) that is used. Won't >that in effect allow you to check the contents of that 'global >constant' even when you don't have paging enabled? Yes. But not once paging has been turned on. >> >>As mentioned above, on 32bit before paging is enabled, we have to >> >>access variables >> >>with pa. So introduce a "bool is_phys" parameter to extend_brk(), >and >> >>convert va >> >>to pa is it is true. >> > >> >Could you do it differently? Meaning have a global symbol >> >(paging_enabled) which will be used by most of the functions you >> >changed in this patch and the next ones? It would naturally be >enabled >> >when paging is on and __va addresses can be used. >> > >> >That could also be used in the printk case to do a BUG_ON before >paging >> >is enabled on 32bit. Or perhaps use a different code path to deal >with >> >using __pa address. >> > >> >? -- Sent from my mobile phone. Please excuse brevity and lack of formatting. -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html