2020-09-07 16:29:33

by Markus Boehme

[permalink] [raw]
Subject: [PATCH 1/3] ipmi: Reset response handler when failing to send the command

When failing to send a command we don't expect a response. Clear the
`null_user_handler` like is done in the success path.

Signed-off-by: Markus Boehme <[email protected]>
---
drivers/char/ipmi/ipmi_msghandler.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
index 737c0b6..2b213c9 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -2433,7 +2433,7 @@ static int __get_device_id(struct ipmi_smi *intf, struct bmc_device *bmc)

rv = send_get_device_id_cmd(intf);
if (rv)
- return rv;
+ goto out_reset_handler;

wait_event(intf->waitq, bmc->dyn_id_set != 2);

@@ -2443,6 +2443,7 @@ static int __get_device_id(struct ipmi_smi *intf, struct bmc_device *bmc)
/* dyn_id_set makes the id data available. */
smp_rmb();

+out_reset_handler:
intf->null_user_handler = NULL;

return rv;
@@ -3329,6 +3330,7 @@ static int __scan_channels(struct ipmi_smi *intf, struct ipmi_device_id *id)
dev_warn(intf->si_dev,
"Error sending channel information for channel 0, %d\n",
rv);
+ intf->null_user_handler = NULL;
return -EIO;
}

--
2.7.4


2020-09-08 00:08:02

by Corey Minyard

[permalink] [raw]
Subject: Re: [PATCH 1/3] ipmi: Reset response handler when failing to send the command

On Mon, Sep 07, 2020 at 06:25:35PM +0200, Markus Boehme wrote:
> When failing to send a command we don't expect a response. Clear the
> `null_user_handler` like is done in the success path.

This is correct. I guess, from the next two patches, I know how you
found this.

I can incude this, but I will ask some questions in the later patches.

-corey

>
> Signed-off-by: Markus Boehme <[email protected]>
> ---
> drivers/char/ipmi/ipmi_msghandler.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
> index 737c0b6..2b213c9 100644
> --- a/drivers/char/ipmi/ipmi_msghandler.c
> +++ b/drivers/char/ipmi/ipmi_msghandler.c
> @@ -2433,7 +2433,7 @@ static int __get_device_id(struct ipmi_smi *intf, struct bmc_device *bmc)
>
> rv = send_get_device_id_cmd(intf);
> if (rv)
> - return rv;
> + goto out_reset_handler;
>
> wait_event(intf->waitq, bmc->dyn_id_set != 2);
>
> @@ -2443,6 +2443,7 @@ static int __get_device_id(struct ipmi_smi *intf, struct bmc_device *bmc)
> /* dyn_id_set makes the id data available. */
> smp_rmb();
>
> +out_reset_handler:
> intf->null_user_handler = NULL;
>
> return rv;
> @@ -3329,6 +3330,7 @@ static int __scan_channels(struct ipmi_smi *intf, struct ipmi_device_id *id)
> dev_warn(intf->si_dev,
> "Error sending channel information for channel 0, %d\n",
> rv);
> + intf->null_user_handler = NULL;
> return -EIO;
> }
>
> --
> 2.7.4
>