From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E5E47C61DD3 for ; Tue, 1 Sep 2026 19:27:53 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A2C2310EEC6; Tue, 1 Sep 2026 19:27:53 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="Q8y0hjw3"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1B67910EEC5 for ; Tue, 1 Sep 2026 19:27:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1788290872; x=1819826872; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=JuO7zRqtRbtjh0DGw+P/bK8vxRiDwLTJoIyrVepkpiQ=; b=Q8y0hjw3s/rc3ioZM5L2lup02n1zKCEEuaFxYx2YgprqVU596Y/tFDUM HfHKI6+0LxebJ/3VRpc7J8eDPxTsWpdjtu/Jp6seQQR6huLWSRhuvtp1d ETEwmBvTYtw/Z0XjFhH9M4fVz2cIHhtvfeJMFsPamu9rfWtU1bsaTY4i8 V/yZIPqKsuYTHnFK0ZCEFmjzjSjQEhQxjbAnJMGDBZtPv8jqKvfAwjhdp BauoRlL7Uqk2t0eA40fANyl3obymg8P4c2HADM0JCcphH42rHNzQcnBIT 2MP+zZHV4nDf1YHLNNf2xLc02ww630hTTBGo4MKVaQi1lbFRBQo5dUj6p g==; X-CSE-ConnectionGUID: uvnSi02tRQWgDTaNUXR85A== X-CSE-MsgGUID: 7rTNn9ypQYKFrAA7yL+rXQ== X-IronPort-AV: E=McAfee;i="6800,10657,11893"; a="88762462" X-IronPort-AV: E=Sophos;i="6.25,256,1779174000"; d="scan'208";a="88762462" Received: from orviesa009.jf.intel.com ([10.64.159.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Sep 2026 12:27:52 -0700 X-CSE-ConnectionGUID: q1fgR2c+RuShVvbqtMzw8g== X-CSE-MsgGUID: Zc90IF7YQDqmXqQav9rNjg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.25,256,1779174000"; d="scan'208";a="269776716" Received: from mjruhl-vm.amr.corp.intel.com ([10.11.186.166]) by orviesa009-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Sep 2026 12:27:52 -0700 From: "Michael J. Ruhl" To: platform-driver-x86@vger.kernel.org, intel-xe@lists.freedesktop.org, hansg@kernel.org, ilpo.jarvinen@linux.intel.com, matthew.brost@intel.com, rodrigo.vivi@intel.com, thomas.hellstrom@linux.intel.com, airlied@gmail.com, simona@ffwll.ch, david.e.box@linux.intel.com, anoop.c.vijay@intel.com, badal.nilawar@intel.com, matthew.d.roper@intel.com, james.ausmus@intel.com, karthik.poosa@intel.com Subject: [PATCH v4 03/18] platform/x86/intel/pmt: refactor rc with a return value Date: Tue, 1 Sep 2026 12:27:38 -0700 Message-ID: <20260901192736.626777-23-michael.j.ruhl@intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260901192736.626777-20-michael.j.ruhl@intel.com> References: <20260901192736.626777-20-michael.j.ruhl@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" Upcoming changes will include possible failures from HW accesses. Refactor pmt_crashlog_rw with a return value. Update all necessary usage to use the return code. Signed-off-by: Michael J. Ruhl --- drivers/platform/x86/intel/pmt/crashlog.c | 109 +++++++++++++++------- 1 file changed, 77 insertions(+), 32 deletions(-) diff --git a/drivers/platform/x86/intel/pmt/crashlog.c b/drivers/platform/x86/intel/pmt/crashlog.c index ebc7880d95bd..83323b1ce4a9 100644 --- a/drivers/platform/x86/intel/pmt/crashlog.c +++ b/drivers/platform/x86/intel/pmt/crashlog.c @@ -144,27 +144,29 @@ static int pmt_crashlog_rmw(struct crashlog_entry *crashlog, u32 bit, bool set) } /* Read the status register and see if the specified @bit is set */ -static bool pmt_crashlog_rc(struct crashlog_entry *crashlog, u32 bit) +static int pmt_crashlog_rc(struct crashlog_entry *crashlog, u32 bit, bool *state) { const struct crashlog_status *status = &crashlog->info->status; u32 reg = readl(crashlog->entry.disc_table + status->offset); - return !!(reg & bit); + *state = !!(reg & bit); + + return 0; } -static bool pmt_crashlog_complete(struct crashlog_entry *crashlog) +static int pmt_crashlog_complete(struct crashlog_entry *crashlog, bool *state) { /* return current value of the crashlog complete flag */ - return pmt_crashlog_rc(crashlog, crashlog->info->status.complete); + return pmt_crashlog_rc(crashlog, crashlog->info->status.complete, state); } -static bool pmt_crashlog_disabled(struct crashlog_entry *crashlog) +static int pmt_crashlog_disabled(struct crashlog_entry *crashlog, bool *state) { /* return current value of the crashlog disabled flag */ - return pmt_crashlog_rc(crashlog, crashlog->info->status.disabled); + return pmt_crashlog_rc(crashlog, crashlog->info->status.disabled, state); } -static bool pmt_crashlog_supported(struct intel_pmt_entry *entry, u32 *crash_type, u32 *version) +static int pmt_crashlog_supported(struct intel_pmt_entry *entry, u32 *crash_type, u32 *version) { u32 discovery_header = readl(entry->disc_table + CONTROL_OFFSET); @@ -184,7 +186,7 @@ static bool pmt_crashlog_supported(struct intel_pmt_entry *entry, u32 *crash_typ } static int pmt_crashlog_set_disable(struct crashlog_entry *crashlog, - bool disable) + bool disable) { return pmt_crashlog_rmw(crashlog, crashlog->info->control.disable, disable); } @@ -199,14 +201,14 @@ static int pmt_crashlog_set_execute(struct crashlog_entry *crashlog) return pmt_crashlog_rmw(crashlog, crashlog->info->control.manual, true); } -static bool pmt_crashlog_cleared(struct crashlog_entry *crashlog) +static int pmt_crashlog_cleared(struct crashlog_entry *crashlog, bool *state) { - return pmt_crashlog_rc(crashlog, crashlog->info->status.cleared); + return pmt_crashlog_rc(crashlog, crashlog->info->status.cleared, state); } -static bool pmt_crashlog_consumed(struct crashlog_entry *crashlog) +static int pmt_crashlog_consumed(struct crashlog_entry *crashlog, bool *state) { - return pmt_crashlog_rc(crashlog, crashlog->info->status.consumed); + return pmt_crashlog_rc(crashlog, crashlog->info->status.consumed, state); } static int pmt_crashlog_set_consumed(struct crashlog_entry *crashlog) @@ -214,14 +216,14 @@ static int pmt_crashlog_set_consumed(struct crashlog_entry *crashlog) return pmt_crashlog_rmw(crashlog, crashlog->info->control.consume, true); } -static bool pmt_crashlog_error(struct crashlog_entry *crashlog) +static int pmt_crashlog_error(struct crashlog_entry *crashlog, bool *state) { - return pmt_crashlog_rc(crashlog, crashlog->info->status.error); + return pmt_crashlog_rc(crashlog, crashlog->info->status.error, state); } -static bool pmt_crashlog_rearm(struct crashlog_entry *crashlog) +static int pmt_crashlog_rearm(struct crashlog_entry *crashlog, bool *state) { - return pmt_crashlog_rc(crashlog, crashlog->info->status.rearmed); + return pmt_crashlog_rc(crashlog, crashlog->info->status.rearmed, state); } static int pmt_crashlog_set_rearm(struct crashlog_entry *crashlog) @@ -236,9 +238,14 @@ static ssize_t clear_show(struct device *dev, struct device_attribute *attr, char *buf) { struct crashlog_entry *crashlog = dev_get_drvdata(dev); - bool cleared = pmt_crashlog_cleared(crashlog); + bool cleared; + int ret; - return sysfs_emit(buf, "%d\n", cleared); + ret = pmt_crashlog_cleared(crashlog, &cleared); + if (ret) + return sysfs_emit(buf, "read error: %d\n", ret); + else + return sysfs_emit(buf, "%d\n", cleared); } static ssize_t @@ -271,9 +278,14 @@ static ssize_t consumed_show(struct device *dev, struct device_attribute *attr, char *buf) { struct crashlog_entry *crashlog = dev_get_drvdata(dev); - bool consumed = pmt_crashlog_consumed(crashlog); + bool consumed; + int ret; - return sysfs_emit(buf, "%d\n", consumed); + ret = pmt_crashlog_consumed(crashlog, &consumed); + if (ret) + return sysfs_emit(buf, "read error: %d\n", ret); + else + return sysfs_emit(buf, "%d\n", consumed); } static ssize_t @@ -281,7 +293,9 @@ consumed_store(struct device *dev, struct device_attribute *attr, const char *bu size_t count) { struct crashlog_entry *crashlog; + bool complete; bool consumed; + bool disabled; int ret; crashlog = dev_get_drvdata(dev); @@ -296,10 +310,16 @@ consumed_store(struct device *dev, struct device_attribute *attr, const char *bu guard(mutex)(&crashlog->control_mutex); - if (pmt_crashlog_disabled(crashlog)) + ret = pmt_crashlog_disabled(crashlog, &disabled); + if (ret) + return ret; + if (disabled) return -EBUSY; - if (!pmt_crashlog_complete(crashlog)) + ret = pmt_crashlog_complete(crashlog, &complete); + if (ret) + return ret; + if (!complete) return -EEXIST; ret = pmt_crashlog_set_consumed(crashlog); @@ -312,9 +332,14 @@ static ssize_t enable_show(struct device *dev, struct device_attribute *attr, char *buf) { struct crashlog_entry *crashlog = dev_get_drvdata(dev); - bool enabled = !pmt_crashlog_disabled(crashlog); + bool enabled; + int ret; - return sprintf(buf, "%d\n", enabled); + ret = pmt_crashlog_disabled(crashlog, &enabled); + if (ret) + return sysfs_emit(buf, "error: %d\n", ret); + else + return sysfs_emit(buf, "%d\n", enabled); } static ssize_t @@ -343,9 +368,14 @@ static ssize_t error_show(struct device *dev, struct device_attribute *attr, char *buf) { struct crashlog_entry *crashlog = dev_get_drvdata(dev); - bool error = pmt_crashlog_error(crashlog); + bool error; + int ret; - return sysfs_emit(buf, "%d\n", error); + ret = pmt_crashlog_error(crashlog, &error); + if (ret) + return sysfs_emit(buf, "read error: %d\n", ret); + else + return sysfs_emit(buf, "%d\n", error); } static DEVICE_ATTR_RO(error); @@ -353,9 +383,14 @@ static ssize_t rearm_show(struct device *dev, struct device_attribute *attr, char *buf) { struct crashlog_entry *crashlog = dev_get_drvdata(dev); - int rearmed = pmt_crashlog_rearm(crashlog); + bool rearmed; + int ret; - return sysfs_emit(buf, "%d\n", rearmed); + ret = pmt_crashlog_rearm(crashlog, &rearmed); + if (ret) + return sysfs_emit(buf, "read error: %d\n", ret); + else + return sysfs_emit(buf, "%d\n", rearmed); } static ssize_t @@ -389,11 +424,15 @@ trigger_show(struct device *dev, struct device_attribute *attr, char *buf) { struct crashlog_entry *crashlog; bool trigger; + int ret; crashlog = dev_get_drvdata(dev); - trigger = pmt_crashlog_complete(crashlog); - return sprintf(buf, "%d\n", trigger); + ret = pmt_crashlog_complete(crashlog, &trigger); + if (ret) + return sysfs_emit(buf, "read error: %d\n", ret); + else + return sysfs_emit(buf, "%d\n", trigger); } static ssize_t @@ -401,6 +440,8 @@ trigger_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct crashlog_entry *crashlog; + bool complete; + bool disabled; bool trigger; int ret; @@ -413,7 +454,10 @@ trigger_store(struct device *dev, struct device_attribute *attr, guard(mutex)(&crashlog->control_mutex); /* if device is currently disabled, return busy */ - if (pmt_crashlog_disabled(crashlog)) + ret = pmt_crashlog_disabled(crashlog, &disabled); + if (ret) + return ret; + if (disabled) return -EBUSY; if (!trigger) { @@ -422,7 +466,8 @@ trigger_store(struct device *dev, struct device_attribute *attr, } /* we cannot trigger a new crash if one is still pending */ - if (pmt_crashlog_complete(crashlog)) + ret = pmt_crashlog_complete(crashlog, &complete); + if (complete) return -EEXIST; ret = pmt_crashlog_set_execute(crashlog); -- 2.43.0