From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH] x86/hap: Initialise HAP logdirty function pointers once in hap_domain_init() Date: Fri, 8 Aug 2014 15:12:21 +0100 Message-ID: <1407507141-30497-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Xen-devel Cc: Andrew Cooper , Tim Deegan , Jan Beulich List-Id: xen-devel@lists.xenproject.org rather than repeatedly initialising them each time logdirty is enabled or the vram tracking area changes. Signed-off-by: Andrew Cooper CC: Jan Beulich CC: Tim Deegan --- xen/arch/x86/mm/hap/hap.c | 15 +++++---------- xen/arch/x86/mm/paging.c | 2 -- xen/include/asm-x86/hap.h | 1 - 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c index 21f57c1..abf3d7a 100644 --- a/xen/arch/x86/mm/hap/hap.c +++ b/xen/arch/x86/mm/hap/hap.c @@ -81,7 +81,6 @@ int hap_track_dirty_vram(struct domain *d, if ( !paging_mode_log_dirty(d) ) { - hap_logdirty_init(d); rc = paging_log_dirty_enable(d, 0); if ( rc ) goto out; @@ -219,15 +218,6 @@ static void hap_clean_dirty_bitmap(struct domain *d) flush_tlb_mask(d->domain_dirty_cpumask); } -void hap_logdirty_init(struct domain *d) -{ - - /* Reinitialize logdirty mechanism */ - paging_log_dirty_init(d, hap_enable_log_dirty, - hap_disable_log_dirty, - hap_clean_dirty_bitmap); -} - /************************************************/ /* HAP SUPPORT FUNCTIONS */ /************************************************/ @@ -438,6 +428,11 @@ static void hap_destroy_monitor_table(struct vcpu* v, mfn_t mmfn) void hap_domain_init(struct domain *d) { INIT_PAGE_LIST_HEAD(&d->arch.paging.hap.freelist); + + /* Use HAP logdirty mechanism. */ + paging_log_dirty_init(d, hap_enable_log_dirty, + hap_disable_log_dirty, + hap_clean_dirty_bitmap); } /* return 0 for success, -errno for failure */ diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c index 32764ba..455000d 100644 --- a/xen/arch/x86/mm/paging.c +++ b/xen/arch/x86/mm/paging.c @@ -594,8 +594,6 @@ int paging_domctl(struct domain *d, xen_domctl_shadow_op_t *sc, break; /* Else fall through... */ case XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY: - if ( hap_enabled(d) ) - hap_logdirty_init(d); return paging_log_dirty_enable(d, 1); case XEN_DOMCTL_SHADOW_OP_OFF: diff --git a/xen/include/asm-x86/hap.h b/xen/include/asm-x86/hap.h index 5161927..7876527 100644 --- a/xen/include/asm-x86/hap.h +++ b/xen/include/asm-x86/hap.h @@ -56,7 +56,6 @@ int hap_enable(struct domain *d, u32 mode); void hap_final_teardown(struct domain *d); void hap_teardown(struct domain *d); void hap_vcpu_init(struct vcpu *v); -void hap_logdirty_init(struct domain *d); int hap_track_dirty_vram(struct domain *d, unsigned long begin_pfn, unsigned long nr, -- 1.7.10.4