package org.ovirt.engine.ui.uicommonweb.models.hosts;
import org.ovirt.engine.core.common.utils.CpuVendor;
public class KernelCmdlineUtil {
public static String create(
CpuVendor cpuVendor,
boolean iommu,
boolean kvmNested,
boolean unsafeInterrupts,
boolean pciRealloc) {
StringBuilder cmdlineBuilder = new StringBuilder();
cmdlineBuilder.append(getIommu(cpuVendor, iommu));
cmdlineBuilder.append(getKvmNested(cpuVendor, kvmNested));
cmdlineBuilder.append(getUnsafeInterrupts(cpuVendor, unsafeInterrupts));
cmdlineBuilder.append(getPciRealloc(cpuVendor, pciRealloc));
return cmdlineBuilder.toString().trim();
}
private static String getIommu(CpuVendor cpuVendor, boolean iommu) {
if (!iommu) {
return "";
}
switch (cpuVendor) {
case AMD:
return "amd_iommu=on "; //$NON-NLS-1$
case INTEL:
return "intel_iommu=on "; //$NON-NLS-1$
case IBM:
return "";
default:
throw new RuntimeException("Unknown CpuType: " + cpuVendor); //$NON-NLS-1$
}
}
private static String getKvmNested(CpuVendor cpuVendor, boolean kvmNested) {
if (!kvmNested) {
return "";
}
switch (cpuVendor) {
case AMD:
return "kvm-amd.nested=1 "; //$NON-NLS-1$
case INTEL:
return "kvm-intel.nested=1 "; //$NON-NLS-1$
case IBM:
return "";
default:
throw new RuntimeException("Unknown CpuType: " + cpuVendor); //$NON-NLS-1$
}
}
private static String getUnsafeInterrupts(CpuVendor cpuVendor, boolean unsafeInterrupts) {
if (!unsafeInterrupts) {
return "";
}
switch (cpuVendor) {
case AMD:
case INTEL:
return "vfio_iommu_type1.allow_unsafe_interrupts=1 "; //$NON-NLS-1$
case IBM:
return "";
default:
throw new RuntimeException("Unknown CpuType: " + cpuVendor); //$NON-NLS-1$
}
}
private static String getPciRealloc(CpuVendor cpuVendor, boolean pciRealloc) {
if (!pciRealloc) {
return "";
}
switch (cpuVendor) {
case AMD:
case INTEL:
return "pci=realloc "; //$NON-NLS-1$
case IBM:
return "";
default:
throw new RuntimeException("Unknown CpuType: " + cpuVendor); //$NON-NLS-1$
}
}
}