From patchwork Thu Aug 10 16:24:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Zijlstra X-Patchwork-Id: 9894127 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CE29860325 for ; Thu, 10 Aug 2017 16:27:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BDB9028AD3 for ; Thu, 10 Aug 2017 16:27:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B268E28B2A; Thu, 10 Aug 2017 16:27:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 0466928AD3 for ; Thu, 10 Aug 2017 16:27:42 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dfqGf-0001jV-2j; Thu, 10 Aug 2017 16:25:05 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dfqGd-0001jN-I2 for xen-devel@lists.xenproject.org; Thu, 10 Aug 2017 16:25:03 +0000 Received: from [193.109.254.147] by server-3.bemta-6.messagelabs.com id BA/C5-03044-ED88C895; Thu, 10 Aug 2017 16:25:02 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrNIsWRWlGSWpSXmKPExsXiaHS5VfdeR0+ kQd9VTovvWyYzOTB6HP5whSWAMYo1My8pvyKBNePuhZmsBY+NKj4encDSwHhHq4uRi4NF4ASb xKL/R9lBHCGB24wSLRMeM0M4TYwSb+ctYOpi5AQqU5X4vOQLYxcjBwebgLbEtQ4fkLCIgLLEx 9ZesGZmgSuMEjPmHWEESQgLWErM728C6+UV8JXYv/kVC4gtJBAjMfPfWnaIuKDEyZlPwOLMAl oSN/69ZAKZzywgLbH8HweIySlgIjHnpAxIhaiAisTSS62sExj5ZyFpnoWkeRZC8wJG5lWMGsW pRWWpRbpGFnpJRZnpGSW5iZk5uoYGZnq5qcXFiempOYlJxXrJ+bmbGIFByAAEOxjPrw08xCjJ waQkylv8qTtSiC8pP6UyI7E4I76oNCe1+BCjDAeHkgTv4vaeSCHBotT01Iq0zBxgPMCkJTh4l ER4M0DSvMUFibnFmekQqVOMxhwbVq//wsTRMePnNyYhlrz8vFQpcd7nIKUCIKUZpXlwg2Bxeo lRVkqYlxHoNCGegtSi3MwSVPlXjOIcjErCvBrAqBfiycwrgdv3CugUJqBTInw7QU4pSURISTU wunvWOjrZbLnd8iVb7OTM2sDTTxyNnxls1H7xYL+oLt+tM8o93gwveR/k8rEqCcxcdyM6L0KK LdNi3TYB/WyTV5lTvj0o+6/4gzPeZ1bNw6MbDk7cuESifmuQW1toR4jHbY3/8ds6eXJFPzXpb tv2dqN4c1qkzJ8v355Nnpwr+ryr8HXa8cvvlFiKMxINtZiLihMBIKfw8M4CAAA= X-Env-Sender: peterz@infradead.org X-Msg-Ref: server-16.tower-27.messagelabs.com!1502382300!110932183!1 X-Originating-IP: [65.50.211.133] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.45; banners=-,-,- X-VirusChecked: Checked Received: (qmail 28028 invoked from network); 10 Aug 2017 16:25:01 -0000 Received: from bombadil.infradead.org (HELO bombadil.infradead.org) (65.50.211.133) by server-16.tower-27.messagelabs.com with AES256-GCM-SHA384 encrypted SMTP; 10 Aug 2017 16:25:01 -0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=In-Reply-To:Content-Type:MIME-Version :References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=p9SmWEgcNOGXu35BIRTUshDAbZR1EuFN+DVR6H35KEM=; b=BQyHgYCjB5C1edeAm1t1XjuzW SQ0rm1tHN0WX8h/xU2lWEGpIHf6oQjZZu4me6SKU900wH13vT8tyv5qzgAvxmGpBfv+Em8X6f/En1 /GZsKVfUTfkZNqz5xq/Ardx++77FvF2+e1d7hl9rU61ifB6aztkLXgoSp5et2d0bXPZlGiTTJ7bjs ZqD+8hoYlh0hM9s4qdkne449nXZyaaZGEe03idYbE7DmrzWGOS5iQKfjEW12WhS5H7WFCCiIFPxqa q/tLN+7iUpp4P6hMDizj21+WBHxp+GtP2tRfQ30DzLz8wF2JSAHaVzIYJCqJk3rWvhMV00719xy8c XuvP8vd1A==; Received: from j217100.upc-j.chello.nl ([24.132.217.100] helo=hirez.programming.kicks-ass.net) by bombadil.infradead.org with esmtpsa (Exim 4.87 #1 (Red Hat Linux)) id 1dfqGV-0004W0-EG; Thu, 10 Aug 2017 16:24:55 +0000 Received: by hirez.programming.kicks-ass.net (Postfix, from userid 1000) id 95171203C0CA6; Thu, 10 Aug 2017 18:24:53 +0200 (CEST) Date: Thu, 10 Aug 2017 18:24:53 +0200 From: Peter Zijlstra To: Juergen Gross Message-ID: <20170810162453.umt72mwdvvzitene@hirez.programming.kicks-ass.net> References: <20170810125254.1347-1-jgross@suse.com> <20170810125254.1347-2-jgross@suse.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20170810125254.1347-2-jgross@suse.com> User-Agent: NeoMutt/20170609 (1.8.3) Cc: lguest@lists.ozlabs.org, rusty@rustcorp.com.au, x86@kernel.org, linux-kernel@vger.kernel.org, mingo@redhat.com, hpa@zytor.com, xen-devel@lists.xenproject.org, tglx@linutronix.de, boris.ostrovsky@oracle.com Subject: Re: [Xen-devel] [PATCH 1/3] paravirt,xen: remove xen_patch() X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP On Thu, Aug 10, 2017 at 02:52:52PM +0200, Juergen Gross wrote: > Xen's paravirt patch function xen_patch() does some special casing for > irq_ops functions to apply relocations when those functions can be > patched inline instead of calls. > > Unfortunately none of the special case function replacements is small > enough to be patches inline, so the special case never applies. > > As xen_patch() will call paravirt_patch_default() in all cases it can > be just dropped. > > Signed-off-by: Juergen Gross > --- > arch/x86/xen/enlighten_pv.c | 59 +-------------------------------------------- > 1 file changed, 1 insertion(+), 58 deletions(-) > - SITE(pv_irq_ops, irq_enable); > - SITE(pv_irq_ops, irq_disable); > - SITE(pv_irq_ops, save_fl); > - SITE(pv_irq_ops, restore_fl); You forgot to remove the actual ASM that's then never used either. arch/x86/xen/Makefile | 2 +- arch/x86/xen/xen-asm.S | 150 ------------------------------------------------- arch/x86/xen/xen-ops.h | 12 ---- 3 files changed, 1 insertion(+), 163 deletions(-) diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile index bced7a369a11..551e12ba2a7b 100644 --- a/arch/x86/xen/Makefile +++ b/arch/x86/xen/Makefile @@ -14,7 +14,7 @@ CFLAGS_enlighten_pv.o := $(nostackp) CFLAGS_mmu_pv.o := $(nostackp) obj-y := enlighten.o multicalls.o mmu.o irq.o \ - time.o xen-asm.o xen-asm_$(BITS).o \ + time.o xen-asm_$(BITS).o \ grant-table.o suspend.o platform-pci-unplug.o obj-$(CONFIG_XEN_PVHVM) += enlighten_hvm.o mmu_hvm.o suspend_hvm.o diff --git a/arch/x86/xen/xen-asm.S b/arch/x86/xen/xen-asm.S deleted file mode 100644 index eff224df813f..000000000000 --- a/arch/x86/xen/xen-asm.S +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Asm versions of Xen pv-ops, suitable for either direct use or - * inlining. The inline versions are the same as the direct-use - * versions, with the pre- and post-amble chopped off. - * - * This code is encoded for size rather than absolute efficiency, with - * a view to being able to inline as much as possible. - * - * We only bother with direct forms (ie, vcpu in percpu data) of the - * operations here; the indirect forms are better handled in C, since - * they're generally too large to inline anyway. - */ - -#include -#include -#include -#include - -#include "xen-asm.h" - -/* - * Enable events. This clears the event mask and tests the pending - * event status with one and operation. If there are pending events, - * then enter the hypervisor to get them handled. - */ -ENTRY(xen_irq_enable_direct) - FRAME_BEGIN - /* Unmask events */ - movb $0, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask - - /* - * Preempt here doesn't matter because that will deal with any - * pending interrupts. The pending check may end up being run - * on the wrong CPU, but that doesn't hurt. - */ - - /* Test for pending */ - testb $0xff, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_pending - jz 1f - -2: call check_events -1: -ENDPATCH(xen_irq_enable_direct) - FRAME_END - ret - ENDPROC(xen_irq_enable_direct) - RELOC(xen_irq_enable_direct, 2b+1) - - -/* - * Disabling events is simply a matter of making the event mask - * non-zero. - */ -ENTRY(xen_irq_disable_direct) - movb $1, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask -ENDPATCH(xen_irq_disable_direct) - ret - ENDPROC(xen_irq_disable_direct) - RELOC(xen_irq_disable_direct, 0) - -/* - * (xen_)save_fl is used to get the current interrupt enable status. - * Callers expect the status to be in X86_EFLAGS_IF, and other bits - * may be set in the return value. We take advantage of this by - * making sure that X86_EFLAGS_IF has the right value (and other bits - * in that byte are 0), but other bits in the return value are - * undefined. We need to toggle the state of the bit, because Xen and - * x86 use opposite senses (mask vs enable). - */ -ENTRY(xen_save_fl_direct) - testb $0xff, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask - setz %ah - addb %ah, %ah -ENDPATCH(xen_save_fl_direct) - ret - ENDPROC(xen_save_fl_direct) - RELOC(xen_save_fl_direct, 0) - - -/* - * In principle the caller should be passing us a value return from - * xen_save_fl_direct, but for robustness sake we test only the - * X86_EFLAGS_IF flag rather than the whole byte. After setting the - * interrupt mask state, it checks for unmasked pending events and - * enters the hypervisor to get them delivered if so. - */ -ENTRY(xen_restore_fl_direct) - FRAME_BEGIN -#ifdef CONFIG_X86_64 - testw $X86_EFLAGS_IF, %di -#else - testb $X86_EFLAGS_IF>>8, %ah -#endif - setz PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask - /* - * Preempt here doesn't matter because that will deal with any - * pending interrupts. The pending check may end up being run - * on the wrong CPU, but that doesn't hurt. - */ - - /* check for unmasked and pending */ - cmpw $0x0001, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_pending - jnz 1f -2: call check_events -1: -ENDPATCH(xen_restore_fl_direct) - FRAME_END - ret - ENDPROC(xen_restore_fl_direct) - RELOC(xen_restore_fl_direct, 2b+1) - - -/* - * Force an event check by making a hypercall, but preserve regs - * before making the call. - */ -ENTRY(check_events) - FRAME_BEGIN -#ifdef CONFIG_X86_32 - push %eax - push %ecx - push %edx - call xen_force_evtchn_callback - pop %edx - pop %ecx - pop %eax -#else - push %rax - push %rcx - push %rdx - push %rsi - push %rdi - push %r8 - push %r9 - push %r10 - push %r11 - call xen_force_evtchn_callback - pop %r11 - pop %r10 - pop %r9 - pop %r8 - pop %rdi - pop %rsi - pop %rdx - pop %rcx - pop %rax -#endif - FRAME_END - ret -ENDPROC(check_events) diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h index 0d5004477db6..7b54fd7e9915 100644 --- a/arch/x86/xen/xen-ops.h +++ b/arch/x86/xen/xen-ops.h @@ -129,18 +129,6 @@ static inline void __init xen_efi_init(void) } #endif -/* Declare an asm function, along with symbols needed to make it - inlineable */ -#define DECL_ASM(ret, name, ...) \ - __visible ret name(__VA_ARGS__); \ - extern char name##_end[] __visible; \ - extern char name##_reloc[] __visible - -DECL_ASM(void, xen_irq_enable_direct, void); -DECL_ASM(void, xen_irq_disable_direct, void); -DECL_ASM(unsigned long, xen_save_fl_direct, void); -DECL_ASM(void, xen_restore_fl_direct, unsigned long); - /* These are not functions, and cannot be called normally */ __visible void xen_iret(void); __visible void xen_sysret32(void);