Messages in this thread | | | Date | Fri, 24 Aug 2012 17:30:21 -0700 | From | "H. Peter Anvin" <> | Subject | Re: [PATCH 3/5] x86: Only direct map addresses that are marked as E820_RAM |
| |
On 08/24/2012 04:55 PM, Jacob Shin wrote: > + > + for (i = 0; i < e820.nr_map; i++) { > + struct e820entry *ei = &e820.map[i]; > + u64 start = ei->addr; > + u64 end = ei->addr + ei->size; > + > + /* we only map E820_RAM */ > + if (ei->type != E820_RAM) > + continue; > + > + if (end <= ISA_END_ADDRESS) > + continue; > + > + if (start <= ISA_END_ADDRESS) > + start = 0; > +#ifdef CONFIG_X86_32 > + /* on 32 bit, we only map up to max_low_pfn */ > + if ((start >> PAGE_SHIFT) >= max_low_pfn) > + continue; > + > + if ((end >> PAGE_SHIFT) > max_low_pfn) > + end = max_low_pfn << PAGE_SHIFT; > +#endif > + /* the ISA range is always mapped regardless of holes */ > + if (!pfn_range_is_mapped(0, ISA_END_ADDRESS << PAGE_SHIFT) && > + start != 0) > + init_memory_mapping(0, ISA_END_ADDRESS); > + > + init_memory_mapping(start, end); > + } > +
The ISA range mapping doesn't really make sense *inside* the loop, no? It seems you could do that before you enter the loop and then simply have:
+ if (end <= ISA_END_ADDRESS) + continue; + + if (start <= ISA_END_ADDRESS) + start = ISA_END_ADDRESS;
... no?
-hpa
-- H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf.
| |