From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>, James Morse <james.morse@arm.com>,
Shiju Jose <shiju.jose@huawei.com>,
Tony Luck <tony.luck@intel.com>,
Alison Schofield <alison.schofield@intel.com>,
Ard Biesheuvel <ardb@kernel.org>,
Dave Jiang <dave.jiang@intel.com>,
Ira Weiny <ira.weiny@intel.com>, <linux-edac@vger.kernel.org>,
<linux-efi@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v5 2/4] efi/cper: Add a new helper function to print bitmasks
Date: Mon, 1 Jul 2024 16:07:09 +0100 [thread overview]
Message-ID: <20240701160709.000064c6@Huawei.com> (raw)
In-Reply-To: <b5a425bd61f211a17a2b296a3c9ac251b3c3a20b.1719219886.git.mchehab+huawei@kernel.org>
On Mon, 24 Jun 2024 11:19:19 +0200
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:
> Sometimes it is desired to produce a single log line for errors.
This description is a bit cryptic. Maybe an example would make
it easier for anyone coming across this in the future?
> Add a new helper function for such purpose.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Minor comment inline.
> ---
> drivers/firmware/efi/cper.c | 41 +++++++++++++++++++++++++++++++++++++
> include/linux/cper.h | 2 ++
> 2 files changed, 43 insertions(+)
>
> diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c
> index 7d2cdd9e2227..4cf56657afde 100644
> --- a/drivers/firmware/efi/cper.c
> +++ b/drivers/firmware/efi/cper.c
> @@ -106,6 +106,47 @@ void cper_print_bits(const char *pfx, unsigned int bits,
> printk("%s\n", buf);
> }
>
> +/*
> + * cper_bits_to_str - return a string for set bits
> + * @buf: buffer to store the output string
> + * @buf_size: size of the output string buffer
> + * @bits: bit mask
> + * @strs: string array, indexed by bit position
> + * @strs_size: size of the string array: @strs
> + * @mask: a continuous bitmask used to detect the first valid bit of the
> + * bitmap.
> + *
> + * Add to @buf the bitmask in hexadecimal. Then, for each set bit in @bits
> + * mask, add the corresponding string describing the bit in @strs to @buf.
> + */
> +char *cper_bits_to_str(char *buf, int buf_size, unsigned long bits,
> + const char * const strs[], unsigned int strs_size)
> +{
> + int len = buf_size;
> + char *str = buf;
> + int i, size;
> +
> + for_each_set_bit(i, &bits, strs_size) {
> + if (!(bits & (1U << (i))))
> + continue;
> +
> + if (*buf && len > 0) {
That first check on *buf is a bit esoteric.
It's more than possible we get a non clear
buffer passed in. I'd just use a
bool first = true;
...
if (!first && len > 0) {
*str = '|';
len--;
str++;
}
first = false;
> + *str = '|';
> + len--;
> + str++;
> + }
> +
> + size = strscpy(str, strs[i], len);
> + if (size < 0)
> + break;
> +
> + len -= size;
> + str += size;
> + }
> + return buf;
Why return buf? You never use it and it's not entirely obvious
that is the right thing to return (as opposed to length written for example).
> +}
> +EXPORT_SYMBOL_GPL(cper_bits_to_str);
> +
> static const char * const proc_type_strs[] = {
> "IA32/X64",
> "IA64",
> diff --git a/include/linux/cper.h b/include/linux/cper.h
> index 265b0f8fc0b3..c2f14b916bfb 100644
> --- a/include/linux/cper.h
> +++ b/include/linux/cper.h
> @@ -584,6 +584,8 @@ const char *cper_mem_err_type_str(unsigned int);
> const char *cper_mem_err_status_str(u64 status);
> void cper_print_bits(const char *prefix, unsigned int bits,
> const char * const strs[], unsigned int strs_size);
> +char *cper_bits_to_str(char *buf, int buf_size, unsigned long bits,
> + const char * const strs[], unsigned int strs_size);
> void cper_mem_err_pack(const struct cper_sec_mem_err *,
> struct cper_mem_err_compact *);
> const char *cper_mem_err_unpack(struct trace_seq *,
next prev parent reply other threads:[~2024-07-01 15:07 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-24 9:19 [PATCH v5 0/4] fix CPER issues related to UEFI 2.9A Errata Mauro Carvalho Chehab
2024-06-24 9:19 ` [PATCH v5 1/4] efi/cper: Adjust infopfx size to accept an extra space Mauro Carvalho Chehab
2024-06-24 9:19 ` [PATCH v5 2/4] efi/cper: Add a new helper function to print bitmasks Mauro Carvalho Chehab
2024-07-01 15:07 ` Jonathan Cameron [this message]
2024-06-24 9:19 ` [PATCH v5 3/4] efi/cper: align ARM CPER type with UEFI 2.9A/2.10 specs Mauro Carvalho Chehab
2024-06-27 8:59 ` kernel test robot
2024-06-28 20:28 ` kernel test robot
2024-06-24 9:19 ` [PATCH v5 4/4] docs: efi: add CPER functions to driver-api Mauro Carvalho Chehab
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=20240701160709.000064c6@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=alison.schofield@intel.com \
--cc=ardb@kernel.org \
--cc=bp@alien8.de \
--cc=dave.jiang@intel.com \
--cc=ira.weiny@intel.com \
--cc=james.morse@arm.com \
--cc=linux-edac@vger.kernel.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mchehab+huawei@kernel.org \
--cc=shiju.jose@huawei.com \
--cc=tony.luck@intel.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.