Re: [PATCH V8 08/10] ras: acpi / apei: generate trace event for unrecognized CPER section

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2/15/2017 8:52 AM, Steven Rostedt wrote:
On Wed,  1 Feb 2017 10:16:51 -0700
Tyler Baicar <tbaicar@xxxxxxxxxxxxxx> wrote:

@@ -452,11 +454,21 @@ static void ghes_do_proc(struct ghes *ghes,
  {
  	int sev, sec_sev;
  	struct acpi_hest_generic_data *gdata;
+	uuid_le sec_type;
+	uuid_le *fru_id = &NULL_UUID_LE;
+	char *fru_text = "";
sev = ghes_severity(estatus->error_severity);
  	apei_estatus_for_each_section(estatus, gdata) {
  		sec_sev = ghes_severity(gdata->error_severity);
-		if (!uuid_le_cmp(*(uuid_le *)gdata->section_type,
+		sec_type = *(uuid_le *)gdata->section_type;
+
+		if (gdata->validation_bits & CPER_SEC_VALID_FRU_ID)
+			fru_id = (uuid_le *)gdata->fru_id;
+		if (gdata->validation_bits & CPER_SEC_VALID_FRU_TEXT)
+			fru_text = gdata->fru_text;
+
+		if (!uuid_le_cmp(sec_type,
  				 CPER_SEC_PLATFORM_MEM)) {
  			struct cper_sec_mem_err *mem_err;
@@ -467,7 +479,7 @@ static void ghes_do_proc(struct ghes *ghes,
  			ghes_handle_memory_failure(gdata, sev);
  		}
  #ifdef CONFIG_ACPI_APEI_PCIEAER
-		else if (!uuid_le_cmp(*(uuid_le *)gdata->section_type,
+		else if (!uuid_le_cmp(sec_type,
  				      CPER_SEC_PCIE)) {
  			struct cper_sec_pcie *pcie_err;
@@ -500,6 +512,12 @@ static void ghes_do_proc(struct ghes *ghes, }
  #endif
+		else {
As an optimization, you can add:

		else if (trace_unknown_sec_event_enabled()) {

instead, as then this wont be called unless the tracepoint is
activated. Will keep the logic from doing anything with
acpi_hest_generic_data_payload().

Note, that trace_*_enabled() is activated via a jump_label, thus
there's no branches involved.

-- Steve
Hello Steve,

In v9 I currently have this and the ARM trace event from this series both wrapped in an ifdef verifying that CONFIG_RAS is enabled. This resolves the kbuild failures and will have this code compiled out when that config isn't enabled. Do you think I
should use the ifdef or use these *_enabled() functions?

Thanks,
Tyler
+			void *unknown_err = acpi_hest_generic_data_payload(gdata);
+			trace_unknown_sec_event(&sec_type,
+					fru_id, fru_text, sec_sev,
+					unknown_err, gdata->error_data_length);
+		}
  	}
  }

--
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project.




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux