From cbb980bd75fbdd863ed04609de4f24ed8e6c1652 Mon Sep 17 00:00:00 2001 From: RisingPrism Date: Sat, 3 Oct 2020 21:05:49 -0400 Subject: [PATCH] Simplify logic into functions --- polaris-vfio-startup.sh | 95 +++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 56 deletions(-) diff --git a/polaris-vfio-startup.sh b/polaris-vfio-startup.sh index d39560c..33ee73e 100755 --- a/polaris-vfio-startup.sh +++ b/polaris-vfio-startup.sh @@ -7,33 +7,36 @@ medium_delay=5 short_delay=1 echo "Beginning of startup!" +function stop_display_manager_if_running { + if systemctl is-active --quiet $1 ; then + echo $1 >> /tmp/vfio-store-display-manager + systemctl stop $1 + fi + + while systemctl is-active --quiet $1 ; do + sleep "${short_delay}" + done +} + +function unload_module_if_loaded { + if lsmod | grep $1 &> /dev/null ; then + modprobe -r $1 + echo $1 >> /tmp/vfio-loaded-gpu-modules + fi + while lsmod | grep $1 &> /dev/null ; do + sleep 1 + done +} + # Stop currently running display manager if test -e "/tmp/vfio-store-display-manager" ; then rm -f /tmp/vfio-store-display-manager fi -if systemctl is-active --quiet sddm.service ; then - echo sddm.service >> /tmp/vfio-store-display-manager - systemctl stop sddm.service -fi -while systemctl is-active --quiet sddm.service ; do - sleep "${short_delay}" -done -if systemctl is-active --quiet gdm.service ; then - echo gdm.service >> /tmp/vfio-store-display-manager - systemctl stop gdm.service -fi -if systemctl is-active --quiet lightdm.service ; then - echo lightdm.service >> /tmp/vfio-store-display-manager - systemctl stop lightdm.service -fi -if systemctl is-active --quiet lxdm.service ; then - echo lxdm.service >> /tmp/vfio-store-display-manager - systemctl stop lxdm.service -fi -if systemctl is-active --quiet xdm.service ; then - echo xdm.service >> /tmp/vfio-store-display-manager - systemctl stop xdm.service -fi +stop_display_manager_if_running sddm.service +stop_display_manager_if_running gdm.service +stop_display_manager_if_running lightdm.service +stop_display_manager_if_running lxdm.service +stop_display_manager_if_running xdm.service # Unbind VTconsoles if currently bound if test -e "/sys/class/vtconsole/vtcon0/bind" ; then @@ -46,44 +49,24 @@ if test -e "/sys/class/vtconsole/vtcon1/bind" ; then fi #Unbind EFI-Framebuffer if currently bound -if test -e "/sys/bus/platform/drivers/efi-framebuffer/unbind" ; then - echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind - sleep "${medium_delay}" -else - echo "Could not find framebuffer to unload!" -fi +# if test -e "/sys/bus/platform/drivers/efi-framebuffer/unbind" ; then +# echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind +# sleep "${medium_delay}" +# else +# echo "Could not find framebuffer to unload!" +# fi # Unload loaded GPU drivers if test -e "/tmp/vfio-loaded-gpu-modules" ; then rm -f /tmp/vfio-loaded-gpu-modules fi -if lsmod | grep amdgpu &> /dev/null ; then - modprobe -r amdgpu - echo amdgpu >> /tmp/vfio-loaded-gpu-modules -fi -while lsmod | grep amdgpu &> /dev/null ; do - sleep 1 -done -if lsmod | grep nvidia_drm &> /dev/null ; then - modprobe -r nvidia_drm - echo nvidia_drm >> /tmp/vfio-loaded-gpu-modules -fi -if lsmod | grep nvidia_modeset &> /dev/null ; then - modprobe -r nvidia_modeset - echo nvidia_modeset >> /tmp/vfio-loaded-gpu-modules -fi -if lsmod | grep nvidia_uvm &> /dev/null ; then - modprobe -r nvidia_uvm - echo nvidia_uvm >> /tmp/vfio-loaded-gpu-modules -fi -if lsmod | grep nvidia &> /dev/null ; then - modprobe -r nvidia - echo nvidia >> /tmp/vfio-loaded-gpu-modules -fi -if lsmod | grep ipmi_devintf &> /dev/null ; then - modprobe -r ipmi_devintf - echo ipmi_devintf >> /tmp/vfio-loaded-gpu-modules -fi + +unload_module_if_loaded amdgpu +unload_module_if_loaded nvidia_drm +unload_module_if_loaded nvidia_modeset +unload_module_if_loaded nvidia_uvm +unload_module_if_loaded nvidia +unload_module_if_loaded ipmi_devintf # Unbind the GPU from display driver