Messages in this thread | | | Date | Tue, 19 Mar 2013 16:21:13 -0700 | From | "H. Peter Anvin" <> | Subject | Re: [PATCH] x86/microcode_intel_early.c: Get 32-bit physical address by __pa_nodebug() |
| |
On 03/19/2013 04:15 PM, Yinghai Lu wrote: > On Tue, Mar 19, 2013 at 8:04 AM, Fenghua Yu <fenghua.yu@intel.com> wrote: >> From: Fenghua Yu <fenghua.yu@intel.com> >> >> In 32-bit, __pa_symbol() in CONFIG_DEBUG_VIRTUAL accesses kernel data (e.g. >> max_low_pfn) that haven't been setup yet in such early boot phase. To fix the >> issue, __pa_nodebug() replaces __pa_symbol() to get a global symbol's physical >> address. > > That explanation is not precise. > > __phys_addr in 32bit when DEBUG_VIRTUAL is set, it does have check > /* max_low_pfn is set early, but not _that_ early */ > if (max_low_pfn) { > .... > } > the reason should be: > in head_32.S, 32bit flat mode, you need to switch to phys addr to access > global variable max_low_pfn. >
Uh, no.
It already does that. The problem is that __pa_symbol() breaks with CONFIG_DEBUG_VIRTUAL at this point; we need to use __pa_nodebug().
-hpa
| |