kernel-packages team mailing list archive
-
kernel-packages team
-
Mailing list archive
-
Message #182922
[Bug 1400319] Re: [Hyper-V] Kernel panic not functional on 32bit Ubuntu 14.10, 15.04, and 15.10
A consideration:
From: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx>
When we crash from NMI context (e.g. after NMI injection from host when
'sysctl -w kernel.unknown_nmi_panic=1' is set) we hit
kernel BUG at mm/vmalloc.c:1530!
as vfree() is denied. While the issue could be solved with in_nmi() check
instead I opted for skipping vfree on all sorts of crashes to reduce the
amount of work which can cause consequent crashes. We don't really need to
free anything on crash.
Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx>
Signed-off-by: K. Y. Srinivasan <kys@xxxxxxxxxxxxx>
---
drivers/hv/hv.c | 8 +++++---
drivers/hv/hyperv_vmbus.h | 2 +-
drivers/hv/vmbus_drv.c | 8 ++++----
3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index a1c086b..60dbd6c 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -278,7 +278,7 @@ cleanup:
*
* This routine is called normally during driver unloading or exiting.
*/
-void hv_cleanup(void)
+void hv_cleanup(bool crash)
{
union hv_x64_msr_hypercall_contents hypercall_msr;
@@ -288,7 +288,8 @@ void hv_cleanup(void)
if (hv_context.hypercall_page) {
hypercall_msr.as_uint64 = 0;
wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
- vfree(hv_context.hypercall_page);
+ if (!crash)
+ vfree(hv_context.hypercall_page);
hv_context.hypercall_page = NULL;
}
@@ -308,7 +309,8 @@ void hv_cleanup(void)
hypercall_msr.as_uint64 = 0;
wrmsrl(HV_X64_MSR_REFERENCE_TSC, hypercall_msr.as_uint64);
- vfree(hv_context.tsc_page);
+ if (!crash)
+ vfree(hv_context.tsc_page);
hv_context.tsc_page = NULL;
}
#endif
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index 718b5c7..dfa9fac 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -495,7 +495,7 @@ struct hv_ring_buffer_debug_info {
extern int hv_init(void);
-extern void hv_cleanup(void);
+extern void hv_cleanup(bool crash);
extern int hv_post_message(union hv_connection_id connection_id,
enum hv_message_type message_type,
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 952f20f..d11690e 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -871,7 +871,7 @@ err_alloc:
bus_unregister(&hv_bus);
err_cleanup:
- hv_cleanup();
+ hv_cleanup(false);
return ret;
}
@@ -1323,7 +1323,7 @@ static void hv_kexec_handler(void)
vmbus_initiate_unload(false);
for_each_online_cpu(cpu)
smp_call_function_single(cpu, hv_synic_cleanup, NULL, 1);
- hv_cleanup();
+ hv_cleanup(false);
};
static void hv_crash_handler(struct pt_regs *regs)
@@ -1335,7 +1335,7 @@ static void hv_crash_handler(struct pt_regs *regs)
* for kdump.
*/
hv_synic_cleanup(NULL);
- hv_cleanup();
+ hv_cleanup(true);
};
static int __init hv_acpi_init(void)
@@ -1395,7 +1395,7 @@ static void __exit vmbus_exit(void)
&hyperv_panic_block);
}
bus_unregister(&hv_bus);
- hv_cleanup();
+ hv_cleanup(false);
for_each_online_cpu(cpu) {
tasklet_kill(hv_context.event_dpc[cpu]);
smp_call_function_single(cpu, hv_synic_cleanup, NULL, 1);
--
1.7.4.1
--
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to kexec-tools in Ubuntu.
https://bugs.launchpad.net/bugs/1400319
Title:
[Hyper-V] Kernel panic not functional on 32bit Ubuntu 14.10, 15.04,
and 15.10
Status in kexec-tools package in Ubuntu:
Confirmed
Status in linux package in Ubuntu:
Confirmed
Status in kexec-tools source package in Wily:
Confirmed
Status in linux source package in Wily:
Confirmed
Bug description:
While testing the final build of 14.10 32bit we found that kernel
panic cannot be activated for an installation on a Hyper-V VM.
Repro rate: 100%
Repro details:
Hyper-V: Server 2012 R2
VM: Ubuntu 14.10 32bit
Kdump is enabled in the config file at /etc/default/kdump-tools
Different crashkernel values used in grub.cfg – 128M-:64M | 256M-:128m
| 384M-:256M
VM settings: 2 cores, various RAM sizes attempted: 1, 2 or 4 GB – this
in combination with the values for crashkernel.
Trying to start the kdump service:
root@ubuntu1410i386:~# /etc/init.d/kdump-tools start
Starting kdump-tools: Could not find a free area of memory of 0x9f000 bytes...
locate_hole failed
* failed to load kdump kernel
---
root@ubuntu1410i386:~# cat /sys/kernel/kexec_crash_loaded
0
If the conversion from hex to dec is right, the mentioned memory mapping of 0x9f000 bytes is equal to 651264 (bytes), so under 1MB. This is not then related to the RAM allocation nor the crashkernel value used.
---
AlsaDevices: Error: command ['ls', '-l', '/dev/snd/'] failed with exit code 2: ls: cannot access /dev/snd/: No such file or directory
AplayDevices: Error: [Errno 2] No such file or directory
ApportVersion: 2.14.7-0ubuntu8
Architecture: i386
ArecordDevices: Error: [Errno 2] No such file or directory
CRDA: Error: [Errno 2] No such file or directory
DistroRelease: Ubuntu 14.10
HibernationDevice: RESUME=UUID=5a5d0aa4-b8ee-4bf7-b1b9-761b7d1550b6
InstallationDate: Installed on 2014-10-31 (37 days ago)
InstallationMedia: Ubuntu-Server 14.10 "Utopic Unicorn" - Release i386 (20141022.2)
IwConfig:
lo no wireless extensions.
eth0 no wireless extensions.
Lsusb: Error: command ['lsusb'] failed with exit code 1: unable to initialize libusb: -99
MachineType: Microsoft Corporation Virtual Machine
Package: linux (not installed)
PciMultimedia:
ProcEnviron:
TERM=xterm
PATH=(custom, no user)
XDG_RUNTIME_DIR=<set>
LANG=en_US.UTF-8
SHELL=/bin/bash
ProcFB: 0 hyperv_fb
ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-3.16.0-24-generic root=UUID=83fb481a-8898-4adc-bf31-4e160f5f0ce8 ro crashkernel=128M-:64M
ProcVersionSignature: Ubuntu 3.16.0-24.32-generic 3.16.4
RelatedPackageVersions:
linux-restricted-modules-3.16.0-24-generic N/A
linux-backports-modules-3.16.0-24-generic N/A
linux-firmware 1.138
RfKill: Error: [Errno 2] No such file or directory
Tags: utopic
Uname: Linux 3.16.0-24-generic i686
UpgradeStatus: No upgrade log present (probably fresh install)
UserGroups:
WifiSyslog:
Dec 8 08:16:46 ubuntu1410i386 dhclient: DHCPREQUEST of 10.226.59.102 on eth0 to 10.184.232.100 port 67 (xid=0x4b67ffa3)
Dec 8 08:16:46 ubuntu1410i386 dhclient: DHCPACK of 10.226.59.102 from 10.184.232.100
Dec 8 08:16:47 ubuntu1410i386 dhclient: bound to 10.226.59.102 -- renewal in 13914 seconds.
Dec 8 10:10:47 ubuntu1410i386 kernel: [1840786.031060] init: tty1 main process ended, respawning
_MarkForUpload: True
dmi.bios.date: 05/23/2012
dmi.bios.vendor: American Megatrends Inc.
dmi.bios.version: 090006
dmi.board.name: Virtual Machine
dmi.board.vendor: Microsoft Corporation
dmi.board.version: 7.0
dmi.chassis.asset.tag: 7176-0455-3377-8479-3268-6677-66
dmi.chassis.type: 3
dmi.chassis.vendor: Microsoft Corporation
dmi.chassis.version: 7.0
dmi.modalias: dmi:bvnAmericanMegatrendsInc.:bvr090006:bd05/23/2012:svnMicrosoftCorporation:pnVirtualMachine:pvr7.0:rvnMicrosoftCorporation:rnVirtualMachine:rvr7.0:cvnMicrosoftCorporation:ct3:cvr7.0:
dmi.product.name: Virtual Machine
dmi.product.version: 7.0
dmi.sys.vendor: Microsoft Corporation
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/kexec-tools/+bug/1400319/+subscriptions
References