From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932293AbbFIDPP (ORCPT ); Mon, 8 Jun 2015 23:15:15 -0400 Received: from mail-by2on0111.outbound.protection.outlook.com ([207.46.100.111]:54619 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932182AbbFIDPA (ORCPT ); Mon, 8 Jun 2015 23:15:00 -0400 Authentication-Results: spf=none (sender IP is 165.204.84.221) smtp.mailfrom=amd.com; amacapital.net; dkim=none (message not signed) header.d=none; X-WSS-ID: 0NPNQCW-07-NER-02 X-M-MSG: From: Huang Rui To: Borislav Petkov , Andy Lutomirski , Thomas Gleixner , Peter Zijlstra , "Rafael J. Wysocki" , Len Brown , "John Stultz" , =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Weisbecker?= CC: , , Fengguang Wu , Aaron Lu , Suravee Suthikulanit , Tony Li , Ken Xue , Huang Rui Subject: [PATCH v2 2/4] x86, mwaitt: make delay method configurable Date: Tue, 9 Jun 2015 11:13:39 +0800 Message-ID: <1433819621-15093-3-git-send-email-ray.huang@amd.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1433819621-15093-1-git-send-email-ray.huang@amd.com> References: <1433819621-15093-1-git-send-email-ray.huang@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD034;1:d0aLV6er8CzM0InWJZegvUZoBi4IntIikqE3WJVYfoav8ejZFQ4asHIIifaVJVO1/VHTfr3feEhVgj1PUJAFraMghzv16Nm2/9jr2T2a53OyHKWDDq1+QZZpGnEqeA8OePDfWrXz9e4kUC6eSh7unTcXnyf/FLlSzACyNqXlNc/fcQY6gDLm/cuiTiOAyQKkf78s7Oswvj9H6yss7CaI+K7WdvUCjyxB/MkrbiYvbWBu2gTzPw3pFzk7VXcvMDP06BKUdEwQjgX2wVTLXe85vcv8EDS38TU/D/LunxUICBT0wnhtcrVKFodYAO14rMqDZXQ2GfobaP1WHfhtFQOD6A== X-Forefront-Antispam-Report: CIP:165.204.84.221;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(428002)(189002)(199003)(189998001)(106466001)(33646002)(87936001)(47776003)(48376002)(77156002)(62966003)(77096005)(50226001)(86362001)(2950100001)(53416004)(46102003)(50986999)(36756003)(76176999)(229853001)(101416001)(92566002)(105586002)(19580395003)(19580405001)(5001770100001)(50466002);DIR:OUT;SFP:1102;SCL:1;SRVR:BN1PR02MB070;H:atltwp01.amd.com;FPR:;SPF:None;MLV:sfv;MX:1;A:1;LANG:en; X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN1PR02MB070; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(520003)(5005006)(3002001);SRVR:BN1PR02MB070;BCL:0;PCL:0;RULEID:;SRVR:BN1PR02MB070; X-Forefront-PRVS: 06022AA85F X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2015 03:14:56.9919 (UTC) X-MS-Exchange-CrossTenant-Id: fde4dada-be84-483f-92cc-e026cbee8e96 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fde4dada-be84-483f-92cc-e026cbee8e96;Ip=[165.204.84.221];Helo=[atltwp01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR02MB070 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch introduces a kernel parameter (delay), user is able to configure it at boot loader to choose different types of delay method. Default schema is to use TSC delay. This update can be more flexiable to add new delay method. Suggested-by: Suravee Suthikulanit Signed-off-by: Huang Rui --- arch/x86/include/asm/delay.h | 7 +++++++ arch/x86/kernel/setup.c | 19 +++++++++++++++++++ arch/x86/lib/delay.c | 12 +++++++++++- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/delay.h b/arch/x86/include/asm/delay.h index 9b3b4f2..99873ec 100644 --- a/arch/x86/include/asm/delay.h +++ b/arch/x86/include/asm/delay.h @@ -5,4 +5,11 @@ void use_tsc_delay(void); +extern unsigned long boot_option_delay; + +enum delay_type { + DELAY_LOOP=0, + DELAY_TSC, +}; + #endif /* _ASM_X86_DELAY_H */ diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 0b10698..cc2886d 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -111,6 +111,7 @@ #include #include #include +#include /* * max_low_pfn_mapped: highest direct mapped pfn under 4GB @@ -844,6 +845,24 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p) return 0; } +static int __init delay_setup(char *str) +{ + if (!str) + return -EINVAL; + + if (!strcmp(str, "tsc")) { + pr_info("using tsc delay\n"); + boot_option_delay = DELAY_TSC; + } else if (!strcmp(str, "loop")) { + pr_info("using loop delay\n"); + boot_option_delay = DELAY_LOOP; + } else + return -1; + + return 0; +} +early_param("delay", delay_setup); + /* * Determine if we were loaded by an EFI loader. If so, then we have also been * passed the efi memmap, systab, etc., so we should use these data structures diff --git a/arch/x86/lib/delay.c b/arch/x86/lib/delay.c index 39d6a3d..1a6952e 100644 --- a/arch/x86/lib/delay.c +++ b/arch/x86/lib/delay.c @@ -25,6 +25,8 @@ # include #endif +unsigned long boot_option_delay = DELAY_TSC; + /* simple loop based delay: */ static void delay_loop(unsigned long loops) { @@ -94,7 +96,15 @@ static void (*delay_fn)(unsigned long) = delay_loop; void use_tsc_delay(void) { - delay_fn = delay_tsc; + switch (boot_option_delay) { + case DELAY_LOOP: + delay_fn = delay_loop; + return; + case DELAY_TSC: + default: + delay_fn = delay_tsc; + return; + } } int read_current_timer(unsigned long *timer_val) -- 1.7.9.5