Hi, Jan,

I tested patches on the branch queues/jailhouse, it works for me.

Best Regards,
Jiafei.

在2020年11月23日星期一 UTC+8 下午3:40:04<[email protected]> 写道:

> On 23.11.20 08:37, Jan Kiszka wrote:
> > From: Jan Kiszka <[email protected]>
> > 
> > The carrier of our virtual link is supposed to go on only when both
> > sides are in RUN state. So far, it only went on when one side entered
> > RUN by being int READY before and not when RUN was reached via
> > ivshm_net_open().
> > 
> > Fix this by moving the carrier management into ivshm_net_run and
> > ivshm_net_do_stop, respectively. Make sure that netif_carrier_on is only
> > called when the peer in in RUN state already.
> > 
> > Reported-by: Jiafei Pan <[email protected]>
> > Signed-off-by: Jan Kiszka <[email protected]>
> > ---
> > drivers/net/ivshmem-net.c | 28 ++++++++++++++--------------
> > 1 file changed, 14 insertions(+), 14 deletions(-)
> > 
> > diff --git a/drivers/net/ivshmem-net.c b/drivers/net/ivshmem-net.c
> > index 1b22b1cc5ea3..56c2c87e7498 100644
> > --- a/drivers/net/ivshmem-net.c
> > +++ b/drivers/net/ivshmem-net.c
> > @@ -549,6 +549,9 @@ static void ivshm_net_run(struct net_device *ndev)
> > if (!netif_running(ndev))
> > return;
> > 
> > + if (in->last_peer_state == IVSHM_NET_STATE_RUN)
> > + netif_carrier_on(ndev);
> > +
> > if (test_and_set_bit(IVSHM_NET_FLAG_RUN, &in->flags))
> > return;
> > 
> > @@ -567,6 +570,7 @@ static void ivshm_net_do_stop(struct net_device 
> *ndev)
> > if (!test_and_clear_bit(IVSHM_NET_FLAG_RUN, &in->flags))
> > return;
> > 
> > + netif_carrier_off(ndev);
> > netif_stop_queue(ndev);
> > napi_disable(&in->napi);
> > }
> > @@ -616,22 +620,18 @@ static void ivshm_net_state_change(struct 
> work_struct *work)
> > break;
> > 
> > case IVSHM_NET_STATE_READY:
> > - /*
> > - * Link is up and we are running once the remote is in READY or
> > - * RUN.
> > - */
> > + case IVSHM_NET_STATE_RUN:
> > if (peer_state >= IVSHM_NET_STATE_READY) {
> > - netif_carrier_on(ndev);
> > + /*
> > + * Link is up and we are running once the remote is in
> > + * READY or RUN.
> > + */
> > ivshm_net_run(ndev);
> > - break;
> > - }
> > - /* fall through */
> > - case IVSHM_NET_STATE_RUN:
> > - /*
> > - * If the remote goes to RESET, we need to follow immediately.
> > - */
> > - if (peer_state == IVSHM_NET_STATE_RESET) {
> > - netif_carrier_off(ndev);
> > + } else if (peer_state == IVSHM_NET_STATE_RESET) {
> > + /*
> > + * If the remote goes to RESET, we need to follow
> > + * immediately.
> > + */
> > ivshm_net_do_stop(ndev);
> > }
> > break;
> > 
>
> 5.10-rc5 queue was updated on
> http://git.kiszka.org/?p=linux.git;a=shortlog;h=refs/heads/queues/jailhouse
> .
> Once you can confirm that this works for you, I will also update
> jailhouse/enabling queues with the two patches.
>
> Jan
>
> -- 
> Siemens AG, T RDA IOT
> Corporate Competence Center Embedded Linux
>

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jailhouse-dev/56f3d63c-03ec-49b1-ad5e-ffe4004a2e54n%40googlegroups.com.

Reply via email to