Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP7:GA
xen.17121
5dbafa7f-x86-mm-collapse-PTF_partial_.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 5dbafa7f-x86-mm-collapse-PTF_partial_.patch of Package xen.17121
# Commit d28fe10c50e59569c050878226dcd95dc741810f # Date 2019-10-31 16:15:11 +0100 # Author George Dunlap <george.dunlap@citrix.com> # Committer Jan Beulich <jbeulich@suse.com> x86/mm: Collapse PTF_partial_set and PTF_partial_general_ref into one ...now that they are equivalent. No functional change intended. Reported-by: George Dunlap <george.dunlap@citrix.com> Signed-off-by: George Dunlap <george.dunlap@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -653,13 +653,12 @@ static int __get_page_type(struct page_i /* * The following flags are used to specify behavior of various get and - * put commands. The first two are also stored in page->partial_flags - * to indicate the state of the page pointed to by + * put commands. The first is also stored in page->partial_flags to + * indicate the state of the page pointed to by * page->pte[page->nr_validated_entries]. See the comment in mm.h for * more information. */ #define PTF_partial_set (1 << 0) -#define PTF_partial_general_ref (1 << 1) #define PTF_preemptible (1 << 2) #define PTF_defer (1 << 3) #define PTF_retain_ref_on_restart (1 << 4) @@ -671,13 +670,10 @@ static int get_page_and_type_from_mfn( struct page_info *page = mfn_to_page(mfn); int rc; bool preemptible = flags & PTF_preemptible, - partial_ref = flags & PTF_partial_general_ref, partial_set = flags & PTF_partial_set, retain_ref = flags & PTF_retain_ref_on_restart; - ASSERT(partial_ref == partial_set); - - if ( likely(!partial_ref) && + if ( likely(!partial_set) && unlikely(!get_page_from_mfn(mfn, d)) ) return -EINVAL; @@ -687,14 +683,14 @@ static int get_page_and_type_from_mfn( * Retain the refcount if: * - page is fully validated (rc == 0) * - page is not validated (rc < 0) but: - * - We came in with a reference (partial_ref) + * - We came in with a reference (partial_set) * - page is partially validated (rc == -ERESTART), and the * caller has asked the ref to be retained in that case * - page is partially validated but there's been an error * (page == current->arch.old_guest_table) * - * The partial_ref-on-error clause is worth an explanation. There - * are two scenarios where partial_ref might be true coming in: + * The partial_set-on-error clause is worth an explanation. There + * are two scenarios where partial_set might be true coming in: * - mfn has been partially promoted / demoted as type `type`; * i.e. has PGT_partial set * - mfn has been partially demoted as L(type+1) (i.e., a linear @@ -717,7 +713,7 @@ static int get_page_and_type_from_mfn( * count retained unless we succeeded, or the operation was * preemptible. */ - if ( likely(!rc) || partial_ref ) + if ( likely(!rc) || partial_set ) /* nothing */; else if ( page == current->arch.old_guest_table || (retain_ref && rc == -ERESTART) ) @@ -1384,13 +1380,7 @@ static int put_page_from_l2e(l2_pgentry_ struct page_info *pg = l2e_get_page(l2e); struct page_info *ptpg = mfn_to_page(_mfn(pfn)); - if ( (flags & (PTF_partial_set | PTF_partial_general_ref)) == - PTF_partial_set ) - { - /* partial_set should always imply partial_ref */ - BUG(); - } - else if ( flags & PTF_defer ) + if ( flags & PTF_defer ) { current->arch.old_guest_ptpg = ptpg; current->arch.old_guest_table = pg; @@ -1430,13 +1420,6 @@ static int put_page_from_l3e(l3_pgentry_ pg = l3e_get_page(l3e); - if ( (flags & (PTF_partial_set | PTF_partial_general_ref)) == - PTF_partial_set ) - { - /* partial_set should always imply partial_ref */ - BUG(); - } - if ( flags & PTF_defer ) { current->arch.old_guest_ptpg = mfn_to_page(_mfn(pfn)); @@ -1461,13 +1444,6 @@ static int put_page_from_l4e(l4_pgentry_ { struct page_info *pg = l4e_get_page(l4e); - if ( (flags & (PTF_partial_set | PTF_partial_general_ref)) == - PTF_partial_set ) - { - /* partial_set should always imply partial_ref */ - BUG(); - } - if ( flags & PTF_defer ) { current->arch.old_guest_ptpg = mfn_to_page(_mfn(pfn)); @@ -1680,7 +1656,7 @@ static int alloc_l3_table(struct page_in { page->nr_validated_ptes = i; /* Set 'set', leave 'general ref' set if this entry was set */ - page->partial_flags = PTF_partial_set | PTF_partial_general_ref; + page->partial_flags = PTF_partial_set; } else if ( rc == -EINTR && i ) { @@ -1849,7 +1825,7 @@ static int alloc_l4_table(struct page_in { page->nr_validated_ptes = i; /* Set 'set', leave 'general ref' set if this entry was set */ - page->partial_flags = PTF_partial_set | PTF_partial_general_ref; + page->partial_flags = PTF_partial_set; } else if ( rc < 0 ) { @@ -1947,7 +1923,7 @@ static int free_l2_table(struct page_inf else if ( rc == -ERESTART ) { page->nr_validated_ptes = i; - page->partial_flags = PTF_partial_set | PTF_partial_general_ref; + page->partial_flags = PTF_partial_set; } else if ( rc == -EINTR && i < L2_PAGETABLE_ENTRIES - 1 ) { @@ -1995,7 +1971,7 @@ static int free_l3_table(struct page_inf if ( rc == -ERESTART ) { page->nr_validated_ptes = i; - page->partial_flags = PTF_partial_set | PTF_partial_general_ref; + page->partial_flags = PTF_partial_set; } else if ( rc == -EINTR && i < L3_PAGETABLE_ENTRIES - 1 ) { @@ -2026,7 +2002,7 @@ static int free_l4_table(struct page_inf if ( rc == -ERESTART ) { page->nr_validated_ptes = i; - page->partial_flags = PTF_partial_set | PTF_partial_general_ref; + page->partial_flags = PTF_partial_set; } else if ( rc == -EINTR && i < L4_PAGETABLE_ENTRIES - 1 ) { --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -162,7 +162,7 @@ struct page_info * operation on the current page. (That page may or may not * still have PGT_partial set.) * - * If PTF_partial_general_ref is set, then the PTE at + * Additionally, if PTF_partial_set is set, then the PTE at * @nr_validated_ptef holds a general reference count for the * page. * @@ -171,23 +171,20 @@ struct page_info * interrupted * - During validation, if an invalid entry is encountered and * validation is preemptible - * - During validation, if PTF_partial_general_ref was set on - * this entry to begin with (perhaps because it picked up a + * - During validation, if PTF_partial_set was set on this + * entry to begin with (perhaps because it picked up a * previous operation) * - * When resuming validation, if PTF_partial_general_ref is - * clear, then a general reference must be re-acquired; if it - * is set, no reference should be acquired. - * - * When resuming de-validation, if PTF_partial_general_ref is - * clear, no reference should be dropped; if it is set, a - * reference should be dropped. + * When resuming validation, if PTF_partial_set is clear, then + * a general reference must be re-acquired; if it is set, no + * reference should be acquired. + * + * When resuming de-validation, if PTF_partial_set is clear, + * no reference should be dropped; if it is set, a reference + * should be dropped. * - * NB at the moment, PTF_partial_set should be set if and only if - * PTF_partial_general_ref is set. - * - * NB that PTF_partial_set and PTF_partial_general_ref are - * defined in mm.c, the only place where they are used. + * NB that PTF_partial_set is defined in mm.c, the only place + * where it is used. * * The 3rd field, @linear_pt_count, indicates * - by a positive value, how many same-level page table entries a page @@ -197,8 +194,8 @@ struct page_info */ struct { u16 nr_validated_ptes:PAGETABLE_ORDER + 1; - u16 :16 - PAGETABLE_ORDER - 1 - 2; - u16 partial_flags:2; + u16 :16 - PAGETABLE_ORDER - 1 - 1; + u16 partial_flags:1; s16 linear_pt_count; };
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