All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/2] powerpc/mce: Avoid using irq_work_queue() in realmode
@ 2021-11-24  9:54 Ganesh Goudar
  2021-11-24  9:55 ` [PATCH v3 2/2] pseries/mce: Refactor the pseries mce handling code Ganesh Goudar
  2021-11-24 13:03 ` [PATCH v3 1/2] powerpc/mce: Avoid using irq_work_queue() in realmode Nicholas Piggin
  0 siblings, 2 replies; 7+ messages in thread
From: Ganesh Goudar @ 2021-11-24  9:54 UTC (permalink / raw)
  To: linuxppc-dev, mpe; +Cc: Ganesh Goudar, mahesh, npiggin, dja

In realmode mce handler we use irq_work_queue() to defer
the processing of mce events, irq_work_queue() can only
be called when translation is enabled because it touches
memory outside RMA, hence we enable translation before
calling irq_work_queue and disable on return, though it
is not safe to do in realmode.

To avoid this, program the decrementer and call the event
processing functions from timer handler.

Signed-off-by: Ganesh Goudar <ganeshgr@linux.ibm.com>
---
V2:
* Use arch_irq_work_raise to raise decrementer interrupt.
* Avoid having atomic variable.

V3:
* Fix build error.
  Reported by kernel test bot.
---
 arch/powerpc/include/asm/machdep.h       |  2 +
 arch/powerpc/include/asm/mce.h           |  2 +
 arch/powerpc/include/asm/paca.h          |  1 +
 arch/powerpc/kernel/mce.c                | 51 +++++++++++-------------
 arch/powerpc/kernel/time.c               |  3 ++
 arch/powerpc/platforms/pseries/pseries.h |  1 +
 arch/powerpc/platforms/pseries/ras.c     | 31 +-------------
 arch/powerpc/platforms/pseries/setup.c   |  1 +
 8 files changed, 34 insertions(+), 58 deletions(-)

diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
index 9c3c9f04129f..d22b222ba471 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -99,6 +99,8 @@ struct machdep_calls {
 	/* Called during machine check exception to retrive fixup address. */
 	bool		(*mce_check_early_recovery)(struct pt_regs *regs);
 
+	void            (*machine_check_log_err)(void);
+
 	/* Motherboard/chipset features. This is a kind of general purpose
 	 * hook used to control some machine specific features (like reset
 	 * lines, chip power control, etc...).
diff --git a/arch/powerpc/include/asm/mce.h b/arch/powerpc/include/asm/mce.h
index 331d944280b8..6e306aaf58aa 100644
--- a/arch/powerpc/include/asm/mce.h
+++ b/arch/powerpc/include/asm/mce.h
@@ -235,8 +235,10 @@ extern void machine_check_print_event_info(struct machine_check_event *evt,
 unsigned long addr_to_pfn(struct pt_regs *regs, unsigned long addr);
 extern void mce_common_process_ue(struct pt_regs *regs,
 				  struct mce_error_info *mce_err);
+void machine_check_raise_dec_intr(void);
 int mce_register_notifier(struct notifier_block *nb);
 int mce_unregister_notifier(struct notifier_block *nb);
+void mce_run_late_handlers(void);
 #ifdef CONFIG_PPC_BOOK3S_64
 void flush_and_reload_slb(void);
 void flush_erat(void);
diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h
index dc05a862e72a..d463c796f7fa 100644
--- a/arch/powerpc/include/asm/paca.h
+++ b/arch/powerpc/include/asm/paca.h
@@ -280,6 +280,7 @@ struct paca_struct {
 #endif
 #ifdef CONFIG_PPC_BOOK3S_64
 	struct mce_info *mce_info;
+	u32 mces_to_process;
 #endif /* CONFIG_PPC_BOOK3S_64 */
 } ____cacheline_aligned;
 
diff --git a/arch/powerpc/kernel/mce.c b/arch/powerpc/kernel/mce.c
index fd829f7f25a4..8e17f29472a0 100644
--- a/arch/powerpc/kernel/mce.c
+++ b/arch/powerpc/kernel/mce.c
@@ -28,19 +28,9 @@
 
 #include "setup.h"
 
-static void machine_check_process_queued_event(struct irq_work *work);
-static void machine_check_ue_irq_work(struct irq_work *work);
 static void machine_check_ue_event(struct machine_check_event *evt);
 static void machine_process_ue_event(struct work_struct *work);
 
-static struct irq_work mce_event_process_work = {
-        .func = machine_check_process_queued_event,
-};
-
-static struct irq_work mce_ue_event_irq_work = {
-	.func = machine_check_ue_irq_work,
-};
-
 static DECLARE_WORK(mce_ue_event_work, machine_process_ue_event);
 
 static BLOCKING_NOTIFIER_HEAD(mce_notifier_list);
@@ -89,6 +79,12 @@ static void mce_set_error_info(struct machine_check_event *mce,
 	}
 }
 
+/* Raise decrementer interrupt */
+void machine_check_raise_dec_intr(void)
+{
+	arch_irq_work_raise();
+}
+
 /*
  * Decode and save high level MCE information into per cpu buffer which
  * is an array of machine_check_event structure.
@@ -135,6 +131,8 @@ void save_mce_event(struct pt_regs *regs, long handled,
 	if (mce->error_type == MCE_ERROR_TYPE_UE)
 		mce->u.ue_error.ignore_event = mce_err->ignore_event;
 
+	local_paca->mces_to_process++;
+
 	if (!addr)
 		return;
 
@@ -217,7 +215,7 @@ void release_mce_event(void)
 	get_mce_event(NULL, true);
 }
 
-static void machine_check_ue_irq_work(struct irq_work *work)
+static void machine_check_ue_work(void)
 {
 	schedule_work(&mce_ue_event_work);
 }
@@ -239,7 +237,7 @@ static void machine_check_ue_event(struct machine_check_event *evt)
 	       evt, sizeof(*evt));
 
 	/* Queue work to process this event later. */
-	irq_work_queue(&mce_ue_event_irq_work);
+	machine_check_raise_dec_intr();
 }
 
 /*
@@ -249,7 +247,6 @@ void machine_check_queue_event(void)
 {
 	int index;
 	struct machine_check_event evt;
-	unsigned long msr;
 
 	if (!get_mce_event(&evt, MCE_EVENT_RELEASE))
 		return;
@@ -263,20 +260,7 @@ void machine_check_queue_event(void)
 	memcpy(&local_paca->mce_info->mce_event_queue[index],
 	       &evt, sizeof(evt));
 
-	/*
-	 * Queue irq work to process this event later. Before
-	 * queuing the work enable translation for non radix LPAR,
-	 * as irq_work_queue may try to access memory outside RMO
-	 * region.
-	 */
-	if (!radix_enabled() && firmware_has_feature(FW_FEATURE_LPAR)) {
-		msr = mfmsr();
-		mtmsr(msr | MSR_IR | MSR_DR);
-		irq_work_queue(&mce_event_process_work);
-		mtmsr(msr);
-	} else {
-		irq_work_queue(&mce_event_process_work);
-	}
+	machine_check_raise_dec_intr();
 }
 
 void mce_common_process_ue(struct pt_regs *regs,
@@ -338,7 +322,7 @@ static void machine_process_ue_event(struct work_struct *work)
  * process pending MCE event from the mce event queue. This function will be
  * called during syscall exit.
  */
-static void machine_check_process_queued_event(struct irq_work *work)
+static void machine_check_process_queued_event(void)
 {
 	int index;
 	struct machine_check_event *evt;
@@ -363,6 +347,17 @@ static void machine_check_process_queued_event(struct irq_work *work)
 	}
 }
 
+void mce_run_late_handlers(void)
+{
+	if (unlikely(local_paca->mces_to_process)) {
+		if (ppc_md.machine_check_log_err)
+			ppc_md.machine_check_log_err();
+		machine_check_process_queued_event();
+		machine_check_ue_work();
+		local_paca->mces_to_process--;
+	}
+}
+
 void machine_check_print_event_info(struct machine_check_event *evt,
 				    bool user_mode, bool in_guest)
 {
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index cae8f03a44fe..94c591b6f9d2 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -594,6 +594,9 @@ DEFINE_INTERRUPT_HANDLER_ASYNC(timer_interrupt)
 
 	if (test_irq_work_pending()) {
 		clear_irq_work_pending();
+#ifdef CONFIG_PPC_BOOK3S_64
+		mce_run_late_handlers();
+#endif
 		irq_work_run();
 	}
 
diff --git a/arch/powerpc/platforms/pseries/pseries.h b/arch/powerpc/platforms/pseries/pseries.h
index 3544778e06d0..9cf0d33dfbf5 100644
--- a/arch/powerpc/platforms/pseries/pseries.h
+++ b/arch/powerpc/platforms/pseries/pseries.h
@@ -21,6 +21,7 @@ struct pt_regs;
 extern int pSeries_system_reset_exception(struct pt_regs *regs);
 extern int pSeries_machine_check_exception(struct pt_regs *regs);
 extern long pseries_machine_check_realmode(struct pt_regs *regs);
+void pSeries_machine_check_log_err(void);
 
 #ifdef CONFIG_SMP
 extern void smp_init_pseries(void);
diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
index 56092dccfdb8..8613f9cc5798 100644
--- a/arch/powerpc/platforms/pseries/ras.c
+++ b/arch/powerpc/platforms/pseries/ras.c
@@ -23,11 +23,6 @@ static DEFINE_SPINLOCK(ras_log_buf_lock);
 
 static int ras_check_exception_token;
 
-static void mce_process_errlog_event(struct irq_work *work);
-static struct irq_work mce_errlog_process_work = {
-	.func = mce_process_errlog_event,
-};
-
 #define EPOW_SENSOR_TOKEN	9
 #define EPOW_SENSOR_INDEX	0
 
@@ -729,40 +724,16 @@ static int mce_handle_error(struct pt_regs *regs, struct rtas_error_log *errp)
 	error_type = mce_log->error_type;
 
 	disposition = mce_handle_err_realmode(disposition, error_type);
-
-	/*
-	 * Enable translation as we will be accessing per-cpu variables
-	 * in save_mce_event() which may fall outside RMO region, also
-	 * leave it enabled because subsequently we will be queuing work
-	 * to workqueues where again per-cpu variables accessed, besides
-	 * fwnmi_release_errinfo() crashes when called in realmode on
-	 * pseries.
-	 * Note: All the realmode handling like flushing SLB entries for
-	 *       SLB multihit is done by now.
-	 */
 out:
-	msr = mfmsr();
-	mtmsr(msr | MSR_IR | MSR_DR);
-
 	disposition = mce_handle_err_virtmode(regs, errp, mce_log,
 					      disposition);
-
-	/*
-	 * Queue irq work to log this rtas event later.
-	 * irq_work_queue uses per-cpu variables, so do this in virt
-	 * mode as well.
-	 */
-	irq_work_queue(&mce_errlog_process_work);
-
-	mtmsr(msr);
-
 	return disposition;
 }
 
 /*
  * Process MCE rtas errlog event.
  */
-static void mce_process_errlog_event(struct irq_work *work)
+void pSeries_machine_check_log_err(void)
 {
 	struct rtas_error_log *err;
 
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 8a62af5b9c24..9bdc487b8e35 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -1084,6 +1084,7 @@ define_machine(pseries) {
 	.system_reset_exception = pSeries_system_reset_exception,
 	.machine_check_early	= pseries_machine_check_realmode,
 	.machine_check_exception = pSeries_machine_check_exception,
+	.machine_check_log_err	= pSeries_machine_check_log_err,
 #ifdef CONFIG_KEXEC_CORE
 	.machine_kexec          = pSeries_machine_kexec,
 	.kexec_cpu_down         = pseries_kexec_cpu_down,
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread
* Re: [PATCH v3 2/2] pseries/mce: Refactor the pseries mce handling code
@ 2021-11-25 22:03 kernel test robot
  0 siblings, 0 replies; 7+ messages in thread
From: kernel test robot @ 2021-11-25 22:03 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 20898 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20211124095500.98656-2-ganeshgr@linux.ibm.com>
References: <20211124095500.98656-2-ganeshgr@linux.ibm.com>
TO: Ganesh Goudar <ganeshgr@linux.ibm.com>
TO: linuxppc-dev(a)lists.ozlabs.org
TO: mpe(a)ellerman.id.au
CC: Ganesh Goudar <ganeshgr@linux.ibm.com>
CC: mahesh(a)linux.ibm.com
CC: npiggin(a)gmail.com
CC: dja(a)axtens.net

Hi Ganesh,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on powerpc/next]
[also build test WARNING on v5.16-rc2 next-20211125]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Ganesh-Goudar/powerpc-mce-Avoid-using-irq_work_queue-in-realmode/20211124-175800
base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: powerpc64-randconfig-c024-20211124 (https://download.01.org/0day-ci/archive/20211126/202111260536.m57xOEqc-lkp(a)intel.com/config)
compiler: powerpc64-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>


cocci warnings: (new ones prefixed by >>)
>> arch/powerpc/platforms/pseries/ras.c:550:6-8: WARNING: possible condition with no effect (if == else)

vim +550 arch/powerpc/platforms/pseries/ras.c

^1da177e4c3f41 arch/ppc64/kernel/ras.c              Linus Torvalds    2005-04-16  513  
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  514  static int mce_handle_error(struct pt_regs *regs, struct rtas_error_log *errp)
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  515  {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  516  	struct mce_error_info mce_err = { 0 };
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  517  	unsigned long eaddr = 0, paddr = 0;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  518  	struct pseries_errorlog *pseries_log;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  519  	struct pseries_mc_errorlog *mce_log;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  520  	int disposition = rtas_error_disposition(errp);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  521  	int initiator = rtas_error_initiator(errp);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  522  	int severity = rtas_error_severity(errp);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  523  	u8 error_type, err_sub_type;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  524  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  525  	if (initiator == RTAS_INITIATOR_UNKNOWN)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  526  		mce_err.initiator = MCE_INITIATOR_UNKNOWN;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  527  	else if (initiator == RTAS_INITIATOR_CPU)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  528  		mce_err.initiator = MCE_INITIATOR_CPU;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  529  	else if (initiator == RTAS_INITIATOR_PCI)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  530  		mce_err.initiator = MCE_INITIATOR_PCI;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  531  	else if (initiator == RTAS_INITIATOR_ISA)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  532  		mce_err.initiator = MCE_INITIATOR_ISA;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  533  	else if (initiator == RTAS_INITIATOR_MEMORY)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  534  		mce_err.initiator = MCE_INITIATOR_MEMORY;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  535  	else if (initiator == RTAS_INITIATOR_POWERMGM)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  536  		mce_err.initiator = MCE_INITIATOR_POWERMGM;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  537  	else
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  538  		mce_err.initiator = MCE_INITIATOR_UNKNOWN;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  539  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  540  	if (severity == RTAS_SEVERITY_NO_ERROR)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  541  		mce_err.severity = MCE_SEV_NO_ERROR;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  542  	else if (severity == RTAS_SEVERITY_EVENT)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  543  		mce_err.severity = MCE_SEV_WARNING;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  544  	else if (severity == RTAS_SEVERITY_WARNING)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  545  		mce_err.severity = MCE_SEV_WARNING;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  546  	else if (severity == RTAS_SEVERITY_ERROR_SYNC)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  547  		mce_err.severity = MCE_SEV_SEVERE;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  548  	else if (severity == RTAS_SEVERITY_ERROR)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  549  		mce_err.severity = MCE_SEV_SEVERE;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24 @550  	else if (severity == RTAS_SEVERITY_FATAL)
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  551  		mce_err.severity = MCE_SEV_FATAL;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  552  	else
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  553  		mce_err.severity = MCE_SEV_FATAL;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  554  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  555  	if (severity <= RTAS_SEVERITY_ERROR_SYNC)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  556  		mce_err.sync_error = true;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  557  	else
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  558  		mce_err.sync_error = false;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  559  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  560  	mce_err.error_type = MCE_ERROR_TYPE_UNKNOWN;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  561  	mce_err.error_class = MCE_ECLASS_UNKNOWN;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  562  
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  563  	if (!rtas_error_extended(errp))
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  564  		goto out;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  565  
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  566  	pseries_log = get_pseries_errorlog(errp, PSERIES_ELOG_SECT_ID_MCE);
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  567  	if (!pseries_log)
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  568  		goto out;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  569  
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  570  	mce_log = (struct pseries_mc_errorlog *)pseries_log->data;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  571  	error_type = mce_log->error_type;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  572  	err_sub_type = rtas_mc_error_sub_type(mce_log);
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  573  
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  574  	switch (mce_log->error_type) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  575  	case MC_ERROR_TYPE_UE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  576  		mce_err.error_type = MCE_ERROR_TYPE_UE;
efbc4303b255bb arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2020-03-27  577  		mce_common_process_ue(regs, &mce_err);
efbc4303b255bb arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2020-03-27  578  		if (mce_err.ignore_event)
efbc4303b255bb arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2020-03-27  579  			disposition = RTAS_DISP_FULLY_RECOVERED;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  580  		switch (err_sub_type) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  581  		case MC_ERROR_UE_IFETCH:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  582  			mce_err.u.ue_error_type = MCE_UE_ERROR_IFETCH;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  583  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  584  		case MC_ERROR_UE_PAGE_TABLE_WALK_IFETCH:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  585  			mce_err.u.ue_error_type = MCE_UE_ERROR_PAGE_TABLE_WALK_IFETCH;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  586  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  587  		case MC_ERROR_UE_LOAD_STORE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  588  			mce_err.u.ue_error_type = MCE_UE_ERROR_LOAD_STORE;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  589  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  590  		case MC_ERROR_UE_PAGE_TABLE_WALK_LOAD_STORE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  591  			mce_err.u.ue_error_type = MCE_UE_ERROR_PAGE_TABLE_WALK_LOAD_STORE;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  592  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  593  		case MC_ERROR_UE_INDETERMINATE:
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  594  		default:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  595  			mce_err.u.ue_error_type = MCE_UE_ERROR_INDETERMINATE;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  596  			break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  597  		}
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  598  		if (mce_log->sub_err_type & UE_EFFECTIVE_ADDR_PROVIDED)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  599  			eaddr = be64_to_cpu(mce_log->effective_address);
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  600  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  601  		if (mce_log->sub_err_type & UE_LOGICAL_ADDR_PROVIDED) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  602  			paddr = be64_to_cpu(mce_log->logical_address);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  603  		} else if (mce_log->sub_err_type & UE_EFFECTIVE_ADDR_PROVIDED) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  604  			unsigned long pfn;
c6d15258cdf1c1 arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  605  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  606  			pfn = addr_to_pfn(regs, eaddr);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  607  			if (pfn != ULONG_MAX)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  608  				paddr = pfn << PAGE_SHIFT;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  609  		}
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  610  
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  611  		break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  612  	case MC_ERROR_TYPE_SLB:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  613  		mce_err.error_type = MCE_ERROR_TYPE_SLB;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  614  		switch (err_sub_type) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  615  		case MC_ERROR_SLB_PARITY:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  616  			mce_err.u.slb_error_type = MCE_SLB_ERROR_PARITY;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  617  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  618  		case MC_ERROR_SLB_MULTIHIT:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  619  			mce_err.u.slb_error_type = MCE_SLB_ERROR_MULTIHIT;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  620  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  621  		case MC_ERROR_SLB_INDETERMINATE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  622  		default:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  623  			mce_err.u.slb_error_type = MCE_SLB_ERROR_INDETERMINATE;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  624  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  625  		}
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  626  		if (mce_log->sub_err_type & 0x80)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  627  			eaddr = be64_to_cpu(mce_log->effective_address);
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  628  		break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  629  	case MC_ERROR_TYPE_ERAT:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  630  		mce_err.error_type = MCE_ERROR_TYPE_ERAT;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  631  		switch (err_sub_type) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  632  		case MC_ERROR_ERAT_PARITY:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  633  			mce_err.u.erat_error_type = MCE_ERAT_ERROR_PARITY;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  634  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  635  		case MC_ERROR_ERAT_MULTIHIT:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  636  			mce_err.u.erat_error_type = MCE_ERAT_ERROR_MULTIHIT;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  637  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  638  		case MC_ERROR_ERAT_INDETERMINATE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  639  		default:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  640  			mce_err.u.erat_error_type = MCE_ERAT_ERROR_INDETERMINATE;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  641  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  642  		}
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  643  		if (mce_log->sub_err_type & 0x80)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  644  			eaddr = be64_to_cpu(mce_log->effective_address);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  645  		break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  646  	case MC_ERROR_TYPE_TLB:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  647  		mce_err.error_type = MCE_ERROR_TYPE_TLB;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  648  		switch (err_sub_type) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  649  		case MC_ERROR_TLB_PARITY:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  650  			mce_err.u.tlb_error_type = MCE_TLB_ERROR_PARITY;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  651  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  652  		case MC_ERROR_TLB_MULTIHIT:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  653  			mce_err.u.tlb_error_type = MCE_TLB_ERROR_MULTIHIT;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  654  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  655  		case MC_ERROR_TLB_INDETERMINATE:
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  656  		default:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  657  			mce_err.u.tlb_error_type = MCE_TLB_ERROR_INDETERMINATE;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  658  			break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  659  		}
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  660  		if (mce_log->sub_err_type & 0x80)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  661  			eaddr = be64_to_cpu(mce_log->effective_address);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  662  		break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  663  	case MC_ERROR_TYPE_D_CACHE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  664  		mce_err.error_type = MCE_ERROR_TYPE_DCACHE;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  665  		break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  666  	case MC_ERROR_TYPE_I_CACHE:
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  667  		mce_err.error_type = MCE_ERROR_TYPE_DCACHE;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  668  		break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  669  	case MC_ERROR_TYPE_UNKNOWN:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  670  	default:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  671  		mce_err.error_type = MCE_ERROR_TYPE_UNKNOWN;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  672  		break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  673  	}
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  674  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-01-17 10:14 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-11-24  9:54 [PATCH v3 1/2] powerpc/mce: Avoid using irq_work_queue() in realmode Ganesh Goudar
2021-11-24  9:55 ` [PATCH v3 2/2] pseries/mce: Refactor the pseries mce handling code Ganesh Goudar
2021-11-24 13:10   ` Nicholas Piggin
2022-01-17  8:11     ` Ganesh
2021-11-24 13:03 ` [PATCH v3 1/2] powerpc/mce: Avoid using irq_work_queue() in realmode Nicholas Piggin
2022-01-17  8:09   ` Ganesh
  -- strict thread matches above, loose matches on Subject: below --
2021-11-25 22:03 [PATCH v3 2/2] pseries/mce: Refactor the pseries mce handling code kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.