mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
EFI: support default attributes to map Runtime service areas with none given
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
For example on Dell machines we see:
(XEN) 00000fed18000-00000fed19fff type=11 attr=8000000000000000
(XEN) Unknown cachability for MFNs 0xfed18-0xfed19
Let's allow them to be mapped as UC.
We also alter the 'efi-rs' to be 'efi=rs' or 'efi=no-rs'.
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
master commit: 74cdad5dae
master date: 2015-06-10 12:04:07 +0200
This commit is contained in:
1 parent
cbf41e0514
commit
e254b1900e
2 files changed
+45
-7
No files matched your search
@@ -597,12 +597,24 @@ Either force retrieval of monitor EDID information via VESA DDC, or
|
||||
disable it (edid=no). This option should not normally be required
|
||||
except for debugging purposes.
|
||||
|
||||
### efi-rs
|
||||
> `= <boolean>`
|
||||
### efi
|
||||
> `= List of [ rs | attr ]`
|
||||
|
||||
All options are of boolean kind and can be prefixed with `no-` to
|
||||
effect the inverse meaning.
|
||||
|
||||
> `rs`
|
||||
|
||||
> Default: `true`
|
||||
|
||||
Force or disable use of EFI runtime services.
|
||||
>> Force or disable use of EFI runtime services.
|
||||
|
||||
> `attr=uc`
|
||||
|
||||
> Default: `off`
|
||||
|
||||
>> Allows mapping of RuntimeServices which have no cachability attribute
|
||||
>> set as UC.
|
||||
|
||||
### extra\_guest\_irqs
|
||||
> `= [<domU number>][,<dom0 number>]`
|
||||
|
||||
+30
-4
@@ -1101,7 +1101,31 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
|
||||
#ifndef CONFIG_ARM /* TODO - runtime service support */
|
||||
|
||||
static bool_t __initdata efi_rs_enable = 1;
|
||||
boolean_param("efi-rs", efi_rs_enable);
|
||||
static bool_t __initdata efi_map_uc;
|
||||
|
||||
static void __init parse_efi_param(char *s)
|
||||
{
|
||||
char *ss;
|
||||
|
||||
do {
|
||||
bool_t val = !!strncmp(s, "no-", 3);
|
||||
|
||||
if ( !val )
|
||||
s += 3;
|
||||
|
||||
ss = strchr(s, ',');
|
||||
if ( ss )
|
||||
*ss = '\0';
|
||||
|
||||
if ( !strcmp(s, "rs") )
|
||||
efi_rs_enable = val;
|
||||
else if ( !strcmp(s, "attr=uc") )
|
||||
efi_map_uc = val;
|
||||
|
||||
s = ss + 1;
|
||||
} while ( ss );
|
||||
}
|
||||
custom_param("efi", parse_efi_param);
|
||||
|
||||
#ifndef USE_SET_VIRTUAL_ADDRESS_MAP
|
||||
static __init void copy_mapping(unsigned long mfn, unsigned long end,
|
||||
@@ -1199,9 +1223,11 @@ void __init efi_init_memory(void)
|
||||
prot |= _PAGE_PWT | _PAGE_PCD | MAP_SMALL_PAGES;
|
||||
else
|
||||
{
|
||||
printk(XENLOG_ERR "Unknown cachability for MFNs %#lx-%#lx\n",
|
||||
smfn, emfn - 1);
|
||||
continue;
|
||||
printk(XENLOG_ERR "Unknown cachability for MFNs %#lx-%#lx%s\n",
|
||||
smfn, emfn - 1, efi_map_uc ? ", assuming UC" : "");
|
||||
if ( !efi_map_uc )
|
||||
continue;
|
||||
prot |= _PAGE_PWT | _PAGE_PCD | MAP_SMALL_PAGES;
|
||||
}
|
||||
|
||||
if ( desc->Attribute & EFI_MEMORY_WP )
|
||||
|
||||