Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751365AbeAPQl3 (ORCPT + 1 other); Tue, 16 Jan 2018 11:41:29 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:42366 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750747AbeAPQl1 (ORCPT ); Tue, 16 Jan 2018 11:41:27 -0500 Subject: Re: [PATCH 1/3] powerpc/32: Fix hugepage allocation on 8xx at hint address To: Christophe LEROY , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Scott Wood , Nicholas Piggin Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org References: <9a5dadc10f88e2fc0ac9fb5d18c5424df33f3f4c.1515169256.git.christophe.leroy@c-s.fr> <876081by7g.fsf@linux.vnet.ibm.com> From: "Aneesh Kumar K.V" Date: Tue, 16 Jan 2018 22:11:09 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 x-cbid: 18011616-0028-0000-0000-000008FF1489 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00008389; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000246; SDB=6.00975916; UDB=6.00494672; IPR=6.00755843; MB=3.00019073; MTD=3.00000008; XFM=3.00000015; UTC=2018-01-16 16:41:22 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18011616-0029-0000-0000-00003929C9F0 Message-Id: <945affcd-b25c-bc6e-68e5-8bbbcd31c0fd@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-01-16_05:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1801160232 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On 01/16/2018 10:01 PM, Christophe LEROY wrote: > >>> diff --git a/arch/powerpc/include/asm/page_64.h >>> b/arch/powerpc/include/asm/page_64.h >>> index 56234c6fcd61..a7baef5bbe5f 100644 >>> --- a/arch/powerpc/include/asm/page_64.h >>> +++ b/arch/powerpc/include/asm/page_64.h >>> @@ -91,30 +91,13 @@ extern u64 ppc64_pft_size; >>>   #define SLICE_LOW_SHIFT        28 >>>   #define SLICE_HIGH_SHIFT    40 >>> -#define SLICE_LOW_TOP        (0x100000000ul) >>> -#define SLICE_NUM_LOW        (SLICE_LOW_TOP >> SLICE_LOW_SHIFT) >>> +#define SLICE_LOW_TOP        (0xfffffffful) >>> +#define SLICE_NUM_LOW        ((SLICE_LOW_TOP >> SLICE_LOW_SHIFT) + 1) >>>   #define SLICE_NUM_HIGH        (H_PGTABLE_RANGE >> SLICE_HIGH_SHIFT) >> >> >> Why are you changing this? is this a bug fix? > > That's because 0x100000000ul is out of range of unsigned long on PPC32. Ok that detail was important. I missed that. > >> >>>   #define GET_LOW_SLICE_INDEX(addr)    ((addr) >> SLICE_LOW_SHIFT) >>>   #define GET_HIGH_SLICE_INDEX(addr)    ((addr) >> SLICE_HIGH_SHIFT) >>> -#ifndef __ASSEMBLY__ >>> -struct mm_struct; >>> - >>> -extern unsigned long slice_get_unmapped_area(unsigned long addr, >>> -                         unsigned long len, >>> -                         unsigned long flags, >>> -                         unsigned int psize, >>> -                         int topdown); >>> - >>> -extern unsigned int get_slice_psize(struct mm_struct *mm, >>> -                    unsigned long addr); >>> - >>> -extern void slice_set_user_psize(struct mm_struct *mm, unsigned int >>> psize); >>> -extern void slice_set_range_psize(struct mm_struct *mm, unsigned >>> long start, >>> -                  unsigned long len, unsigned int psize); >>> - >>> -#endif /* __ASSEMBLY__ */ >>>   #else >>>   #define slice_init() >>>   #ifdef CONFIG_PPC_BOOK3S_64 >>> diff --git a/arch/powerpc/kernel/setup-common.c >>> b/arch/powerpc/kernel/setup-common.c >>> index 9d213542a48b..a285e1067713 100644 >>> --- a/arch/powerpc/kernel/setup-common.c >>> +++ b/arch/powerpc/kernel/setup-common.c >>> @@ -928,7 +928,7 @@ void __init setup_arch(char **cmdline_p) >>>       if (!radix_enabled()) >>>           init_mm.context.slb_addr_limit = DEFAULT_MAP_WINDOW_USER64; >>>   #else >>> -#error    "context.addr_limit not initialized." >>> +    init_mm.context.slb_addr_limit = DEFAULT_MAP_WINDOW; >>>   #endif >> >> >> May be put this within #ifdef 8XX and retain the error? > > Is this error really worth it ? > I wanted to avoid spreading too many #ifdef PPC_8xx, but ok I can do that. > >> >>>   #endif >>> diff --git a/arch/powerpc/mm/8xx_mmu.c b/arch/powerpc/mm/8xx_mmu.c >>> index f29212e40f40..0be77709446c 100644 >>> --- a/arch/powerpc/mm/8xx_mmu.c >>> +++ b/arch/powerpc/mm/8xx_mmu.c >>> @@ -192,7 +192,7 @@ void set_context(unsigned long id, pgd_t *pgd) >>>       mtspr(SPRN_M_TW, __pa(pgd) - offset); >>>       /* Update context */ >>> -    mtspr(SPRN_M_CASID, id); >>> +    mtspr(SPRN_M_CASID, id - 1); >>>       /* sync */ >>>       mb(); >>>   } >>> diff --git a/arch/powerpc/mm/hash_utils_64.c >>> b/arch/powerpc/mm/hash_utils_64.c >>> index 655a5a9a183d..3266b3326088 100644 >>> --- a/arch/powerpc/mm/hash_utils_64.c >>> +++ b/arch/powerpc/mm/hash_utils_64.c >>> @@ -1101,7 +1101,7 @@ static unsigned int get_paca_psize(unsigned >>> long addr) >>>       unsigned char *hpsizes; >>>       unsigned long index, mask_index; >>> -    if (addr < SLICE_LOW_TOP) { >>> +    if (addr <= SLICE_LOW_TOP) { >> >> If this is part of bug fix, please do it as part of seperate patch >> with details > > As explained above, in order to allow comparison to work on PPC32, > SLICE_LOW_TOP has to be 0xffffffff instead of 0x100000000 > > How should I split in separate patches ? Something like ? > 1/ Slice support for PPC32 > 2/ Activate slice for 8xx Yes something like that. Will you be able to avoid that if (SLICE_NUM_HIGH) from the code? That makes the code ugly. Right now i don't have definite suggestion on what we could do though. -aneesh