[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging-4.9] x86/mm: Collapse PTF_partial_set and PTF_partial_general_ref into one
commit cadd66abff583b6b66902eb7f4e4be1be0bec57c Author: George Dunlap <george.dunlap@xxxxxxxxxx> AuthorDate: Mon Nov 4 15:06:50 2019 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Mon Nov 4 15:06:50 2019 +0100 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@xxxxxxxxxx> Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> master commit: d28fe10c50e59569c050878226dcd95dc741810f master date: 2019-10-31 16:15:11 +0100 --- xen/arch/x86/mm.c | 50 +++++++++++++----------------------------------- xen/include/asm-x86/mm.h | 29 +++++++++++++--------------- 2 files changed, 26 insertions(+), 53 deletions(-) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 0ac8c4592d..ee91c69537 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -772,13 +772,12 @@ static int __get_page_type(struct page_info *page, unsigned long type, /* * 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) @@ -791,13 +790,10 @@ static int get_page_and_type_from_pagenr(unsigned long page_nr, struct page_info *page = mfn_to_page(page_nr); 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_pagenr(page_nr, d)) ) return -EINVAL; @@ -807,14 +803,14 @@ static int get_page_and_type_from_pagenr(unsigned long page_nr, * 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 @@ -837,7 +833,7 @@ static int get_page_and_type_from_pagenr(unsigned long page_nr, * 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) ) @@ -1540,13 +1536,7 @@ static int put_page_from_l2e(l2_pgentry_t l2e, unsigned long pfn, struct page_info *pg = l2e_get_page(l2e); struct page_info *ptpg = mfn_to_page(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; @@ -1586,13 +1576,6 @@ static int put_page_from_l3e(l3_pgentry_t l3e, unsigned long pfn, 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(pfn); @@ -1617,13 +1600,6 @@ static int put_page_from_l4e(l4_pgentry_t l4e, unsigned long pfn, { 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(pfn); @@ -1850,7 +1826,7 @@ static int alloc_l3_table(struct page_info *page) { 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 ) { @@ -1953,7 +1929,7 @@ static int alloc_l4_table(struct page_info *page) { 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 ) { @@ -2052,7 +2028,7 @@ static int free_l2_table(struct page_info *page) 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 ) { @@ -2103,7 +2079,7 @@ static int free_l3_table(struct page_info *page) 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 ) { @@ -2134,7 +2110,7 @@ static int free_l4_table(struct page_info *page) 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 ) { diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h index 6ab642eb18..7b05589dc8 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -145,7 +145,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. * @@ -154,23 +154,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 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_general_ref is - * clear, no reference should be dropped; if it is set, a - * reference should be dropped. + * 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 @@ -180,8 +177,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; }; -- generated by git-patchbot for /home/xen/git/xen.git#staging-4.9 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |