mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-04-29 19:06:37 +00:00
update switch_gpu_mode_direct.sh
This commit is contained in:
@@ -126,7 +126,6 @@ const initMessage = {
|
|||||||
script_path: scriptPath,
|
script_path: scriptPath,
|
||||||
params: paramsRef.current,
|
params: paramsRef.current,
|
||||||
}
|
}
|
||||||
console.log("[v0] Sending initMessage with params:", paramsRef.current)
|
|
||||||
ws.send(JSON.stringify(initMessage))
|
ws.send(JSON.stringify(initMessage))
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@@ -289,7 +288,6 @@ const initMessage = {
|
|||||||
script_path: scriptPath,
|
script_path: scriptPath,
|
||||||
params: paramsRef.current,
|
params: paramsRef.current,
|
||||||
}
|
}
|
||||||
console.log("[v0] WS onopen - Sending params:", paramsRef.current)
|
|
||||||
ws.send(JSON.stringify(initMessage))
|
ws.send(JSON.stringify(initMessage))
|
||||||
}, 50)
|
}, 50)
|
||||||
|
|
||||||
|
|||||||
@@ -359,6 +359,44 @@ _remove_amd_softdep() {
|
|||||||
$changed
|
$changed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_add_vfio_modules() {
|
||||||
|
local modules=("vfio" "vfio_iommu_type1" "vfio_pci")
|
||||||
|
local kernel_major kernel_minor
|
||||||
|
kernel_major=$(uname -r | cut -d. -f1)
|
||||||
|
kernel_minor=$(uname -r | cut -d. -f2)
|
||||||
|
if (( kernel_major < 6 || ( kernel_major == 6 && kernel_minor < 2 ) )); then
|
||||||
|
modules+=("vfio_virqfd")
|
||||||
|
fi
|
||||||
|
local mod
|
||||||
|
for mod in "${modules[@]}"; do
|
||||||
|
_add_line_if_missing "$mod" /etc/modules
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
_remove_vfio_modules_if_unused() {
|
||||||
|
local vfio_count
|
||||||
|
vfio_count=$(_read_vfio_ids | wc -l | tr -d '[:space:]')
|
||||||
|
[[ "$vfio_count" != "0" ]] && return 1
|
||||||
|
local modules_file="/etc/modules"
|
||||||
|
[[ ! -f "$modules_file" ]] && return 1
|
||||||
|
local had_any=false
|
||||||
|
grep -qE '^vfio$|^vfio_iommu_type1$|^vfio_pci$|^vfio_virqfd$' "$modules_file" 2>/dev/null && had_any=true
|
||||||
|
sed -i '/^vfio$/d' "$modules_file"
|
||||||
|
sed -i '/^vfio_iommu_type1$/d' "$modules_file"
|
||||||
|
sed -i '/^vfio_pci$/d' "$modules_file"
|
||||||
|
sed -i '/^vfio_virqfd$/d' "$modules_file"
|
||||||
|
if $had_any; then
|
||||||
|
HOST_CONFIG_CHANGED=true
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
_configure_iommu_options() {
|
||||||
|
_add_line_if_missing "options vfio_iommu_type1 allow_unsafe_interrupts=1" /etc/modprobe.d/iommu_unsafe_interrupts.conf
|
||||||
|
_add_line_if_missing "options kvm ignore_msrs=1" /etc/modprobe.d/kvm.conf
|
||||||
|
}
|
||||||
|
|
||||||
_selected_types_unique() {
|
_selected_types_unique() {
|
||||||
local idx t
|
local idx t
|
||||||
local -a seen=()
|
local -a seen=()
|
||||||
@@ -431,6 +469,40 @@ find_gpu_by_slot() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
validate_vm_mode_blocked_ids() {
|
||||||
|
[[ "$TARGET_MODE" != "vm" ]] && return 0
|
||||||
|
|
||||||
|
local -a blocked_lines=()
|
||||||
|
local idx viddid name pci
|
||||||
|
for idx in "${SELECTED_GPU_IDX[@]}"; do
|
||||||
|
viddid="${ALL_GPU_VIDDID[$idx]}"
|
||||||
|
name="${ALL_GPU_NAMES[$idx]}"
|
||||||
|
pci="${ALL_GPU_PCIS[$idx]}"
|
||||||
|
|
||||||
|
case "$viddid" in
|
||||||
|
8086:5a84|8086:5a85)
|
||||||
|
blocked_lines+=(" - ${name} (${pci}) [ID: ${viddid}]")
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ ${#blocked_lines[@]} -eq 0 ]] && return 0
|
||||||
|
|
||||||
|
local msg
|
||||||
|
msg="<div style='color:#ff6b6b;font-weight:bold;margin-bottom:10px;'>$(translate 'Blocked GPU ID for VM Mode')</div>"
|
||||||
|
msg+="<p>$(translate 'At least one selected GPU is blocked by policy for GPU -> VM mode due to passthrough instability risk.')</p>"
|
||||||
|
msg+="<p><strong>$(translate 'Blocked device(s)'):</strong></p><ul>"
|
||||||
|
local line
|
||||||
|
for line in "${blocked_lines[@]}"; do
|
||||||
|
msg+="<li>${line}</li>"
|
||||||
|
done
|
||||||
|
msg+="</ul>"
|
||||||
|
msg+="<p>$(translate 'Recommended: use GPU -> LXC mode for these devices.')</p>"
|
||||||
|
|
||||||
|
hybrid_msgbox "$(translate 'GPU Switch Mode Blocked')" "$msg"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
collect_selected_iommu_ids() {
|
collect_selected_iommu_ids() {
|
||||||
SELECTED_IOMMU_IDS=()
|
SELECTED_IOMMU_IDS=()
|
||||||
SELECTED_PCI_SLOTS=()
|
SELECTED_PCI_SLOTS=()
|
||||||
@@ -913,20 +985,8 @@ main() {
|
|||||||
: >"$LOG_FILE"
|
: >"$LOG_FILE"
|
||||||
: >"$screen_capture"
|
: >"$screen_capture"
|
||||||
|
|
||||||
# Debug: Show received environment variables
|
|
||||||
echo "[DEBUG] Environment variables received:"
|
|
||||||
echo "[DEBUG] GPU_SWITCH_PARAMS='$GPU_SWITCH_PARAMS'"
|
|
||||||
echo "[DEBUG] EXECUTION_MODE='$EXECUTION_MODE'"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
parse_arguments "$@"
|
parse_arguments "$@"
|
||||||
|
|
||||||
# Debug: Show parsed parameters
|
|
||||||
echo "[DEBUG] After parsing:"
|
|
||||||
echo "[DEBUG] PARAM_GPU_SLOT='$PARAM_GPU_SLOT'"
|
|
||||||
echo "[DEBUG] PARAM_TARGET_MODE='$PARAM_TARGET_MODE'"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Validate required parameters
|
# Validate required parameters
|
||||||
if [[ -z "$PARAM_GPU_SLOT" ]]; then
|
if [[ -z "$PARAM_GPU_SLOT" ]]; then
|
||||||
msg_error "$(translate 'Missing required parameter'): --gpu-slot"
|
msg_error "$(translate 'Missing required parameter'): --gpu-slot"
|
||||||
@@ -955,6 +1015,11 @@ main() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Validate if GPU is blocked for VM mode (certain Intel GPUs)
|
||||||
|
if ! validate_vm_mode_blocked_ids; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Show info about selected GPU
|
# Show info about selected GPU
|
||||||
local gpu_idx="${SELECTED_GPU_IDX[0]}"
|
local gpu_idx="${SELECTED_GPU_IDX[0]}"
|
||||||
msg_info "$(translate 'GPU selected'): ${ALL_GPU_NAMES[$gpu_idx]} (${ALL_GPU_PCIS[$gpu_idx]})"
|
msg_info "$(translate 'GPU selected'): ${ALL_GPU_NAMES[$gpu_idx]} (${ALL_GPU_PCIS[$gpu_idx]})"
|
||||||
|
|||||||
Reference in New Issue
Block a user