[PATCH] EDAC/versalnet: Handle split messages for non-standard errors

Shubhrajyoti Datta posted 1 patch 3 months, 2 weeks ago
drivers/edac/versalnet_edac.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
[PATCH] EDAC/versalnet: Handle split messages for non-standard errors
Posted by Shubhrajyoti Datta 3 months, 2 weeks ago
The current code assumes that only DDR errors have split messages.
Ensures proper logging of non-standard event errors
that may be split across multiple messages.

Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
---

 drivers/edac/versalnet_edac.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/edac/versalnet_edac.c b/drivers/edac/versalnet_edac.c
index fc7e4c43b387..a055f54a389b 100644
--- a/drivers/edac/versalnet_edac.c
+++ b/drivers/edac/versalnet_edac.c
@@ -605,6 +605,12 @@ static int rpmsg_cb(struct rpmsg_device *rpdev, void *data,
 	length = result[MSG_ERR_LENGTH];
 	offset = result[MSG_ERR_OFFSET];
 
+	for (i = 0 ; i < length; i++) {
+		k = offset + i;
+		j = ERROR_DATA + i;
+		mc_priv->regs[k] = result[j];
+	}
+
 	if (result[TOTAL_ERR_LENGTH] > length) {
 		if (!mc_priv->part_len)
 			mc_priv->part_len = length;
@@ -615,11 +621,6 @@ static int rpmsg_cb(struct rpmsg_device *rpdev, void *data,
 		 * messages the offset indicates the offset from which the data is to
 		 * be taken
 		 */
-		for (i = 0 ; i < length; i++) {
-			k = offset + i;
-			j = ERROR_DATA + i;
-			mc_priv->regs[k] = result[j];
-		}
 		if (mc_priv->part_len < result[TOTAL_ERR_LENGTH])
 			return 0;
 		mc_priv->part_len = 0;
@@ -705,7 +706,7 @@ static int rpmsg_cb(struct rpmsg_device *rpdev, void *data,
 	/* Convert to bytes */
 	length = result[TOTAL_ERR_LENGTH] * 4;
 	log_non_standard_event(sec_type, &amd_versalnet_guid, mc_priv->message,
-			       sec_sev, (void *)&result[ERROR_DATA], length);
+			       sec_sev, (void *)&mc_priv->regs, length);
 
 	return 0;
 }
-- 
2.34.1
Re: [PATCH] EDAC/versalnet: Handle split messages for non-standard errors
Posted by Borislav Petkov 3 months, 1 week ago
On Thu, Oct 23, 2025 at 05:01:08PM +0530, Shubhrajyoti Datta wrote:
> The current code assumes that only DDR errors have split messages.
> Ensures proper logging of non-standard event errors
> that may be split across multiple messages.
> 
> Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
> ---
> 
>  drivers/edac/versalnet_edac.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/edac/versalnet_edac.c b/drivers/edac/versalnet_edac.c
> index fc7e4c43b387..a055f54a389b 100644
> --- a/drivers/edac/versalnet_edac.c
> +++ b/drivers/edac/versalnet_edac.c
> @@ -605,6 +605,12 @@ static int rpmsg_cb(struct rpmsg_device *rpdev, void *data,
>  	length = result[MSG_ERR_LENGTH];
>  	offset = result[MSG_ERR_OFFSET];
>  
> +	for (i = 0 ; i < length; i++) {
> +		k = offset + i;
> +		j = ERROR_DATA + i;
> +		mc_priv->regs[k] = result[j];
> +	}
> +
>  	if (result[TOTAL_ERR_LENGTH] > length) {
>  		if (!mc_priv->part_len)
>  			mc_priv->part_len = length;
> @@ -615,11 +621,6 @@ static int rpmsg_cb(struct rpmsg_device *rpdev, void *data,
>  		 * messages the offset indicates the offset from which the data is to
>  		 * be taken
>  		 */

I'm guessing you want to move that comment too?

If so, I can move it - you don't have to resend.

> -		for (i = 0 ; i < length; i++) {
> -			k = offset + i;
> -			j = ERROR_DATA + i;
> -			mc_priv->regs[k] = result[j];
> -		}a

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette