From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753106AbcHOMj6 (ORCPT ); Mon, 15 Aug 2016 08:39:58 -0400 Received: from pandora.armlinux.org.uk ([78.32.30.218]:57449 "EHLO pandora.armlinux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752850AbcHOMj4 (ORCPT ); Mon, 15 Aug 2016 08:39:56 -0400 Date: Mon, 15 Aug 2016 13:39:34 +0100 From: Russell King - ARM Linux To: Aleksey Makarov Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , linux-serial@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Len Brown , Leif Lindholm , Graeme Gregory , Al Stone , Christopher Covington , Yury Norov , Peter Hurley , Andy Shevchenko , "Zheng, Lv" , Mark Salter , Kefeng Wang , Jiri Slaby Subject: Re: [PATCH v9 4/4] serial: pl011: add console matching function Message-ID: <20160815123934.GJ1041@n2100.armlinux.org.uk> References: <20160811153152.755-1-aleksey.makarov@linaro.org> <20160811153152.755-5-aleksey.makarov@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160811153152.755-5-aleksey.makarov@linaro.org> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Aug 11, 2016 at 06:31:41PM +0300, Aleksey Makarov wrote: > +/** > + * pl011_console_match - non-standard console matching > + * @co: registering console > + * @name: name from console command line > + * @idx: index from console command line > + * @options: ptr to option string from console command line > + * > + * Only attempts to match console command lines of the form: > + * console=pl011,mmio|mmio32,[,] > + * console=pl011,0x[,] > + * This form is used to register an initial earlycon boot console and > + * replace it with the amba_console at pl011 driver init. > + * > + * Performs console setup for a match (as required by interface) > + * If no are specified, then assume the h/w is already setup. > + * > + * Returns 0 if console matches; otherwise non-zero to use default matching > + */ > +static int __init pl011_console_match(struct console *co, char *name, int idx, > + char *options) > +{ > + char match[] = "pl011"; /* pl011-specific earlycon name */ This is inefficient - the compiler will probably store "pl011" in the rodata section, then allocate an array on the stack, and them memcpy() it onto the stack. This is really a false optimisation. > + unsigned char iotype; > + unsigned long addr; > + int i; > + > + if (strncmp(name, match, 5) != 0) Just do: if (strncmp(name, "pl011", 5) != 0) here, and let the compiler work it out - it'll probably place "pl011" in the rodata section, and use a pointer to it rather than messing around with the stack. What if "console=pl011x,..." is passed? Should this be matched too? Maybe this should compare with "pl011," to ensure that the name is correctly terminated? -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up according to speedtest.net.