[PATCH] ppc/spapr: Set the effective address provided flag in mc error log.

Mahesh Salgaonkar posted 1 patch 4 years, 1 month ago
Test docker-mingw@fedora passed
Test docker-quick@centos7 passed
Test checkpatch failed
Test FreeBSD passed
Test asan passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/158444819283.31599.12155058652686614304.stgit@jupiter
Maintainers: David Gibson <david@gibson.dropbear.id.au>
There is a newer version of this series
hw/ppc/spapr_events.c |   26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
[PATCH] ppc/spapr: Set the effective address provided flag in mc error log.
Posted by Mahesh Salgaonkar 4 years, 1 month ago
Per PAPR, it is expected to set effective address provided flag in
sub_err_type member of mc extended error log (i.e
rtas_event_log_v6_mc.sub_err_type). This somehow got missed in original
fwnmi-mce patch series. Hence guest fails to extract effective address from
mce rtas log. This patch fixes that.

Without this patch guest MCE logs fails print DAR value:

[   11.933608] Disabling lock debugging due to kernel taint
[   11.933773] MCE: CPU0: machine check (Severe) Host TLB Multihit [Recovered]
[   11.933979] MCE: CPU0: NIP: [c000000000090b34] radix__flush_tlb_range_psize+0x194/0xf00
[   11.934223] MCE: CPU0: Initiator CPU
[   11.934341] MCE: CPU0: Unknown

After the change:

[   22.454149] Disabling lock debugging due to kernel taint
[   22.454316] MCE: CPU0: machine check (Severe) Host TLB Multihit DAR: deadbeefdeadbeef [Recovered]
[   22.454605] MCE: CPU0: NIP: [c0000000003e5804] kmem_cache_alloc+0x84/0x330
[   22.454820] MCE: CPU0: Initiator CPU
[   22.454944] MCE: CPU0: Unknown


Signed-off-by: Mahesh Salgaonkar <mahesh@linux.ibm.com>
---
 hw/ppc/spapr_events.c |   26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
index 8b32b7eea5..98a32a2e2e 100644
--- a/hw/ppc/spapr_events.c
+++ b/hw/ppc/spapr_events.c
@@ -243,6 +243,14 @@ struct rtas_event_log_v6_mc {
 #define RTAS_LOG_V6_MC_TLB_PARITY                        1
 #define RTAS_LOG_V6_MC_TLB_MULTIHIT                      2
 #define RTAS_LOG_V6_MC_TLB_INDETERMINATE                 3
+/*
+ * Per PAPR,
+ * For UE error type, set bit 1 of sub_err_type to indicate effective addr is
+ * provided. For other error types (SLB/ERAT/TLB), set bit 0 to indicate
+ * same.
+ */
+#define RTAS_LOG_V6_MC_UE_EA_ADDR_PROVIDED               0x40
+#define RTAS_LOG_V6_MC_EA_ADDR_PROVIDED                  0x80
     uint8_t reserved_1[6];
     uint64_t effective_address;
     uint64_t logical_address;
@@ -726,6 +734,22 @@ void spapr_hotplug_req_remove_by_count_indexed(SpaprDrcType drc_type,
                             RTAS_LOG_V6_HP_ACTION_REMOVE, drc_type, &drc_id);
 }
 
+static void spapr_mc_set_ea_provided_flag(struct mc_extended_log *ext_elog)
+{
+	switch (ext_elog->mc.error_type) {
+	case RTAS_LOG_V6_MC_TYPE_UE:
+		ext_elog->mc.sub_err_type |= RTAS_LOG_V6_MC_UE_EA_ADDR_PROVIDED;
+		break;
+	case RTAS_LOG_V6_MC_TYPE_SLB:
+	case RTAS_LOG_V6_MC_TYPE_ERAT:
+	case RTAS_LOG_V6_MC_TYPE_TLB:
+		ext_elog->mc.sub_err_type |= RTAS_LOG_V6_MC_EA_ADDR_PROVIDED;
+		break;
+	default:
+		break;
+	}
+}
+
 static uint32_t spapr_mce_get_elog_type(PowerPCCPU *cpu, bool recovered,
                                         struct mc_extended_log *ext_elog)
 {
@@ -751,6 +775,7 @@ static uint32_t spapr_mce_get_elog_type(PowerPCCPU *cpu, bool recovered,
             ext_elog->mc.sub_err_type = mc_derror_table[i].error_subtype;
             if (mc_derror_table[i].dar_valid) {
                 ext_elog->mc.effective_address = cpu_to_be64(env->spr[SPR_DAR]);
+                spapr_mc_set_ea_provided_flag(ext_elog);
             }
 
             summary |= mc_derror_table[i].initiator
@@ -769,6 +794,7 @@ static uint32_t spapr_mce_get_elog_type(PowerPCCPU *cpu, bool recovered,
             ext_elog->mc.sub_err_type = mc_ierror_table[i].error_subtype;
             if (mc_ierror_table[i].nip_valid) {
                 ext_elog->mc.effective_address = cpu_to_be64(env->nip);
+                spapr_mc_set_ea_provided_flag(ext_elog);
             }
 
             summary |= mc_ierror_table[i].initiator


Re: [PATCH] ppc/spapr: Set the effective address provided flag in mc error log.
Posted by no-reply@patchew.org 4 years, 1 month ago
Patchew URL: https://patchew.org/QEMU/158444819283.31599.12155058652686614304.stgit@jupiter/



Hi,

This series seems to have some coding style problems. See output below for
more information:

Subject: [PATCH] ppc/spapr: Set the effective address provided flag in mc error log.
Message-id: 158444819283.31599.12155058652686614304.stgit@jupiter
Type: series

=== TEST SCRIPT BEGIN ===
#!/bin/bash
git rev-parse base > /dev/null || exit 0
git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram
./scripts/checkpatch.pl --mailback base..
=== TEST SCRIPT END ===

Switched to a new branch 'test'
62d8ada ppc/spapr: Set the effective address provided flag in mc error log.

=== OUTPUT BEGIN ===
ERROR: code indent should never use tabs
#57: FILE: hw/ppc/spapr_events.c:739:
+^Iswitch (ext_elog->mc.error_type) {$

ERROR: code indent should never use tabs
#58: FILE: hw/ppc/spapr_events.c:740:
+^Icase RTAS_LOG_V6_MC_TYPE_UE:$

ERROR: code indent should never use tabs
#59: FILE: hw/ppc/spapr_events.c:741:
+^I^Iext_elog->mc.sub_err_type |= RTAS_LOG_V6_MC_UE_EA_ADDR_PROVIDED;$

ERROR: code indent should never use tabs
#60: FILE: hw/ppc/spapr_events.c:742:
+^I^Ibreak;$

ERROR: code indent should never use tabs
#61: FILE: hw/ppc/spapr_events.c:743:
+^Icase RTAS_LOG_V6_MC_TYPE_SLB:$

ERROR: code indent should never use tabs
#62: FILE: hw/ppc/spapr_events.c:744:
+^Icase RTAS_LOG_V6_MC_TYPE_ERAT:$

ERROR: code indent should never use tabs
#63: FILE: hw/ppc/spapr_events.c:745:
+^Icase RTAS_LOG_V6_MC_TYPE_TLB:$

ERROR: code indent should never use tabs
#64: FILE: hw/ppc/spapr_events.c:746:
+^I^Iext_elog->mc.sub_err_type |= RTAS_LOG_V6_MC_EA_ADDR_PROVIDED;$

ERROR: code indent should never use tabs
#65: FILE: hw/ppc/spapr_events.c:747:
+^I^Ibreak;$

ERROR: code indent should never use tabs
#66: FILE: hw/ppc/spapr_events.c:748:
+^Idefault:$

ERROR: code indent should never use tabs
#67: FILE: hw/ppc/spapr_events.c:749:
+^I^Ibreak;$

ERROR: code indent should never use tabs
#68: FILE: hw/ppc/spapr_events.c:750:
+^I}$

total: 12 errors, 0 warnings, 50 lines checked

Commit 62d8adac0688 (ppc/spapr: Set the effective address provided flag in mc error log.) has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
=== OUTPUT END ===

Test command exited with code: 1


The full log is available at
http://patchew.org/logs/158444819283.31599.12155058652686614304.stgit@jupiter/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
Re: [PATCH] ppc/spapr: Set the effective address provided flag in mc error log.
Posted by Greg Kurz 4 years, 1 month ago
On Tue, 17 Mar 2020 08:51:50 -0700 (PDT)
no-reply@patchew.org wrote:

> Patchew URL: https://patchew.org/QEMU/158444819283.31599.12155058652686614304.stgit@jupiter/
> 
> 
> 
> Hi,
> 
> This series seems to have some coding style problems. See output below for
> more information:
> 
> Subject: [PATCH] ppc/spapr: Set the effective address provided flag in mc error log.
> Message-id: 158444819283.31599.12155058652686614304.stgit@jupiter
> Type: series
> 
> === TEST SCRIPT BEGIN ===
> #!/bin/bash
> git rev-parse base > /dev/null || exit 0
> git config --local diff.renamelimit 0
> git config --local diff.renames True
> git config --local diff.algorithm histogram
> ./scripts/checkpatch.pl --mailback base..
> === TEST SCRIPT END ===
> 
> Switched to a new branch 'test'
> 62d8ada ppc/spapr: Set the effective address provided flag in mc error log.
> 
> === OUTPUT BEGIN ===
> ERROR: code indent should never use tabs
> #57: FILE: hw/ppc/spapr_events.c:739:
> +^Iswitch (ext_elog->mc.error_type) {$
> 

Yeah no tabs allowed in the QEMU code (see CODING_STYLE.rst).

If your editor is emacs, you can consider setting these:

  (setq indent-tabs-mode nil)
  (setq c-basic-offset 4))

> ERROR: code indent should never use tabs
> #58: FILE: hw/ppc/spapr_events.c:740:
> +^Icase RTAS_LOG_V6_MC_TYPE_UE:$
> 
> ERROR: code indent should never use tabs
> #59: FILE: hw/ppc/spapr_events.c:741:
> +^I^Iext_elog->mc.sub_err_type |= RTAS_LOG_V6_MC_UE_EA_ADDR_PROVIDED;$
> 
> ERROR: code indent should never use tabs
> #60: FILE: hw/ppc/spapr_events.c:742:
> +^I^Ibreak;$
> 
> ERROR: code indent should never use tabs
> #61: FILE: hw/ppc/spapr_events.c:743:
> +^Icase RTAS_LOG_V6_MC_TYPE_SLB:$
> 
> ERROR: code indent should never use tabs
> #62: FILE: hw/ppc/spapr_events.c:744:
> +^Icase RTAS_LOG_V6_MC_TYPE_ERAT:$
> 
> ERROR: code indent should never use tabs
> #63: FILE: hw/ppc/spapr_events.c:745:
> +^Icase RTAS_LOG_V6_MC_TYPE_TLB:$
> 
> ERROR: code indent should never use tabs
> #64: FILE: hw/ppc/spapr_events.c:746:
> +^I^Iext_elog->mc.sub_err_type |= RTAS_LOG_V6_MC_EA_ADDR_PROVIDED;$
> 
> ERROR: code indent should never use tabs
> #65: FILE: hw/ppc/spapr_events.c:747:
> +^I^Ibreak;$
> 
> ERROR: code indent should never use tabs
> #66: FILE: hw/ppc/spapr_events.c:748:
> +^Idefault:$
> 
> ERROR: code indent should never use tabs
> #67: FILE: hw/ppc/spapr_events.c:749:
> +^I^Ibreak;$
> 
> ERROR: code indent should never use tabs
> #68: FILE: hw/ppc/spapr_events.c:750:
> +^I}$
> 
> total: 12 errors, 0 warnings, 50 lines checked
> 
> Commit 62d8adac0688 (ppc/spapr: Set the effective address provided flag in mc error log.) has style problems, please review.  If any of these errors
> are false positives report them to the maintainer, see
> CHECKPATCH in MAINTAINERS.
> === OUTPUT END ===
> 
> Test command exited with code: 1
> 
> 
> The full log is available at
> http://patchew.org/logs/158444819283.31599.12155058652686614304.stgit@jupiter/testing.checkpatch/?type=message.
> ---
> Email generated automatically by Patchew [https://patchew.org/].
> Please send your feedback to patchew-devel@redhat.com

Re: [PATCH] ppc/spapr: Set the effective address provided flag in mc error log.
Posted by Mahesh J Salgaonkar 4 years, 1 month ago
On 2020-03-17 17:11:22 Tue, Greg Kurz wrote:
> On Tue, 17 Mar 2020 08:51:50 -0700 (PDT)
> no-reply@patchew.org wrote:
> 
> > Patchew URL: https://patchew.org/QEMU/158444819283.31599.12155058652686614304.stgit@jupiter/
> > 
> > 
> > 
> > Hi,
> > 
> > This series seems to have some coding style problems. See output below for
> > more information:
> > 
> > Subject: [PATCH] ppc/spapr: Set the effective address provided flag in mc error log.
> > Message-id: 158444819283.31599.12155058652686614304.stgit@jupiter
> > Type: series
> > 
> > === TEST SCRIPT BEGIN ===
> > #!/bin/bash
> > git rev-parse base > /dev/null || exit 0
> > git config --local diff.renamelimit 0
> > git config --local diff.renames True
> > git config --local diff.algorithm histogram
> > ./scripts/checkpatch.pl --mailback base..
> > === TEST SCRIPT END ===
> > 
> > Switched to a new branch 'test'
> > 62d8ada ppc/spapr: Set the effective address provided flag in mc error log.
> > 
> > === OUTPUT BEGIN ===
> > ERROR: code indent should never use tabs
> > #57: FILE: hw/ppc/spapr_events.c:739:
> > +^Iswitch (ext_elog->mc.error_type) {$
> > 
> 
> Yeah no tabs allowed in the QEMU code (see CODING_STYLE.rst).
> 
> If your editor is emacs, you can consider setting these:
> 
>   (setq indent-tabs-mode nil)
>   (setq c-basic-offset 4))

My bad. Will fix it and respin v2.

Thanks,
-Mahesh.