diff mbox series

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

Message ID 158444819283.31599.12155058652686614304.stgit@jupiter (mailing list archive)
State New, archived
Headers show
Series ppc/spapr: Set the effective address provided flag in mc error log. | expand

Commit Message

Mahesh Salgaonkar March 17, 2020, 12:29 p.m. UTC
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(+)

Comments

no-reply@patchew.org March 17, 2020, 3:51 p.m. UTC | #1
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
Greg Kurz March 17, 2020, 4:11 p.m. UTC | #2
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
Mahesh Salgaonkar March 18, 2020, 4:06 a.m. UTC | #3
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.
diff mbox series

Patch

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