public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: Huang Ying <ying.huang@intel.com>
To: Len Brown <lenb@kernel.org>
Cc: linux-kernel@vger.kernel.org, Andi Kleen <andi@firstfloor.org>,
	Tony Luck <tony.luck@intel.com>,
	ying.huang@intel.com, linux-acpi@vger.kernel.org,
	Thomas Renninger <trenn@novell.com>
Subject: [PATCH 05/17] ACPI, APEI, Add apei_exec_run_optional
Date: Wed, 13 Jul 2011 13:14:16 +0800	[thread overview]
Message-ID: <1310534068-30547-6-git-send-email-ying.huang@intel.com> (raw)
In-Reply-To: <1310534068-30547-1-git-send-email-ying.huang@intel.com>

Some actions in APEI ERST and EINJ tables are optional, for example,
ACPI_EINJ_BEGIN_OPERATION action is used to do some preparation for
error injection, and firmware may choose to do nothing here.  While
some other actions are mandatory, for example, firmware must provide
ACPI_EINJ_GET_ERROR_TYPE implementation.

Original implementation treats all actions as optional (that is, can
have no instructions), that may cause issue if firmware does not
provide some mandatory actions.  To fix this, this patch adds
apei_exec_run_optional, which should be used for optional actions.
The original apei_exec_run should be used for mandatory actions.

Cc: Thomas Renninger <trenn@novell.com>
Signed-off-by: Huang Ying <ying.huang@intel.com>
---
 drivers/acpi/apei/apei-base.c     |    9 +++++----
 drivers/acpi/apei/apei-internal.h |   13 ++++++++++++-
 2 files changed, 17 insertions(+), 5 deletions(-)

--- a/drivers/acpi/apei/apei-base.c
+++ b/drivers/acpi/apei/apei-base.c
@@ -157,9 +157,10 @@ EXPORT_SYMBOL_GPL(apei_exec_noop);
  * Interpret the specified action. Go through whole action table,
  * execute all instructions belong to the action.
  */
-int apei_exec_run(struct apei_exec_context *ctx, u8 action)
+int __apei_exec_run(struct apei_exec_context *ctx, u8 action,
+		    bool optional)
 {
-	int rc;
+	int rc = -ENOENT;
 	u32 i, ip;
 	struct acpi_whea_header *entry;
 	apei_exec_ins_func_t run;
@@ -198,9 +199,9 @@ rewind:
 			goto rewind;
 	}
 
-	return 0;
+	return !optional && rc < 0 ? rc : 0;
 }
-EXPORT_SYMBOL_GPL(apei_exec_run);
+EXPORT_SYMBOL_GPL(__apei_exec_run);
 
 typedef int (*apei_exec_entry_func_t)(struct apei_exec_context *ctx,
 				      struct acpi_whea_header *entry,
--- a/drivers/acpi/apei/apei-internal.h
+++ b/drivers/acpi/apei/apei-internal.h
@@ -50,7 +50,18 @@ static inline u64 apei_exec_ctx_get_outp
 	return ctx->value;
 }
 
-int apei_exec_run(struct apei_exec_context *ctx, u8 action);
+int __apei_exec_run(struct apei_exec_context *ctx, u8 action, bool optional);
+
+static inline int apei_exec_run(struct apei_exec_context *ctx, u8 action)
+{
+	return __apei_exec_run(ctx, action, 0);
+}
+
+/* It is optional whether the firmware provides the action */
+static inline int apei_exec_run_optional(struct apei_exec_context *ctx, u8 action)
+{
+	return __apei_exec_run(ctx, action, 1);
+}
 
 /* Common instruction implementation */
 

  parent reply	other threads:[~2011-07-13  5:14 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-13  5:14 [PATCH 00/17] ACPI, APEI, Patches for 3.1 Huang Ying
2011-07-13  5:14 ` [PATCH 01/17] ACPI, APEI, HEST, Detect duplicated hardware error source ID Huang Ying
2011-07-14  3:28   ` Len Brown
2011-07-13  5:14 ` [PATCH 02/17] ACPI, APEI, ERST, Prevent erst_dbg from loading if ERST is disabled Huang Ying
2011-07-14  3:30   ` Len Brown
2011-07-13  5:14 ` [PATCH 03/17] ACPI, APEI, ERST, Fix erst-dbg long record reading issue Huang Ying
2011-07-14  3:32   ` Len Brown
2011-07-13  5:14 ` [PATCH 04/17] ACPI, APEI, GHES, Do not ratelimit fatal error printk before panic Huang Ying
2011-07-14  3:33   ` Len Brown
2011-07-13  5:14 ` Huang Ying [this message]
2011-07-13  5:14 ` [PATCH 06/17] ACPI, APEI, Use apei_exec_run_optional in APEI EINJ and ERST Huang Ying
2011-07-13  5:14 ` [PATCH 07/17] ACPI, APEI, GHES, Prevent GHES to be built as module Huang Ying
2011-07-14  3:36   ` Len Brown
2011-07-13  5:14 ` [PATCH 08/17] ACPI, APEI, GHES, Support disable GHES at boot time Huang Ying
2011-07-14 14:47   ` Don Zickus
2011-07-15  0:31     ` Huang Ying
2011-07-15 13:33       ` Don Zickus
2011-07-13  5:14 ` [PATCH 09/17] ACPI, APEI, Add APEI bit support in generic _OSC call Huang Ying
2011-07-14 14:48   ` Don Zickus
2011-07-13  5:14 ` [PATCH 10/17] ACPI, APEI, Add WHEA _OSC support Huang Ying
2011-07-14 14:50   ` Don Zickus
2011-07-13  5:14 ` [PATCH 11/17] Add Kconfig option ARCH_HAVE_NMI_SAFE_CMPXCHG Huang Ying
2011-07-13  5:14 ` [PATCH 12/17] lib, Add lock-less NULL terminated single list Huang Ying
2011-07-13  5:14 ` [PATCH 13/17] lib, Make gen_pool memory allocator lockless Huang Ying
2011-07-13  5:14 ` [PATCH 14/17] ACPI, APEI, GHES, printk support for recoverable error via NMI Huang Ying
2011-07-13  5:14 ` [PATCH 15/17] ACPI, APEI, GHES, Error records content based throttle Huang Ying
2011-07-13  5:14 ` [PATCH 16/17] HWPoison: add memory_failure_queue() Huang Ying
2011-07-13  5:14 ` [PATCH 17/17] ACPI, APEI, GHES: Add hardware memory error recovery support Huang Ying

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1310534068-30547-6-git-send-email-ying.huang@intel.com \
    --to=ying.huang@intel.com \
    --cc=andi@firstfloor.org \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tony.luck@intel.com \
    --cc=trenn@novell.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox