From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752356AbcAESft (ORCPT ); Tue, 5 Jan 2016 13:35:49 -0500 Received: from mx2.suse.de ([195.135.220.15]:53844 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751601AbcAESfq (ORCPT ); Tue, 5 Jan 2016 13:35:46 -0500 Date: Tue, 5 Jan 2016 19:35:42 +0100 From: Borislav Petkov To: Dave Hansen Cc: x86@kernel.org, linux-kernel@vger.kernel.org, dave.hansen@linux.intel.com, hpa@zytor.com, fenghua.yu@intel.com, yu-cheng.yu@intel.com Subject: Re: [PATCH 1/5] x86: fix early command-line parsing when matching at end Message-ID: <20160105183542.GD4617@pd.tnic> References: <20151222225237.08CDE5F1@viggo.jf.intel.com> <20151222225238.9AEB560C@viggo.jf.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20151222225238.9AEB560C@viggo.jf.intel.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Dec 22, 2015 at 02:52:38PM -0800, Dave Hansen wrote: > > From: Dave Hansen > > The x86 early command line parsing in cmdline_find_option_bool() > is buggy. If it matches a specified 'option' all the way to > the end of the command-line, it will consider it a match. > > For instance, > > cmdline = "foo"; > cmdline_find_option_bool(cmdline, "fool"); > > will return 1. This is particularly annoying since we have > actual FPU options like "noxsave" and "noxsaves" So, > command-line "foo bar noxsave" will match *BOTH* a "noxsave" and > "noxsaves". (This turns out not to be an actual problem because > "noxsave" implies "noxsaves", but it's still confusing.) So I booted a guest with this command line: [ 0.000000] Kernel command line: root=/dev/sda1 resume=/dev/sdb1 debug ignore_loglevel log_buf_len=16M earlyprintk=ttyS0,115200 console=ttyS0,115200 console=tty0 noxsave after applying the debug hunk below. However, the only debug output I got is this: [ 0.000000] x86_noxsave_setup If I supply "noxsaves", I get, as expected [ 0.000000] x86_noxsaves_setup only. Ditto for "noxsaveopt". So what am I missing? --- diff --git a/arch/x86/kernel/fpu/init.c b/arch/x86/kernel/fpu/init.c index 1a6adcb4fbce..472f6edfb8d9 100644 --- a/arch/x86/kernel/fpu/init.c +++ b/arch/x86/kernel/fpu/init.c @@ -354,6 +354,8 @@ static int __init x86_noxsave_setup(char *s) if (strlen(s)) return 0; + pr_info("%s\n", __func__); + fpu__xstate_clear_all_cpu_caps(); return 1; @@ -367,6 +369,8 @@ static int __init x86_noxsaveopt_setup(char *s) { setup_clear_cpu_cap(X86_FEATURE_XSAVEOPT); + pr_info("%s\n", __func__); + return 1; } __setup("noxsaveopt", x86_noxsaveopt_setup); @@ -378,6 +382,8 @@ static int __init x86_noxsaves_setup(char *s) { setup_clear_cpu_cap(X86_FEATURE_XSAVES); + pr_info("%s\n", __func__); + return 1; } __setup("noxsaves", x86_noxsaves_setup); -- Regards/Gruss, Boris. SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg) --