[PATCH dev-4.4] net/ncsi: Enable request timer before sending command

C├ędric Le Goater clg at kaod.org
Thu Aug 4 18:13:34 AEST 2016


On 08/04/2016 02:47 AM, Gavin Shan wrote:
> The response is received upon the sent command before the request's
> timer is enabled under extreme situation. The response packet won't
> be processed as the corresponding request (request packet and timer)
> isn't complete. It leads to NCSI failure - no package detected.

you can reproduce under openbmc/qemu using a slirp backend :

	-net nic -net user,hostfwd=:127.0.0.1:2222-:22,hostname=qemu


> This fixes the issue by enabling the timer before sending the command.
> The comments about the timer has been replaced by that in upstream
> kernel.

Thanks !

C. 

> Signed-off-by: Gavin Shan <gwshan at linux.vnet.ibm.com>
> ---
> The issue exists in all branches. 4.7 has the issue at least. I
> suggest applying it to all other branches or 4.7 only.
> ---
>  net/ncsi/ncsi-cmd.c | 15 +++++++--------
>  1 file changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/net/ncsi/ncsi-cmd.c b/net/ncsi/ncsi-cmd.c
> index b8503e1..d634a0e 100644
> --- a/net/ncsi/ncsi-cmd.c
> +++ b/net/ncsi/ncsi-cmd.c
> @@ -359,20 +359,19 @@ int ncsi_xmit_cmd(struct ncsi_cmd_arg *nca)
>  		eh->h_source[i] = 0xff;
>  	}
>  
> +        /* Start the timer for the request that might not have
> +         * corresponding response. Given NCSI is an internal
> +         * connection a 1 second delay should be sufficient.
> +         */
> +	mod_timer(&nr->nr_timer, jiffies + 1 * HZ);
> +	nr->nr_timer_enabled = true;
> +
>  	/* Send NCSI packet */
>  	skb_get(nr->nr_cmd);
>  	ret = dev_queue_xmit(nr->nr_cmd);
>  	if (ret)
>  		goto out;
>  
> -	/* Start the timer for the request that might not have
> -	 * corresponding response. I'm not sure 1 second delay
> -	 * here is enough. Anyway, NCSI is internal network, so
> -	 * the responsiveness should be as fast as enough.
> -	 */
> -	nr->nr_timer_enabled = true;
> -	mod_timer(&nr->nr_timer, jiffies + 1 * HZ);
> -
>  	return 0;
>  out:
>  	ncsi_free_req(nr, false, false);
> 



More information about the openbmc mailing list