A couple of the EDAC drivers have a nice memdev_dmi_entry structure for decoding DMI memory device entries. Move the structure definition to dmi.h so that it can be shared between those drivers and also other parts of the kernel; the i915 graphics driver is going to need to use this structure soon as well. As part of this move we rename the structure s/memdev_dmi_entry/dmi_entry_memdev/ to ensure it has a proper 'dmi' prefix. v2: - Rename structure to dmi_entry_memdev. (Jean) - Use __packed instead of __attribute__((__packed__)) for consistency with the rest of the dmi.h header. (Jean) Cc: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxx> Cc: Jean Delvare <jdelvare@xxxxxxxx> Cc: linux-edac@xxxxxxxxxxxxxxx Cc: linux-kernel@xxxxxxxxxxxxxxx Signed-off-by: Matt Roper <matthew.d.roper@xxxxxxxxx> --- drivers/edac/ghes_edac.c | 28 +-------------------------- drivers/edac/i7core_edac.c | 47 +++++++++++----------------------------------- include/linux/dmi.h | 25 ++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 63 deletions(-) diff --git a/drivers/edac/ghes_edac.c b/drivers/edac/ghes_edac.c index e3fa439..39535bb 100644 --- a/drivers/edac/ghes_edac.c +++ b/drivers/edac/ghes_edac.c @@ -35,32 +35,6 @@ static DEFINE_MUTEX(ghes_edac_lock); static int ghes_edac_mc_num; -/* Memory Device - Type 17 of SMBIOS spec */ -struct memdev_dmi_entry { - u8 type; - u8 length; - u16 handle; - u16 phys_mem_array_handle; - u16 mem_err_info_handle; - u16 total_width; - u16 data_width; - u16 size; - u8 form_factor; - u8 device_set; - u8 device_locator; - u8 bank_locator; - u8 memory_type; - u16 type_detail; - u16 speed; - u8 manufacturer; - u8 serial_number; - u8 asset_tag; - u8 part_number; - u8 attributes; - u32 extended_size; - u16 conf_mem_clk_speed; -} __attribute__((__packed__)); - struct ghes_edac_dimm_fill { struct mem_ctl_info *mci; unsigned count; @@ -80,7 +54,7 @@ static void ghes_edac_dmidecode(const struct dmi_header *dh, void *arg) struct mem_ctl_info *mci = dimm_fill->mci; if (dh->type == DMI_ENTRY_MEM_DEVICE) { - struct memdev_dmi_entry *entry = (struct memdev_dmi_entry *)dh; + struct dmi_entry_memdev *entry = (struct dmi_entry_memdev *)dh; struct dimm_info *dimm = EDAC_DIMM_PTR(mci->layers, mci->dimms, mci->n_layers, dimm_fill->count, 0, 0); diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c index 01087a3..fbfb06f 100644 --- a/drivers/edac/i7core_edac.c +++ b/drivers/edac/i7core_edac.c @@ -1906,31 +1906,6 @@ static struct notifier_block i7_mce_dec = { .notifier_call = i7core_mce_check_error, }; -struct memdev_dmi_entry { - u8 type; - u8 length; - u16 handle; - u16 phys_mem_array_handle; - u16 mem_err_info_handle; - u16 total_width; - u16 data_width; - u16 size; - u8 form; - u8 device_set; - u8 device_locator; - u8 bank_locator; - u8 memory_type; - u16 type_detail; - u16 speed; - u8 manufacturer; - u8 serial_number; - u8 asset_tag; - u8 part_number; - u8 attributes; - u32 extended_size; - u16 conf_mem_clk_speed; -} __attribute__((__packed__)); - /* * Decode the DRAM Clock Frequency, be paranoid, make sure that all @@ -1946,28 +1921,28 @@ static void decode_dclk(const struct dmi_header *dh, void *_dclk_freq) return; if (dh->type == DMI_ENTRY_MEM_DEVICE) { - struct memdev_dmi_entry *memdev_dmi_entry = - (struct memdev_dmi_entry *)dh; + struct dmi_entry_memdev *dmi_entry_memdev = + (struct dmi_entry_memdev *)dh; unsigned long conf_mem_clk_speed_offset = - (unsigned long)&memdev_dmi_entry->conf_mem_clk_speed - - (unsigned long)&memdev_dmi_entry->type; + (unsigned long)&dmi_entry_memdev->conf_mem_clk_speed - + (unsigned long)&dmi_entry_memdev->type; unsigned long speed_offset = - (unsigned long)&memdev_dmi_entry->speed - - (unsigned long)&memdev_dmi_entry->type; + (unsigned long)&dmi_entry_memdev->speed - + (unsigned long)&dmi_entry_memdev->type; /* Check that a DIMM is present */ - if (memdev_dmi_entry->size == 0) + if (dmi_entry_memdev->size == 0) return; /* * Pick the configured speed if it's available, otherwise * pick the DIMM speed, or we don't have a speed. */ - if (memdev_dmi_entry->length > conf_mem_clk_speed_offset) { + if (dmi_entry_memdev->length > conf_mem_clk_speed_offset) { dmi_mem_clk_speed = - memdev_dmi_entry->conf_mem_clk_speed; - } else if (memdev_dmi_entry->length > speed_offset) { - dmi_mem_clk_speed = memdev_dmi_entry->speed; + dmi_entry_memdev->conf_mem_clk_speed; + } else if (dmi_entry_memdev->length > speed_offset) { + dmi_mem_clk_speed = dmi_entry_memdev->speed; } else { *dclk_freq = -1; return; diff --git a/include/linux/dmi.h b/include/linux/dmi.h index 5e9c74c..60dcc31 100644 --- a/include/linux/dmi.h +++ b/include/linux/dmi.h @@ -78,6 +78,31 @@ struct dmi_header { u16 handle; } __packed; +struct dmi_entry_memdev { + u8 type; + u8 length; + u16 handle; + u16 phys_mem_array_handle; + u16 mem_err_info_handle; + u16 total_width; + u16 data_width; + u16 size; + u8 form; + u8 device_set; + u8 device_locator; + u8 bank_locator; + u8 memory_type; + u16 type_detail; + u16 speed; + u8 manufacturer; + u8 serial_number; + u8 asset_tag; + u8 part_number; + u8 attributes; + u32 extended_size; + u16 conf_mem_clk_speed; +} __packed; + struct dmi_device { struct list_head list; int type; -- 2.1.4 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx