[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/mm: Collapse PTF_partial_set and PTF_partial_general_ref into one
commit d28fe10c50e59569c050878226dcd95dc741810f Author: George Dunlap <george.dunlap@xxxxxxxxxx> AuthorDate: Thu Oct 10 17:57:49 2019 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Oct 31 16:15:11 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> --- 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 d294b09a38..0655c0570b 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -1067,13 +1067,12 @@ get_page_from_l1e( /* * 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) @@ -1085,13 +1084,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; @@ -1101,14 +1097,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 @@ -1131,7 +1127,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) ) @@ -1329,13 +1325,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(_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; @@ -1375,13 +1365,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(_mfn(pfn)); @@ -1406,13 +1389,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(_mfn(pfn)); @@ -1648,7 +1624,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 ) { @@ -1832,7 +1808,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 ) { @@ -1929,7 +1905,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 ) { @@ -1977,7 +1953,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 ) { @@ -2008,7 +1984,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 1ae2b5ea6e..320c6cd196 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -236,7 +236,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. * @@ -245,23 +245,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 @@ -271,8 +268,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#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |