All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Cc: Igor Mammedov <imammedo@redhat.com>,
	Shiju Jose <shiju.jose@huawei.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Ani Sinha <anisinha@redhat.com>,
	Dongjiu Geng <gengdongjiu1@gmail.com>,
	<linux-kernel@vger.kernel.org>, <qemu-arm@nongnu.org>,
	<qemu-devel@nongnu.org>
Subject: Re: [PATCH 09/15] acpi/ghes: make the GHES record generation more generic
Date: Thu, 26 Sep 2024 13:00:56 +0100	[thread overview]
Message-ID: <20240926130056.00001e12@Huawei.com> (raw)
In-Reply-To: <9b256923695e2202f549cbbb11dc22982cb22abf.1727236561.git.mchehab+huawei@kernel.org>

On Wed, 25 Sep 2024 06:04:14 +0200
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:

> Split the code into separate functions to allow using the
> common CPER filling code by different error sources.
> 
> The generic code was moved to ghes_record_cper_errors(),
> and ghes_gen_err_data_uncorrectable_recoverable() now contains
> only a logic to fill GEGB part of the record.
> 
> The remaining code to generate a memory error now belongs to
> acpi_ghes_record_errors() function.
> 
> A further patch will give it a better name.

That bit is fine, I'm less sure about
ghes_gen_err_data_uncorrectable_recoverable()
Maybe you refactor that later, but I'd suggest doing so in this
patch to make it 
ghes_gen_data() with the uncorrectable and recoverable bits
passed in as parameters.

Jonathan

> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> ---
>  hw/acpi/ghes.c         | 118 +++++++++++++++++++++++++----------------
>  include/hw/acpi/ghes.h |   3 ++
>  2 files changed, 74 insertions(+), 47 deletions(-)
> 
> diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c
> index 340a0263faf8..307b5a41d539 100644
> --- a/hw/acpi/ghes.c
> +++ b/hw/acpi/ghes.c
> @@ -181,51 +181,30 @@ static void acpi_ghes_build_append_mem_cper(GArray *table,
>      build_append_int_noprefix(table, 0, 7);
>  }
>  
> -static int acpi_ghes_record_mem_error(uint64_t error_block_address,
> -                                      uint64_t error_physical_addr)
> +static void
> +ghes_gen_err_data_uncorrectable_recoverable(GArray *block,
> +                                            const uint8_t *section_type,
> +                                            int data_length)
>  {

That's an ugly name .  Suggestion below on instead passing parameters
for the uncorrectable and recoverable parts and amking this
ghes_gen_err_data()

> -    GArray *block;
> -
> -    /* Memory Error Section Type */
> -    const uint8_t uefi_cper_mem_sec[] =
> -          UUID_LE(0xA5BC1114, 0x6F64, 0x4EDE, 0xB8, 0x63, 0x3E, 0x83, \
> -                  0xED, 0x7C, 0x83, 0xB1);
> -
>      /* invalid fru id: ACPI 4.0: 17.3.2.6.1 Generic Error Data,
>       * Table 17-13 Generic Error Data Entry
>       */
>      QemuUUID fru_id = {};
> -    uint32_t data_length;
>  
> -    block = g_array_new(false, true /* clear */, 1);
> -
> -    /* This is the length if adding a new generic error data entry*/
> -    data_length = ACPI_GHES_DATA_LENGTH + ACPI_GHES_MEM_CPER_LENGTH;
>      /*
> -     * It should not run out of the preallocated memory if adding a new generic
> -     * error data entry
> +     * Calculate the size with this block. No need to check for
> +     * too big CPER, as CPER size is checked at ghes_record_cper_errors()
>       */
> -    assert((data_length + ACPI_GHES_GESB_SIZE) <=
> -            ACPI_GHES_MAX_RAW_DATA_LENGTH);
> +    data_length += ACPI_GHES_GESB_SIZE;
>  
>      /* Build the new generic error status block header */
>      acpi_ghes_generic_error_status(block, ACPI_GEBS_UNCORRECTABLE,
>          0, 0, data_length, ACPI_CPER_SEV_RECOVERABLE);
>  
>      /* Build this new generic error data entry header */
> -    acpi_ghes_generic_error_data(block, uefi_cper_mem_sec,
> +    acpi_ghes_generic_error_data(block, section_type,
>          ACPI_CPER_SEV_RECOVERABLE, 0, 0,
>          ACPI_GHES_MEM_CPER_LENGTH, fru_id, 0);
Maybe should just pass in ACPI_CPER_SEV_RECOVERABLE 
and ACPI_GEBS_UNCORRECTABLE in parameters.

Main advantage being that should allow reuse for other combinations
and it gets rid of the nasty function name!

> -
> -    /* Build the memory section CPER for above new generic error data entry */
> -    acpi_ghes_build_append_mem_cper(block, error_physical_addr);
> -
> -    /* Write the generic error data entry into guest memory */
> -    cpu_physical_memory_write(error_block_address, block->data, block->len);
> -
> -    g_array_free(block, true);
> -
> -    return 0;
>  }
>  
>  /*
> @@ -399,14 +378,19 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgState *s,
>      ags->present = true;
>  }
>  
> -int acpi_ghes_record_errors(uint16_t source_id, uint64_t physical_address)
> +void ghes_record_cper_errors(const void *cper, size_t len,
> +                             uint16_t source_id, Error **errp)
>  {

> -    return ret;
> +    read_ack_register = cpu_to_le64(0);
> +    /*
> +        * Clear the Read Ack Register, OSPM will write it to 1 when
> +        * it acknowledges this error.
> +        */

Indent issue.

> +    cpu_physical_memory_write(read_ack_register_addr,
> +        &read_ack_register, sizeof(uint64_t));
> +
> +    /* Write the generic error data entry into guest memory */
> +    cpu_physical_memory_write(error_block_addr, cper, len);
> +
> +    return;
> +}


WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron via <qemu-devel@nongnu.org>
To: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Cc: Igor Mammedov <imammedo@redhat.com>,
	Shiju Jose <shiju.jose@huawei.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Ani Sinha <anisinha@redhat.com>,
	Dongjiu Geng <gengdongjiu1@gmail.com>,
	<linux-kernel@vger.kernel.org>, <qemu-arm@nongnu.org>,
	<qemu-devel@nongnu.org>
Subject: Re: [PATCH 09/15] acpi/ghes: make the GHES record generation more generic
Date: Thu, 26 Sep 2024 13:00:56 +0100	[thread overview]
Message-ID: <20240926130056.00001e12@Huawei.com> (raw)
In-Reply-To: <9b256923695e2202f549cbbb11dc22982cb22abf.1727236561.git.mchehab+huawei@kernel.org>

On Wed, 25 Sep 2024 06:04:14 +0200
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:

> Split the code into separate functions to allow using the
> common CPER filling code by different error sources.
> 
> The generic code was moved to ghes_record_cper_errors(),
> and ghes_gen_err_data_uncorrectable_recoverable() now contains
> only a logic to fill GEGB part of the record.
> 
> The remaining code to generate a memory error now belongs to
> acpi_ghes_record_errors() function.
> 
> A further patch will give it a better name.

That bit is fine, I'm less sure about
ghes_gen_err_data_uncorrectable_recoverable()
Maybe you refactor that later, but I'd suggest doing so in this
patch to make it 
ghes_gen_data() with the uncorrectable and recoverable bits
passed in as parameters.

Jonathan

> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> ---
>  hw/acpi/ghes.c         | 118 +++++++++++++++++++++++++----------------
>  include/hw/acpi/ghes.h |   3 ++
>  2 files changed, 74 insertions(+), 47 deletions(-)
> 
> diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c
> index 340a0263faf8..307b5a41d539 100644
> --- a/hw/acpi/ghes.c
> +++ b/hw/acpi/ghes.c
> @@ -181,51 +181,30 @@ static void acpi_ghes_build_append_mem_cper(GArray *table,
>      build_append_int_noprefix(table, 0, 7);
>  }
>  
> -static int acpi_ghes_record_mem_error(uint64_t error_block_address,
> -                                      uint64_t error_physical_addr)
> +static void
> +ghes_gen_err_data_uncorrectable_recoverable(GArray *block,
> +                                            const uint8_t *section_type,
> +                                            int data_length)
>  {

That's an ugly name .  Suggestion below on instead passing parameters
for the uncorrectable and recoverable parts and amking this
ghes_gen_err_data()

> -    GArray *block;
> -
> -    /* Memory Error Section Type */
> -    const uint8_t uefi_cper_mem_sec[] =
> -          UUID_LE(0xA5BC1114, 0x6F64, 0x4EDE, 0xB8, 0x63, 0x3E, 0x83, \
> -                  0xED, 0x7C, 0x83, 0xB1);
> -
>      /* invalid fru id: ACPI 4.0: 17.3.2.6.1 Generic Error Data,
>       * Table 17-13 Generic Error Data Entry
>       */
>      QemuUUID fru_id = {};
> -    uint32_t data_length;
>  
> -    block = g_array_new(false, true /* clear */, 1);
> -
> -    /* This is the length if adding a new generic error data entry*/
> -    data_length = ACPI_GHES_DATA_LENGTH + ACPI_GHES_MEM_CPER_LENGTH;
>      /*
> -     * It should not run out of the preallocated memory if adding a new generic
> -     * error data entry
> +     * Calculate the size with this block. No need to check for
> +     * too big CPER, as CPER size is checked at ghes_record_cper_errors()
>       */
> -    assert((data_length + ACPI_GHES_GESB_SIZE) <=
> -            ACPI_GHES_MAX_RAW_DATA_LENGTH);
> +    data_length += ACPI_GHES_GESB_SIZE;
>  
>      /* Build the new generic error status block header */
>      acpi_ghes_generic_error_status(block, ACPI_GEBS_UNCORRECTABLE,
>          0, 0, data_length, ACPI_CPER_SEV_RECOVERABLE);
>  
>      /* Build this new generic error data entry header */
> -    acpi_ghes_generic_error_data(block, uefi_cper_mem_sec,
> +    acpi_ghes_generic_error_data(block, section_type,
>          ACPI_CPER_SEV_RECOVERABLE, 0, 0,
>          ACPI_GHES_MEM_CPER_LENGTH, fru_id, 0);
Maybe should just pass in ACPI_CPER_SEV_RECOVERABLE 
and ACPI_GEBS_UNCORRECTABLE in parameters.

Main advantage being that should allow reuse for other combinations
and it gets rid of the nasty function name!

> -
> -    /* Build the memory section CPER for above new generic error data entry */
> -    acpi_ghes_build_append_mem_cper(block, error_physical_addr);
> -
> -    /* Write the generic error data entry into guest memory */
> -    cpu_physical_memory_write(error_block_address, block->data, block->len);
> -
> -    g_array_free(block, true);
> -
> -    return 0;
>  }
>  
>  /*
> @@ -399,14 +378,19 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgState *s,
>      ags->present = true;
>  }
>  
> -int acpi_ghes_record_errors(uint16_t source_id, uint64_t physical_address)
> +void ghes_record_cper_errors(const void *cper, size_t len,
> +                             uint16_t source_id, Error **errp)
>  {

> -    return ret;
> +    read_ack_register = cpu_to_le64(0);
> +    /*
> +        * Clear the Read Ack Register, OSPM will write it to 1 when
> +        * it acknowledges this error.
> +        */

Indent issue.

> +    cpu_physical_memory_write(read_ack_register_addr,
> +        &read_ack_register, sizeof(uint64_t));
> +
> +    /* Write the generic error data entry into guest memory */
> +    cpu_physical_memory_write(error_block_addr, cper, len);
> +
> +    return;
> +}



  reply	other threads:[~2024-09-26 12:01 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-25  4:04 [PATCH 00/15] Prepare GHES driver to support error injection Mauro Carvalho Chehab
2024-09-25  4:04 ` [PATCH 01/15] acpi/ghes: get rid of ACPI_HEST_SRC_ID_RESERVED Mauro Carvalho Chehab
2024-09-25 14:02   ` Jonathan Cameron via
2024-09-25 14:02     ` Jonathan Cameron
2024-09-25  4:04 ` [PATCH 02/15] acpi/ghes: simplify acpi_ghes_record_errors() code Mauro Carvalho Chehab
2024-09-25 14:09   ` Jonathan Cameron via
2024-09-25 14:09     ` Jonathan Cameron
2024-09-25 14:09     ` Jonathan Cameron via
2024-09-25  4:04 ` [PATCH 03/15] acpi/ghes: simplify the per-arch caller to build HEST table Mauro Carvalho Chehab
2024-09-25 14:11   ` Jonathan Cameron via
2024-09-25 14:11     ` Jonathan Cameron
2024-09-25 14:11     ` Jonathan Cameron via
2024-09-25  4:04 ` [PATCH 04/15] acpi/ghes: better handle source_id and notification Mauro Carvalho Chehab
2024-09-25 14:13   ` Jonathan Cameron via
2024-09-25 14:13     ` Jonathan Cameron
2024-09-25 14:13     ` Jonathan Cameron via
2024-09-25  4:04 ` [PATCH 05/15] acpi/ghes: Fix acpi_ghes_record_errors() argument Mauro Carvalho Chehab
2024-09-25 14:15   ` Jonathan Cameron via
2024-09-25 14:15     ` Jonathan Cameron
2024-09-25 14:15     ` Jonathan Cameron via
2024-09-25  4:04 ` [PATCH 06/15] acpi/ghes: Remove a duplicated out of bounds check Mauro Carvalho Chehab
2024-09-25 14:15   ` Jonathan Cameron via
2024-09-25 14:15     ` Jonathan Cameron
2024-09-25  4:04 ` [PATCH 07/15] acpi/ghes: Change the type for source_id Mauro Carvalho Chehab
2024-09-25 14:16   ` Jonathan Cameron via
2024-09-25 14:16     ` Jonathan Cameron
2024-09-25 14:16     ` Jonathan Cameron via
2024-09-25  4:04 ` [PATCH 08/15] acpi/ghes: Prepare to support multiple sources on ghes Mauro Carvalho Chehab
2024-09-25 14:23   ` Jonathan Cameron via
2024-09-25 14:23     ` Jonathan Cameron
2024-09-25 14:23     ` Jonathan Cameron via
2024-10-01  5:29     ` Mauro Carvalho Chehab
2024-09-25  4:04 ` [PATCH 09/15] acpi/ghes: make the GHES record generation more generic Mauro Carvalho Chehab
2024-09-26 12:00   ` Jonathan Cameron [this message]
2024-09-26 12:00     ` Jonathan Cameron via
2024-09-26 14:19     ` Mauro Carvalho Chehab
2024-09-25  4:04 ` [PATCH 10/15] acpi/ghes: move offset calculus to a separate function Mauro Carvalho Chehab
2024-09-26 12:03   ` Jonathan Cameron
2024-09-26 12:03     ` Jonathan Cameron via
2024-10-01  5:38     ` Mauro Carvalho Chehab
2024-09-25  4:04 ` [PATCH 11/15] acpi/ghes: better name GHES memory error function Mauro Carvalho Chehab
2024-09-26 12:07   ` Jonathan Cameron
2024-09-26 12:07     ` Jonathan Cameron via
2024-09-25  4:04 ` [PATCH 12/15] acpi/ghes: don't crash QEMU if ghes GED is not found Mauro Carvalho Chehab
2024-09-26 12:09   ` Jonathan Cameron
2024-09-26 12:09     ` Jonathan Cameron via
2024-09-26 14:24     ` Mauro Carvalho Chehab
2024-09-25  4:04 ` [PATCH 13/15] acpi/ghes: rename etc/hardware_error file macros Mauro Carvalho Chehab
2024-09-26 12:11   ` Jonathan Cameron
2024-09-26 12:11     ` Jonathan Cameron via
2024-09-25  4:04 ` [PATCH 14/15] better name the offset of the hardware error firmware Mauro Carvalho Chehab
2024-09-26 12:12   ` Jonathan Cameron
2024-09-26 12:12     ` Jonathan Cameron via
2024-10-01  6:02     ` Mauro Carvalho Chehab
2024-09-25  4:04 ` [PATCH 15/15] docs: acpi_hest_ghes: fix documentation for CPER size Mauro Carvalho Chehab
2024-09-26 12:13   ` Jonathan Cameron
2024-09-26 12:13     ` Jonathan Cameron via

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240926130056.00001e12@Huawei.com \
    --to=jonathan.cameron@huawei.com \
    --cc=anisinha@redhat.com \
    --cc=gengdongjiu1@gmail.com \
    --cc=imammedo@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mchehab+huawei@kernel.org \
    --cc=mst@redhat.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=shiju.jose@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.