From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [virtio-net] BUG: sleeping function called from invalid context at kernel/mutex.c:616 Date: Tue, 22 Oct 2013 16:35:32 +0800 Message-ID: <526638D4.1030403@redhat.com> References: <20131020023418.GA6737@localhost> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010000020201060606020407" Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org To: Fengguang Wu Return-path: In-Reply-To: <20131020023418.GA6737@localhost> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: netdev.vger.kernel.org This is a multi-part message in MIME format. --------------010000020201060606020407 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On 10/20/2013 10:34 AM, Fengguang Wu wrote: > Greetings, > > I got the below dmesg and the first bad commit is > > commit 3ab098df35f8b98b6553edc2e40234af512ba877 > Author: Jason Wang > Date: Tue Oct 15 11:18:58 2013 +0800 > > virtio-net: don't respond to cpu hotplug notifier if we're not ready > > We're trying to re-configure the affinity unconditionally in cpu hotplug > callback. This may lead the issue during resuming from s3/s4 since > > - virt queues haven't been allocated at that time. > - it's unnecessary since thaw method will re-configure the affinity. > > Fix this issue by checking the config_enable and do nothing is we're not ready. > > The bug were introduced by commit 8de4b2f3ae90c8fc0f17eeaab87d5a951b66ee17 > (virtio-net: reset virtqueue affinity when doing cpu hotplug). > > Cc: Rusty Russell > Cc: Michael S. Tsirkin > Cc: Wanlong Gao > Acked-by: Michael S. Tsirkin > Reviewed-by: Wanlong Gao > Signed-off-by: Jason Wang > Signed-off-by: David S. Miller > > [ 622.944441] CPU0 attaching NULL sched-domain. > [ 622.944446] CPU1 attaching NULL sched-domain. > [ 622.944485] CPU0 attaching NULL sched-domain. > [ 622.950795] BUG: sleeping function called from invalid context at kernel/mutex.c:616 > [ 622.950796] in_atomic(): 1, irqs_disabled(): 1, pid: 10, name: migration/1 > [ 622.950796] no locks held by migration/1/10. > [ 622.950798] CPU: 1 PID: 10 Comm: migration/1 Not tainted 3.12.0-rc5-wl-01249-gb91e82d #317 > [ 622.950799] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011 > [ 622.950802] 0000000000000000 ffff88001d42dba0 ffffffff81a32f22 ffff88001bfb9c70 > [ 622.950803] ffff88001d42dbb0 ffffffff810edb02 ffff88001d42dc38 ffffffff81a396ed > [ 622.950805] 0000000000000046 ffff88001d42dbe8 ffffffff810e861d 0000000000000000 > [ 622.950805] Call Trace: > [ 622.950810] [] dump_stack+0x54/0x74 > [ 622.950815] [] __might_sleep+0x112/0x114 > [ 622.950817] [] mutex_lock_nested+0x3c/0x3c6 > [ 622.950818] [] ? up+0x39/0x3e > [ 622.950821] [] ? acpi_os_signal_semaphore+0x21/0x2d > [ 622.950824] [] ? acpi_ut_release_mutex+0x5e/0x62 > [ 622.950828] [] virtnet_cpu_callback+0x33/0x87 > [ 622.950830] [] notifier_call_chain+0x3c/0x5e > [ 622.950832] [] __raw_notifier_call_chain+0xe/0x10 > [ 622.950835] [] __cpu_notify+0x20/0x37 > [ 622.950836] [] cpu_notify+0x13/0x15 > [ 622.950838] [] take_cpu_down+0x27/0x3a > [ 622.950841] [] stop_machine_cpu_stop+0x93/0xf1 > [ 622.950842] [] cpu_stopper_thread+0xa0/0x12f > [ 622.950844] [] ? cpu_stopper_thread+0x12f/0x12f > [ 622.950847] [] ? lock_release_holdtime.part.7+0xa3/0xa8 > [ 622.950848] [] ? cpu_stop_should_run+0x3f/0x47 > [ 622.950850] [] smpboot_thread_fn+0x1c5/0x1e3 > [ 622.950852] [] ? lg_global_unlock+0x67/0x67 > [ 622.950854] [] kthread+0xd8/0xe0 > [ 622.950857] [] ? wait_for_common+0x12f/0x164 > [ 622.950859] [] ? kthread_create_on_node+0x124/0x124 > [ 622.950861] [] ret_from_fork+0x7c/0xb0 > [ 622.950862] [] ? kthread_create_on_node+0x124/0x124 > [ 622.950876] smpboot: CPU 1 is now offline > [ 623.194556] SMP alternatives: lockdep: fixing up alternatives > [ 623.194559] smpboot: Booting Node 0 Processor 1 APIC 0x1 Thanks for the testing Fengguang, could you please try the attached patch to see if it works? --------------010000020201060606020407 Content-Type: text/x-patch; name="0001-virtio-net-fix.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-virtio-net-fix.patch" >>From 01e6c3f71c202aa02e4feda169e7cc9fb24193f5 Mon Sep 17 00:00:00 2001 From: Jason Wang Date: Mon, 21 Oct 2013 20:39:09 +0800 Subject: [PATCH] virtio-net: fix --- drivers/net/virtio_net.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 9fbdfcd..bbc9cb8 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -1118,11 +1118,6 @@ static int virtnet_cpu_callback(struct notifier_block *nfb, { struct virtnet_info *vi = container_of(nfb, struct virtnet_info, nb); - mutex_lock(&vi->config_lock); - - if (!vi->config_enable) - goto done; - switch(action & ~CPU_TASKS_FROZEN) { case CPU_ONLINE: case CPU_DOWN_FAILED: @@ -1136,8 +1131,6 @@ static int virtnet_cpu_callback(struct notifier_block *nfb, break; } -done: - mutex_unlock(&vi->config_lock); return NOTIFY_OK; } @@ -1699,6 +1692,8 @@ static int virtnet_freeze(struct virtio_device *vdev) struct virtnet_info *vi = vdev->priv; int i; + unregister_hotcpu_notifier(&vi->nb); + /* Prevent config work handler from accessing the device */ mutex_lock(&vi->config_lock); vi->config_enable = false; @@ -1747,6 +1742,10 @@ static int virtnet_restore(struct virtio_device *vdev) virtnet_set_queues(vi, vi->curr_queue_pairs); rtnl_unlock(); + err = register_hotcpu_notifier(&vi->nb); + if (err) + return err; + return 0; } #endif -- 1.8.1.2 --------------010000020201060606020407 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization --------------010000020201060606020407--