From patchwork Thu Apr 7 13:20:44 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: Maverick on Hyper-V - fixes for instability From: Tim Gardner X-Patchwork-Id: 90181 Message-Id: <4D9DBA2C.2010904@canonical.com> To: Mike Sterling , Brad Figg , Steve Conklin Cc: "kernel-team@lists.ubuntu.com" , Hank Janssen Date: Thu, 07 Apr 2011 07:20:44 -0600 On 04/06/2011 11:53 AM, Mike Sterling wrote: > If a user wants to run Linux in a Hyper-V virtual machine (Hyper-V is > Microsoft's virtualization solution, included in Windows Server 2008 > and higher), Microsoft provides a set of drivers that enable the use > of the high-performance synthetic devices (the equivalent of Xen's PV > drivers). Maverick includes some of our drivers by default - > hv_vmbus, hv_netvsc, and hv_utils. However, that version of the > kernel has an bug in the hv_netvsc driver (and the underlying > hv_vmbus driver) that results in multiple issues - specifically, > you'll see a number of errors in /var/log/messages referring to > schedule while atomic. After a while, the synthetic networking device > will end up losing its connection. > > > > The issue's been fixed upstream as part of the cleanup we've been > doing to exit staging, and we have created a patch set against > Maverick that fixes it. The patch set consists of four patches: > > > > 1. Ubuntu-10-10-network-atomic-fix: Change the allocation of > memory for the hv_netvsc driver from GFP_KERNEL to GFP_ATOMIC. > > 2. Ubuntu-10-10-network-stack-print-fix: A wrong check was done > when freeing the network device, resulting in a stack trace output > which seemed to erroneously indicate that there was a problem. > > 3. Ubuntu-10-10-vmbus-atomic-fix: Change the allocation of > memory for the hv_vmbus driver from GFP_KERNEL to GFP_ATOMIC. > > 4. > Ubuntu-10-10-backport-of-mainline-loss-of-network-fix-for-Hyper-V: > Locking is required when tweaking bits located in a shared page, > usethe sync_version of bitops. Without this change vmbus_on_event() > will miss events and as a result, vmbus_isr() will not schedule the > receive tasklet. > > > > This does not hit Natty, as we've fixed the issue in later kernels. > However, given the large install base of Maverick, we'd like to get > this included so customers can use the synthetic devices. > > > > Symptoms: > > > > [ 807.276091] BUG: scheduling while atomic: swapper/0/0x10000100 > > [ 807.277476] Modules linked in: parport_pc ppdev binfmt_misc > hv_utils(C) hv_netvsc(C) psmouse lp serio_raw hv_vmbus(C) i2c_piix4 > parport floppy tulip > > [ 807.294414] Modules linked in: parport_pc ppdev binfmt_misc > hv_utils(C) hv_netvsc(C) psmouse lp serio_raw hv_vmbus(C) i2c_piix4 > parport floppy tulip > > [ 807.337981] Pid: 0, comm: swapper Tainted: G D C > 2.6.35-22-generic #33-Ubuntu Virtual Machine/Virtual Machine > > [ 807.339352] EIP: 0060:[] EFLAGS: 00000246 CPU: 0 > > [ 807.340699] EIP is at native_safe_halt+0xa/0x10 > > > This has also been logged on Launchpad at > https://bugs.launchpad.net/ubuntu/+source/linux-meta/+bug/752064 > > > Please let me know if you have any questions on this. > > Thanks, > > -M > > mike sterling | program manager open source technology center > http://www.microsoft.com/opensource/ > > t: +1 425 707 7730 f: +1 425 708 1799 e: > mike.sterling@microsoft.com t: > http://twitter.com/mikester01 > > > Mike - these patches look fine to me. I've package them as a pull request. Brad/Steve - please review. Acked-by: Brad Figg --- The following changes since commit 5ef5b0c54fdaf6c915a6585485fefb2e85462df9: Manoj Iyer (1): UBUNTU: SAUCE: (drop after 2.6.38) add support for Lenovo tablet ID (0xE6) are available in the git repository at: git://kernel.ubuntu.com/rtg/ubuntu-maverick.git ms-lp752064 Haiyang Zhang (1): staging: hv: Fix the WARN_ON condition in free_net_device() Tim Gardner (2): UBUNTU: SAUCE: staging: hv: Fixed issue with scheduling while atomic in hv_vmbus UBUNTU: SAUCE: Backport of mainline loss of network fix for Hyper-V Timo Teräs (1): staging: hv: fix netvsc sleeping while atomic drivers/staging/hv/channel.c | 8 ++++---- drivers/staging/hv/connection.c | 4 ++-- drivers/staging/hv/netvsc.c | 4 ++-- drivers/staging/hv/osd.c | 2 +- drivers/staging/hv/vmbus.c | 2 +- drivers/staging/hv/vmbus_private.h | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-)