From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from e23smtp03.au.ibm.com (e23smtp03.au.ibm.com [202.81.31.145]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "e23smtp03.au.ibm.com", Issuer "GeoTrust SSL CA" (not verified)) by ozlabs.org (Postfix) with ESMTPS id 202C22C0141 for ; Sat, 27 Apr 2013 19:34:37 +1000 (EST) Received: from /spool/local by e23smtp03.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Sat, 27 Apr 2013 19:26:46 +1000 Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [9.190.235.152]) by d23dlp02.au.ibm.com (Postfix) with ESMTP id ED2F42BB004F for ; Sat, 27 Apr 2013 19:34:32 +1000 (EST) Received: from d23av02.au.ibm.com (d23av02.au.ibm.com [9.190.235.138]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r3R9KjJF13172774 for ; Sat, 27 Apr 2013 19:20:45 +1000 Received: from d23av02.au.ibm.com (loopback [127.0.0.1]) by d23av02.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r3R9YWi2012356 for ; Sat, 27 Apr 2013 19:34:32 +1000 Message-ID: <517B9BA1.50202@linux.vnet.ibm.com> Date: Sat, 27 Apr 2013 17:34:25 +0800 From: Mike Qiu MIME-Version: 1.0 To: Paul Mackerras Subject: Re: [PATCH] powerpc: Fix "attempt to move .org backwards" error References: <20130426035140.GA5796@drongo> In-Reply-To: <20130426035140.GA5796@drongo> Content-Type: text/plain; charset=UTF-8; format=flowed Cc: linuxppc-dev@ozlabs.org, Chen Gang List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 于 2013/4/26 11:51, Paul Mackerras 写道: > Building a 64-bit powerpc kernel with PR KVM enabled currently gives > this error: > > AS arch/powerpc/kernel/head_64.o > arch/powerpc/kernel/exceptions-64s.S: Assembler messages: > arch/powerpc/kernel/exceptions-64s.S:258: Error: attempt to move .org backwards > make[2]: *** [arch/powerpc/kernel/head_64.o] Error 1 > > This happens because the MASKABLE_EXCEPTION_PSERIES macro turns into > 33 instructions, but we only have space for 32 at the decrementer > interrupt vector (from 0x900 to 0x980). > > In the code generated by the MASKABLE_EXCEPTION_PSERIES macro, we > currently have two instances of the HMT_MEDIUM macro, which has the > effect of setting the SMT thread priority to medium. One is the > first instruction, and is overwritten by a no-op on processors where > we save the PPR (processor priority register), that is, POWER7 or > later. The other is after we have saved the PPR. > > In order to reduce the code at 0x900 by one instruction, we omit the > first HMT_MEDIUM. On processors without SMT this will have no effect > since HMT_MEDIUM is a no-op there. On POWER5 and RS64 machines this > will mean that the first few instructions take a little longer in the > case where a decrementer interrupt occurs when the hardware thread is > running at low SMT priority. On POWER6 and later machines, the > hardware automatically boosts the thread priority when a decrementer > interrupt is taken if the thread priority was below medium, so this > change won't make any difference. > > The alternative would be to branch out of line after saving the CFAR. > However, that would incur an extra overhead on all processors, whereas > the approach adopted here only adds overhead on older threaded processors. > > Signed-off-by: Paul Mackerras > --- > arch/powerpc/include/asm/exception-64s.h | 2 +- > arch/powerpc/kernel/exceptions-64s.S | 7 ++++++- > 2 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h > index 05e6d2e..8e5fae8 100644 > --- a/arch/powerpc/include/asm/exception-64s.h > +++ b/arch/powerpc/include/asm/exception-64s.h > @@ -414,7 +414,6 @@ label##_relon_hv: \ > #define SOFTEN_NOTEST_HV(vec) _SOFTEN_TEST(EXC_HV, vec) > > #define __MASKABLE_EXCEPTION_PSERIES(vec, label, h, extra) \ > - HMT_MEDIUM_PPR_DISCARD; \ > SET_SCRATCH0(r13); /* save r13 */ \ > EXCEPTION_PROLOG_0(PACA_EXGEN); \ > __EXCEPTION_PROLOG_1(PACA_EXGEN, extra, vec); \ > @@ -427,6 +426,7 @@ label##_relon_hv: \ > . = loc; \ > .globl label##_pSeries; \ > label##_pSeries: \ > + HMT_MEDIUM_PPR_DISCARD; \ > _MASKABLE_EXCEPTION_PSERIES(vec, label, \ > EXC_STD, SOFTEN_TEST_PR) > > diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S > index 56bd923..574db3f 100644 > --- a/arch/powerpc/kernel/exceptions-64s.S > +++ b/arch/powerpc/kernel/exceptions-64s.S > @@ -235,6 +235,7 @@ instruction_access_slb_pSeries: > .globl hardware_interrupt_hv; > hardware_interrupt_pSeries: > hardware_interrupt_hv: > + HMT_MEDIUM_PPR_DISCARD > BEGIN_FTR_SECTION > _MASKABLE_EXCEPTION_PSERIES(0x502, hardware_interrupt, > EXC_HV, SOFTEN_TEST_HV) > @@ -254,7 +255,11 @@ hardware_interrupt_hv: > STD_EXCEPTION_PSERIES(0x800, 0x800, fp_unavailable) > KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0x800) > > - MASKABLE_EXCEPTION_PSERIES(0x900, 0x900, decrementer) > + . = 0x900 > + .globl decrementer_pSeries > +decrementer_pSeries: > + _MASKABLE_EXCEPTION_PSERIES(0x900, decrementer, EXC_STD, SOFTEN_TEST_PR) > + > STD_EXCEPTION_HV(0x980, 0x982, hdecrementer) > > MASKABLE_EXCEPTION_PSERIES(0xa00, 0xa00, doorbell_super) test-by: Mike Qiu It's workable for me. but I just use this patch to compile and boot up the machine. not do any performance test:)