Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:Update
xen.12882
xsa282-1.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xsa282-1.patch of Package xen.12882
Subject: x86: extend get_platform_badpages() interface From: Jan Beulich jbeulich@suse.com Wed Nov 7 09:54:07 2018 +0100 Date: Wed Nov 7 09:54:07 2018 +0100: Git: 4e69e432724ccf2514cf5539c7c63aaf31cdf4f9 Use a structure so along with an address (now frame number) an order can also be specified. This is part of XSA-282. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> master commit: 8617e69fb8307b372eeff41d55ec966dbeba36eb master date: 2018-11-07 09:32:08 +0100 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -6970,23 +6970,23 @@ void arch_dump_shared_mem_info(void) mem_sharing_get_nr_saved_mfns()); } -const unsigned long *__init get_platform_badpages(unsigned int *array_size) +const struct platform_bad_page *__init get_platform_badpages(unsigned int *array_size) { u32 igd_id; - static unsigned long __initdata bad_pages[] = { - 0x20050000, - 0x20110000, - 0x20130000, - 0x20138000, - 0x40004000, + static const struct platform_bad_page __initconst snb_bad_pages[] = { + { .mfn = 0x20050000 >> PAGE_SHIFT }, + { .mfn = 0x20110000 >> PAGE_SHIFT }, + { .mfn = 0x20130000 >> PAGE_SHIFT }, + { .mfn = 0x20138000 >> PAGE_SHIFT }, + { .mfn = 0x40004000 >> PAGE_SHIFT }, }; - *array_size = ARRAY_SIZE(bad_pages); + *array_size = ARRAY_SIZE(snb_bad_pages); igd_id = pci_conf_read32(0, 0, 2, 0, 0); - if ( !IS_SNB_GFX(igd_id) ) - return NULL; + if ( IS_SNB_GFX(igd_id) ) + return snb_bad_pages; - return bad_pages; + return NULL; } void paging_invlpg(struct vcpu *v, unsigned long va) --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -273,7 +273,7 @@ void __init init_boot_pages(paddr_t ps, unsigned long bad_spfn, bad_epfn; const char *p; #ifdef CONFIG_X86 - const unsigned long *badpage = NULL; + const struct platform_bad_page *badpage; unsigned int i, array_size; #endif @@ -298,8 +298,8 @@ void __init init_boot_pages(paddr_t ps, { for ( i = 0; i < array_size; i++ ) { - bootmem_region_zap(*badpage >> PAGE_SHIFT, - (*badpage >> PAGE_SHIFT) + 1); + bootmem_region_zap(badpage->mfn, + badpage->mfn + (1U << badpage->order)); badpage++; } } --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -349,7 +349,13 @@ int is_iomem_page(unsigned long mfn); void clear_superpage_mark(struct page_info *page); -const unsigned long *get_platform_badpages(unsigned int *array_size); +struct platform_bad_page { + unsigned long mfn; + unsigned int order; +}; + +const struct platform_bad_page *get_platform_badpages(unsigned int *array_size); + /* Per page locks: * page_lock() is used for two purposes: pte serialization, and memory sharing. *
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor