Received: by 2002:ac0:8845:0:0:0:0:0 with SMTP id g63csp1946291img; Wed, 27 Feb 2019 08:06:38 -0800 (PST) X-Google-Smtp-Source: AHgI3IZu9OdmSWurWr2TFeUOPuusPzTxPJUh/t1yhp33VDzajZdOCTr2KgOFGTh0ZB2g7h/5IvH8 X-Received: by 2002:a17:902:7c8f:: with SMTP id y15mr2858078pll.44.1551283598490; Wed, 27 Feb 2019 08:06:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551283598; cv=none; d=google.com; s=arc-20160816; b=mbPh+da0+30aJYalMeNjWmJiTtZ+3D/8PAGMmzDMbBL7VT09Dsedd5PN8ugAJGw70v Dnpa24zrSzWLJ75CeKSqkWh4zYBydC/dnmGdKLIYcQoybcWtZQ2ibREtsoOdkYNLdK9O KJTIZKqCmTSl/BjshlXPkeISIfTTEvTJfGoY4l2+2yGJ5CTjCZsCrNve/nLfuZE81+RZ CP1/McxngYQdApPgGnjhVrLxfWBT3GVit8/F1SzVdwJFp7ixwGQOp9OMDZ0ryJ7j5bRE p56TONodaWAxwyCWfQh5UEz/RyciPYltWFh9Z5ElUoRPKmrddzCM2obDmmqc/aUBfH3d S/Tw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=7GULM2fjikJWvDsBGzrn7sJuH2n6tkeDVG5nHIe9B+c=; b=EbTmxvSxr7kiv4nTGQg/mL3zwnILq/a2KUDCZ/q4RodLQyGZTnU0LlM6k37f6yc+Hq 3lySRzDiSOp0py2QG1gwy/Tc9O6mmkxxYfq/uAdTX3T6PAxFdVaJ1GA6BwNl+ElabSGA v/dG2P2yQ0zGni/Da/Jw35lKxaofzhwTaOVS4R4FA2R3qg/rDbZhc0H85qvluOkBffSk fO9gABl5+JFKXnhoYIPQggfrPaquaROoZemrGQR+Pdt69+ztE0Ia+HJEOPvo9PmXT5So +/Oj2ieJucHdnwueCVrUodQMJjPUA/TIvZ1e9NQ8x+YvpfzNSJeCZTfFuiSMeC+qp96n nDTA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k3si3574885pfb.100.2019.02.27.08.06.20; Wed, 27 Feb 2019 08:06:38 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729909AbfB0QFx (ORCPT + 99 others); Wed, 27 Feb 2019 11:05:53 -0500 Received: from mga01.intel.com ([192.55.52.88]:6599 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729329AbfB0QFt (ORCPT ); Wed, 27 Feb 2019 11:05:49 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Feb 2019 08:05:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,420,1544515200"; d="scan'208";a="303011658" Received: from unknown (HELO luv-build.sc.intel.com) ([172.25.110.25]) by orsmga005.jf.intel.com with ESMTP; 27 Feb 2019 08:05:46 -0800 From: Ricardo Neri To: Thomas Gleixner , Ingo Molnar , Borislav Petkov Cc: Ashok Raj , Andi Kleen , Peter Zijlstra , "Ravi V. Shankar" , x86@kernel.org, linux-kernel@vger.kernel.org, Ricardo Neri , Ricardo Neri , "H. Peter Anvin" , Tony Luck , Clemens Ladisch , Arnd Bergmann , Philippe Ombredanne , Kate Stewart , "Rafael J. Wysocki" Subject: [RFC PATCH v2 06/14] x86/hpet: Configure the timer used by the hardlockup detector Date: Wed, 27 Feb 2019 08:05:10 -0800 Message-Id: <1551283518-18922-7-git-send-email-ricardo.neri-calderon@linux.intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551283518-18922-1-git-send-email-ricardo.neri-calderon@linux.intel.com> References: <1551283518-18922-1-git-send-email-ricardo.neri-calderon@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Implement the initial configuration of the timer to be used by the hardlockup detector. Return a data structure with a description of the timer; this information is subsequently used by the hardlockup detector. Only provide the timer if it supports Front Side Bus interrupt delivery. This condition greatly simplifies the implementation of the detector. Cc: "H. Peter Anvin" Cc: Ashok Raj Cc: Andi Kleen Cc: Tony Luck Cc: Clemens Ladisch Cc: Arnd Bergmann Cc: Philippe Ombredanne Cc: Kate Stewart Cc: "Rafael J. Wysocki" Cc: "Ravi V. Shankar" Cc: x86@kernel.org Signed-off-by: Ricardo Neri --- arch/x86/include/asm/hpet.h | 13 +++++++++++++ arch/x86/kernel/hpet.c | 27 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/arch/x86/include/asm/hpet.h b/arch/x86/include/asm/hpet.h index 9fd112a0ffdd..4d559e0c746f 100644 --- a/arch/x86/include/asm/hpet.h +++ b/arch/x86/include/asm/hpet.h @@ -118,6 +118,19 @@ extern void hpet_unregister_irq_handler(rtc_irq_handler handler); #endif /* CONFIG_HPET_EMULATE_RTC */ +#ifdef CONFIG_X86_HARDLOCKUP_DETECTOR_HPET +struct hpet_hld_data { + u32 num; + u32 flags; + u64 ticks_per_second; +}; + +extern struct hpet_hld_data *hpet_hardlockup_detector_assign_timer(void); +#else +static inline struct hpet_hld_data *hpet_hardlockup_detector_assign_timer(void) +{ return NULL; } +#endif /* CONFIG_X86_HARDLOCKUP_DETECTOR_HPET */ + #else /* CONFIG_HPET_TIMER */ static inline int hpet_enable(void) { return 0; } diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index 1c5c63366109..923b8061e815 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c @@ -174,6 +174,33 @@ do { \ _hpet_print_config(__func__, __LINE__); \ } while (0) +#ifdef CONFIG_X86_HARDLOCKUP_DETECTOR_HPET +struct hpet_hld_data *hpet_hardlockup_detector_assign_timer(void) +{ + struct hpet_hld_data *hdata; + unsigned int cfg; + + cfg = hpet_readl(HPET_Tn_CFG(HPET_WD_TIMER_NR)); + + if (!(cfg & HPET_TN_FSB_CAP)) + return NULL; + + hdata = kzalloc(sizeof(*hdata), GFP_KERNEL); + if (!hdata) + return NULL; + + hdata->flags = HPET_DEV_FSB_CAP; + + if (cfg & HPET_TN_PERIODIC_CAP) + hdata->flags |= HPET_DEV_PERI_CAP; + + hdata->num = HPET_WD_TIMER_NR; + hdata->ticks_per_second = hpet_get_ticks_per_sec(hpet_readq(HPET_ID)); + + return hdata; +} +#endif /* CONFIG_X86_HARDLOCKUP_DETECTOR_HPET */ + /* * When the hpet driver (/dev/hpet) is enabled, we need to reserve * timer 0 and timer 1 in case of RTC emulation. Timer 2 is reserved in case -- 2.17.1