Copilot commented on code in PR #11340:
URL: https://github.com/apache/cloudstack/pull/11340#discussion_r2241871421


##########
scripts/vm/hypervisor/kvm/gpudiscovery.sh:
##########
@@ -473,7 +473,7 @@ for VM in "${VMS[@]}"; do
        # -- MDEV hostdevs: use xmlstarlet to extract UUIDs --
        while IFS= read -r UUID; do
                [[ -n "$UUID" ]] && mdev_to_vm["$UUID"]="$VM"
-       done < <(echo "$xml" | xmlstarlet sel -T -t -m 
"//hostdev[@type='mdev']" -v "@uuid" -n 2>/dev/null || true)
+       done < <(echo "$xml" | xmlstarlet sel -T -t -m 
"//hostdev[@type='mdev']/source/address" -v "@uuid" -n 2>/dev/null || true)

Review Comment:
   The XPath expression `//hostdev[@type='mdev']/source/address` may not match 
the XML structure shown in LibvirtGpuDef.java where the address element has a 
uuid attribute but is not necessarily nested under source. Consider using 
`//hostdev[@type='mdev']//address` or verify the actual XML structure.
   ```suggestion
        done < <(echo "$xml" | xmlstarlet sel -T -t -m 
"//hostdev[@type='mdev']//address" -v "@uuid" -n 2>/dev/null || true)
   ```



##########
plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtGpuDef.java:
##########
@@ -49,7 +49,7 @@ private void generateMdevXml(StringBuilder gpuBuilder) {
         String mdevUuid = vgpuType.getBusAddress(); // For MDEV devices, 
busAddress contains the UUID
         String displayAttribute = vgpuType.isDisplay() ? "on" : "off";
 
-        gpuBuilder.append("<hostdev mode='subsystem' type='mdev' managed='no' 
display='").append(displayAttribute).append("'>\n");
+        gpuBuilder.append("<hostdev mode='subsystem' type='mdev' 
model='vfio-pci' display='").append(displayAttribute).append("'>\n");

Review Comment:
   The removal of `managed='no'` attribute from the hostdev element may affect 
libvirt's device management behavior. Verify that this change doesn't break 
existing MDEV device handling or require corresponding libvirt configuration 
updates.
   ```suggestion
           gpuBuilder.append("<hostdev mode='subsystem' type='mdev' 
model='vfio-pci' managed='no' 
display='").append(displayAttribute).append("'>\n");
   ```



##########
server/src/main/java/org/apache/cloudstack/gpu/GpuServiceImpl.java:
##########
@@ -891,14 +890,20 @@ public void addGpuDevicesToHost(final Host host, final 
List<VgpuTypesInfo> newGp
                         } else {
                             // Update the device's info
                             GpuDeviceVO parentGpuDevice = null;
-                            if (existingDevice.getParentGpuDeviceId() == null
-                                && deviceInfo.getParentBusAddress() != null) {
+                            if (deviceInfo.getParentBusAddress() != null) {
                                 parentGpuDevice = 
gpuDeviceDao.findByHostIdAndBusAddress(host.getId(),
                                         deviceInfo.getParentBusAddress());
                                 if (parentGpuDevice != null) {
                                     
existingDevice.setParentGpuDeviceId(parentGpuDevice.getId());
+                                    
parentGpuDevice.setType(GpuDevice.DeviceType.VGPUOnly);
+                                    gpuDeviceDao.persist(parentGpuDevice);
                                 }
                             }
+                            if (deviceInfo.isPassthroughEnabled()) {
+                                
existingDevice.setType(deviceInfo.getDeviceType());
+                            } else {
+                                
existingDevice.setType(GpuDevice.DeviceType.VGPUOnly);

Review Comment:
   The parent GPU device type is being set to VGPUOnly in multiple places 
(lines 898, 1031) without checking if it's already set or if it conflicts with 
existing state. Consider consolidating this logic or adding validation to 
prevent overwriting.
   ```suggestion
                                       
updateGpuDeviceTypeIfNecessary(parentGpuDevice, GpuDevice.DeviceType.VGPUOnly);
                                       gpuDeviceDao.persist(parentGpuDevice);
                                   }
                               }
                               if (deviceInfo.isPassthroughEnabled()) {
                                   
existingDevice.setType(deviceInfo.getDeviceType());
                               } else {
                                   
updateGpuDeviceTypeIfNecessary(existingDevice, GpuDevice.DeviceType.VGPUOnly);
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@cloudstack.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to