35 lines
1.4 KiB
Diff
35 lines
1.4 KiB
Diff
|
# Commit c22bd567ce22f6ad9bd93318ad0d7fd1c2eadb0d
|
||
|
# Date 2014-05-21 18:14:04 +0200
|
||
|
# Author Jan Beulich <jbeulich@suse.com>
|
||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||
|
hvmloader: PA range 0xfc000000-0xffffffff should be UC
|
||
|
|
||
|
Rather than leaving the range from PCI_MEM_END (0xfc000000) to 4G
|
||
|
uncovered, we should include this in the UC range created for the (low)
|
||
|
PCI range. Besides being more correct, this also has the advantage that
|
||
|
with the way pci_setup() currently works the range will always be
|
||
|
mappable with a single variable range MTRR (rather than from 2 to 5
|
||
|
depending on how much the lower boundary gets shifted down to
|
||
|
accommodate all devices).
|
||
|
|
||
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||
|
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||
|
|
||
|
--- a/tools/firmware/hvmloader/cacheattr.c
|
||
|
+++ b/tools/firmware/hvmloader/cacheattr.c
|
||
|
@@ -99,12 +99,12 @@ void cacheattr_init(void)
|
||
|
{
|
||
|
uint64_t base = pci_mem_start, size;
|
||
|
|
||
|
- for ( i = 0; (base != pci_mem_end) && (i < nr_var_ranges); i++ )
|
||
|
+ for ( i = 0; !(base >> 32) && (i < nr_var_ranges); i++ )
|
||
|
{
|
||
|
size = PAGE_SIZE;
|
||
|
while ( !(base & size) )
|
||
|
size <<= 1;
|
||
|
- while ( ((base + size) < base) || ((base + size) > pci_mem_end) )
|
||
|
+ while ( ((base + size) < base) || ((base + size - 1) >> 32) )
|
||
|
size >>= 1;
|
||
|
|
||
|
wrmsr(MSR_MTRRphysBase(i), base);
|