diff options
-rw-r--r-- | perl-install/detect_devices.pm | 6 | ||||
-rw-r--r-- | perl-install/modules.pm | 7 |
2 files changed, 12 insertions, 1 deletions
diff --git a/perl-install/detect_devices.pm b/perl-install/detect_devices.pm index 6ba852fec..a0c6a8c23 100644 --- a/perl-install/detect_devices.pm +++ b/perl-install/detect_devices.pm @@ -1154,6 +1154,11 @@ sub isServer() { || (any { $_->{'model name'} =~ /(Xeon|Opteron)/i } getCPUs()); } +sub isHyperv() { + dmidecode_category('System')->{'Manufacturer'} =~ /Microsoft Corporation/i + && dmidecode_category('System')->{'Product Name'} =~ /Virtual Machine/i +} + sub BIGMEM() { arch() !~ /x86_64|ia64/ && $> == 0 && dmi_detect_memory() > 4 * 1024; } @@ -1231,6 +1236,7 @@ sub matching_types() { mips_ict => is_mips_ict(), mips_st_ls2f => is_mips_st_ls2f(), laptop => isLaptop(), + hyperv => isHyperv(), 'numpad' => hasNumpad(), 'touchpad' => hasTouchpad(), '64bit' => to_bool(arch() =~ /64/), diff --git a/perl-install/modules.pm b/perl-install/modules.pm index 6014c6dc6..ddcfc0268 100644 --- a/perl-install/modules.pm +++ b/perl-install/modules.pm @@ -277,8 +277,13 @@ sub when_load_category { if ($category =~ m,disk/ide,) { $conf->add_probeall('ide-controller', $name); eval { load('ide_gd_mod') }; - } elsif ($category =~ m,disk/(scsi|hardware_raid|sata|firewire),) { + } elsif ($category =~ m,disk/(scsi|hardware_raid|sata|firewire|virtual),) { $conf->add_probeall('scsi_hostadapter', $name); + if (detect_devices::isHyperv()) { + log::l("HyperV detected. Loading storvsc"); + load('hv_vmbus'); + load('hv_storvsc'); + } eval { load('sd_mod') }; } elsif ($category eq 'bus/usb') { $conf->add_probeall('usb-interface', $name); |