From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755603AbbINPVH (ORCPT ); Mon, 14 Sep 2015 11:21:07 -0400 Received: from mail-by2on0117.outbound.protection.outlook.com ([207.46.100.117]:1888 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752209AbbINPVE (ORCPT ); Mon, 14 Sep 2015 11:21:04 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=scottwood@freescale.com; Message-ID: <1442244054.2909.66.camel@freescale.com> Subject: Re: [PATCH v3] powerpc32: memset: only use dcbz once cache is enabled From: Scott Wood To: Christophe Leroy CC: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , , , Date: Mon, 14 Sep 2015 10:20:54 -0500 In-Reply-To: <20150914062159.353701A2413@localhost.localdomain> References: <20150914062159.353701A2413@localhost.localdomain> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.16.0-fta1 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Originating-IP: [2601:448:8100:f9f:12bf:48ff:fe84:c9a0] X-ClientProxiedBy: CY1PR0101CA0024.prod.exchangelabs.com (25.162.170.34) To BY1PR03MB1481.namprd03.prod.outlook.com (25.162.210.14) X-Microsoft-Exchange-Diagnostics: 1;BY1PR03MB1481;2:GJkcYwYM9L/8qJWVLWbVYCeO7CKOE60WlAOac9YUJet1EJeG3uHFiNQh7o9AajWEYhWXUQn5kQIf+HuFEsTq/GXhaPPv5M+GTtDxvMA6OvflS9LcGuK9ewSr0nqIfmQruNntNjZvTkNqdfv38nHl/3uVaMQM741+chjGGz/LD0w=;3:HpjTkvmocMNI2SwDw8aWXfxbFFVxdXA6dojiCPjDR45ZFuBY2eK69Y54gXj92rY0ja0Ae5g9zE7oi+9MFaOL/EbUMKwn/IvtaP4l5qkPRdzA/kfX1Wp4GhNBFtpECaPw7f9HkR40uqMp6LEAMf043Q==;25:SMN+WSAF+OrBZUkzBl1JhkZFdgXdbcrKBi/QaYtzyQnl75ebWZIY2NFL2PJAnCiDdQ7Bz4LK/BSetPd56Wu17wqyz5qNp0y2z/QQ4wqsy3QHgGvpOgMAUViKT8SkFz3TwltAtxDxL3dHief30dzwKsvCOpA0xAwfNajMKFpjTbnm9WHXXTGv3DPo4eCJHjYz8dfA0/Ayg6jKEMlQ3J2ZCzDVYTHsnGX9InlTVJUo14H6rwpNwSsKPuFL7DiNNZt1r5xxcAac26aiwkBZY6s82Q== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR03MB1481; X-Microsoft-Exchange-Diagnostics: 1;BY1PR03MB1481;20:hfZ36GX/FHimo5EfnpdFNAoGd1B4gyKUSyaqqSEc/RpfeMGfctwTx+pV4ltbtshfC8Xe8Kya5c2E7KGZgAIDWEsWLNas2PLbdmllgxThvAlDR+Jxf4sbE0GqtVgOZ0QyCzYiFWToZtwczUj4L5Bek4/r+n20O1LbXGyc3DBtmXRuYBOaJ9c+q6zy+FACbNsO2rtNoNt7pQGAFZdUF2UKktrtKBitZW85BKXo/N6jQQONAwqhsE9qjYFbP+CEUe0xNHdtwUc8GIr1C9AjmlCH7TNvdtBUmLPJA/bYOD3rPgFBfQK8SR9iL/hnezH/LgCRzvVQmsWeyw9A5OFiouVdm5RAs5URUfUgdh9bF4jr4IDTssshdpbjbxzMYLd77D3xXDml1J97MLxNRYglbp+42Pmf1OG4RQmQN68OTeU2ftAlh1hW3/t/hp2hW6HNXARhGVLrTIFhqFb5j++m4IYcj5/cjOUI50GTYnXsfY4Z/EJ7Oy4R5BwyVtJaN6jGSD2j;4:a8LDY304gVGmP2MMAnYoHS4J0ljO6eqrs/C2D7P4PXiEW9aLxSaRVz4UuXpEfIJUYKC74kg8YJTK+E6zdPT+PIZ9ZrlkFWWzaa5e5dyf4XB/HqHNp7xLRPU/ckHB4IZaNFzOW9sB+QnJZgCJODEleEBEywaoq66CJrMt+SHosZsG8f2wxFYUm4N3NLqG6DljdaWehA6CnpNewsqXwClhFhXQBIXlkp+fWz54wjNBY18b6klTHf+xCeb1FRvfWq9Z4Et5ZTKO49yw+hIeZN83i7PyLrwpPeWkL/nU4Qw37ek/iKsKP0bayRnh7FwY/T1q X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(8121501046)(3002001);SRVR:BY1PR03MB1481;BCL:0;PCL:0;RULEID:;SRVR:BY1PR03MB1481; X-Forefront-PRVS: 0699FCD394 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(199003)(189002)(377424004)(24454002)(103116003)(50986999)(101416001)(77096005)(76176999)(68736005)(46102003)(5820100001)(105586002)(50466002)(92566002)(33646002)(36756003)(23676002)(86362001)(5007970100001)(5004730100002)(5001830100001)(50226001)(97736004)(4001540100001)(5001960100002)(42186005)(5001860100001)(106356001)(5001920100001)(81156007)(110136002)(189998001)(47776003)(40100003)(77156002)(64706001)(19580405001)(2950100001)(62966003)(87976001)(122386002)(99106002)(3826002)(5001840100002);DIR:OUT;SFP:1102;SCL:1;SRVR:BY1PR03MB1481;H:[IPv6:2601:448:8100:f9f:12bf:48ff:fe84:c9a0];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTFQUjAzTUIxNDgxOzIzOmFxWlM1a1NlVEtMbUE1YlU5NExjcFEyZk1J?= =?utf-8?B?aGJOTEF2Z3VEZGl2MFNiWHRreFNRU2YzTjhFR0hFMlpaTXMvb2hDcXlQV2pk?= =?utf-8?B?SzlnazVyNTBUeUU1NlRtY0RsbVNKamlQdi9vZis2K29uKzdaZVpZeXV2dWN3?= =?utf-8?B?YjBuSUgwdmNRR0pRMDBBVG5NdkdZeWp3NXBhQzY3L1ducVk3VXdHUXRjVEZS?= =?utf-8?B?MmJVZVYzcmZ5Y1M4ME53b0lZazRLQjNDU0JOSXIrSjFnUjZUUlh1TlN0WUwr?= =?utf-8?B?OUwxT3Avb05OT0QzUHVycVVzSHRUbTZnTUNLMnhOYnZ4UlZGcXdmamlqRUNa?= =?utf-8?B?a0xmNzRNVmhxb1RHckZENUlrZU96Sk9DOCs0dDZmbGVlZjBPMldGai9xeVZC?= =?utf-8?B?SUtrSURUSkpYT05ZTnJOa0NLVDE3V3JzNTVnRkJrL2pEMmYzSlNOWkVZSEw1?= =?utf-8?B?bXlScXFiaXVDVVRTR2JWcDVaMjRUNlkvU1FRWkkzWTdMK3Fya3Iwdm8wQjF6?= =?utf-8?B?U2t6NjdheHd4bUx3eUdua2w1WWNjcy84UkIxc3RwazR6RStZTGk4M21TYkJr?= =?utf-8?B?NUx4WFcxVlJKR1FYSFNGNXMvNEhlY2lsVjMzcDhNOWF4K2tGMUtPWVl3d1hG?= =?utf-8?B?SmtoM1FHb2JtcUlLYkYvKzZyNVcvSlBBUUJWV0gzaENWSnJORmNjWXhWMWZW?= =?utf-8?B?NVZNUWY2ZUIwLzBwL0huT1RyQ2ZOTmxpcG9rdWVScU9SckNIMFdQNmVKY1BP?= =?utf-8?B?OTBTWTlOdGdweE1LcGJsRGM4SzdaWkR0SkhiZThEKyswWTNHUW0xZ0pGYTRx?= =?utf-8?B?M2t0RGJHU1MrbWJLazhGOVhURmdIYUhFQnZJemFwcU5iS1NtV2haenZLeEVC?= =?utf-8?B?MUNiQm1mTTBMN0grZWZra2RrVzUrMmZPVnE1L0pNeTkrSWhOeWhDYUEyZW5O?= =?utf-8?B?Q2NUMy9SUVRobGhkU1I4cGtiS042MUdvMzlJa05oMHMxSklvNndlZFJQaHF0?= =?utf-8?B?WStvcU1NNzB6dzB3SjluS0RrWnpmUDRNRjFJc0xiRXhBeTRrMzh2OUl2Q2F2?= =?utf-8?B?anNVT0dWdGpKSGhMdTJxUCtUT1RWa1JrYjNlYXVwMms5dURNbENvTzFlcUp5?= =?utf-8?B?S2VRdmhiRmFrMWZUVUpSNHhyNFVlNTVFMUVabkVuTUw0VDFuODdVaXNyeEVz?= =?utf-8?B?RWZocnlVZm9kR2k2ZHFhM1lhUThObVJPdWtuN2RXNE9OQkIvU2lVa1UwbXIv?= =?utf-8?B?aDgrU21tYkoybGFpSEFwVkc1L0gzdnYvaHRoUzl4WHBmb1FsenVRQUJNKytD?= =?utf-8?B?TFFrN2lsY1lieFRCbDF3dEtvNlQ1b2RSc3F6SldnZlRuRmNGWFo5bUNJU0dV?= =?utf-8?B?UFRkY2tIc2JpVURXY1NyUFJKSkoyNUwxNCt5MDJoOXRnVklVODR5Zi8zbUtw?= =?utf-8?B?M1kvNGdPMTJkdEFWSmZFU2pYUms0M2x0eGxiRE9abmllSVRJeFB0UlZ3d3kx?= =?utf-8?B?RFFJSmZHcW5iaXRnd3pCY3RDNnRWOEhjMEV5K0hlajkxSFA0RnM3VHZabkMv?= =?utf-8?B?MFViSityeWZrSHV6UTl1YS95ajRqelA4VmdEZE5CeGpqdjAvTGo0Ukh5anVh?= =?utf-8?B?QndHYTllQno1eEErZlVlT1dvS0pnakxGOFlybHBYMUlPaG14d2Vpek1RSWpZ?= =?utf-8?Q?clGofFaMpdo3XoVbqo=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY1PR03MB1481;5:cBcPHrUkeUwn2Xkea2j9agZH0b23CNNWNgK3w/qbMk53HA7PiLc6Kg2R+21tZAgavLwnAtqmTgOdgHJL9UOs+8p5D92bWR3XjqSJXDMs5NBVsmgfJ4JiEwoXzrK4U87ox02KEAC1COzt9l6l3EP20A==;24:7OAr4Alpw6VUKu6Guqy3mlig12NCK5Bxugs2v5S3zicfdI4styJlPTsdgTtETEEgzKkNBYamrcnHOchmDx+RKAoSWkfZdsKXv3UYUQWFdY8=;20:EKXfNx2Ys72oy2yg2utjp1b6YyJKcLgc6wLSBN5v5N8w3D4He9O3rfAHrC/hK54Jv+2I7svHRNxYA4jXKfjAMw== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Sep 2015 15:21:01.4618 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR03MB1481 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 2015-09-14 at 08:21 +0200, Christophe Leroy wrote: > memset() uses instruction dcbz to speed up clearing by not wasting time > loading cache line with data that will be overwritten. > Some platform like mpc52xx do no have cache active at startup and > can therefore not use memset(). Allthough no part of the code > explicitly uses memset(), GCC may makes calls to it. > > This patch modifies memset() such that at startup, memset() > unconditionally jumps to simple_memset() which doesn't use > the dcbz instruction. > > Once the initial MMU is set up, in machine_init() we patch memset() > by replacing this inconditional jump by a NOP > > Signed-off-by: Christophe Leroy > --- > This patch goes on to of [v3] powerpc32: memcpy: only use dcbz once cache > is enabled > > Changes in v2: > was part of [v2] powerpc32: memcpy/memset: only use dcbz once cache is > enabled > changes in v3: > Not using anymore feature-fixups > Handling of memcpy() and memset() split in two patches > > arch/powerpc/kernel/setup_32.c | 1 + > arch/powerpc/lib/copy_32.S | 15 +++++++++++++++ > 2 files changed, 16 insertions(+) > > diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c > index 362495f..345ec3a 100644 > --- a/arch/powerpc/kernel/setup_32.c > +++ b/arch/powerpc/kernel/setup_32.c > @@ -124,6 +124,7 @@ notrace void __init machine_init(u64 dt_ptr) > udbg_early_init(); > > patch_instruction((unsigned int *)&memcpy, PPC_INST_NOP); > + patch_instruction((unsigned int *)&memset, PPC_INST_NOP); > > /* Do some early initialization based on the flat device tree */ > early_init_devtree(__va(dt_ptr)); > diff --git a/arch/powerpc/lib/copy_32.S b/arch/powerpc/lib/copy_32.S > index da5847d..68a59d4 100644 > --- a/arch/powerpc/lib/copy_32.S > +++ b/arch/powerpc/lib/copy_32.S > @@ -73,8 +73,13 @@ CACHELINE_MASK = (L1_CACHE_BYTES-1) > * Use dcbz on the complete cache lines in the destination > * to set them to zero. This requires that the destination > * area is cacheable. -- paulus > + * > + * During early init, cache might not be active yet, so dcbz cannot be > used. > + * We therefore jump to simple_memset which doesn't use dcbz. This jump is > + * replaced by a nop once cache is active. This is done in machine_init() > */ > _GLOBAL(memset) > + b simple_memset > rlwimi r4,r4,8,16,23 > rlwimi r4,r4,16,0,15 > > @@ -122,6 +127,16 @@ _GLOBAL(memset) > bdnz 8b > blr > > +/* Simple version of memset used during early boot until cache is enabled > */ > +simple_memset: > + cmplwi cr0,r5,0 > + addi r6,r3,-1 > + beqlr > + mtctr r5 > +1: stbu r4,1(r6) > + bdnz 1b > + blr Instead couldn't you use the generic memset at label 2: and patch the "bne 2f"? -Scott