** Description changed:

  [Impact]
  
  `ubuntu-drivers-common` supports a custom GPU configuration file,
  `custom_supported_gpus.json`, which OEM images use to pin a specific NVIDIA
  driver series for a given PCI device ID. Three defects make that mechanism
  unusable in practice:
  
  1. The pinned driver series is ignored when selecting a driver.**
-    `system_driver_packages()` always flagged the highest-sorted NVIDIA
-    alternative as `recommended`, so `ubuntu-drivers list`, `ubuntu-drivers
-    install` and `ubuntu-drivers autoinstall` installed the newest driver in
-    the archive instead of the series the OEM configuration pinned. On systems
-    where the pinned series is the only validated/working driver for the GPU,
-    users end up with a driver that was deliberately not selected for that
-    platform (black screen, no acceleration, or regressions in suspend/resume).
+    `system_driver_packages()` always flagged the highest-sorted NVIDIA
+    alternative as `recommended`, so `ubuntu-drivers list`, `ubuntu-drivers
+    install` and `ubuntu-drivers autoinstall` installed the newest driver in
+    the archive instead of the series the OEM configuration pinned. On systems
+    where the pinned series is the only validated/working driver for the GPU,
+    users end up with a driver that was deliberately not selected for that
+    platform (black screen, no acceleration, or regressions in suspend/resume).
  
  2. The configuration file is only looked up in `/etc`.**
-    OEM enablement packages ship the file in `/usr/share/oem-*-meta/`, so the
-    file shipped by the OEM meta package was never read at all. Only a manual
-    `/etc/custom_supported_gpus.json` had any effect.
+    OEM enablement packages ship the file in `/usr/share/oem-*-meta/`, so the
+    file shipped by the OEM meta package was never read at all. Only a manual
+    `/etc/custom_supported_gpus.json` had any effect.
  
  3. runtimepm detection fails for `-open` branches.
-    `_is_nv_allowing_runtimepm_supported()` compared the candidate driver
-    version against `gpu["branch"].split(".")[0]` with an exact match. A branch
-    recorded as `580-open` (variant suffix) never matched the `580` series, so
-    runtime power management was not enabled on hardware that supports it,
-    costing battery life on affected laptops. In addition the loop returned
-    `False` on the first non-matching chip entry, so a later matching entry was
-    never considered.
+    `_is_nv_allowing_runtimepm_supported()` compared the candidate driver
+    version against `gpu["branch"].split(".")[0]` with an exact match. A branch
+    recorded as `580-open` (variant suffix) never matched the `580` series, so
+    runtime power management was not enabled on hardware that supports it,
+    costing battery life on affected laptops. In addition the loop returned
+    `False` on the first non-matching chip entry, so a later matching entry was
+    never considered.
  
  A related packaging-preference bug is fixed at the same time: for gpgpu
  installs, an explicit flavour request without a variant suffix (e.g.
  `ubuntu-drivers install --gpgpu nvidia:595`) only matched the closed
  metapackage and ignored the `Prefer-Variant: Open` preference, so the `-open`
  metapackage was not installed even when the packaging asked for it.
  
  [Test Plan]
  
  The upstream commits add automated coverage; run the existing test
  suite:
  
-     python3 -m pytest tests/test_ubuntu_drivers.py
+     python3 -m pytest tests/test_ubuntu_drivers.py
  
  New/updated tests exercise the custom-config pinning, the
  `list --recommended` variant collapsing (`test_list_recommended_chroot`) and
  the runtimepm branch matching.
  
  Manual verification on a machine (or VM) with an NVIDIA GPU, or with the
  package's fake-sysfs test chroot:
  
  1. Install the version from -proposed.
  2. Create `/etc/custom_supported_gpus.json` pinning a driver series that is
-    *not* the newest one available for the installed GPU, e.g.:
+    *not* the newest one available for the installed GPU, e.g.:
  
-        {
-          "chips": [
-            {
-              "devid": "0x<DEVID>",
-              "branch": "535",
-              "features": ["runtimepm"]
-            }
-          ]
-        }
+        {
+          "chips": [
+            {
+              "devid": "0x<DEVID>",
+              "branch": "580",
+              "features": ["runtimepm"]
+            }
+          ]
+        }
  
  3. `ubuntu-drivers list`
-    * Expected: all applicable drivers are still listed, and
-      `nvidia-driver-535` is the one flagged as recommended.
+    * Expected: all applicable drivers are still listed, and
+      `nvidia-driver-580` is the one flagged as recommended.
  4. `ubuntu-drivers list --recommended`
-    * Expected: exactly one nvidia driver is listed (`nvidia-driver-535`), plus
-      every other non-nvidia suggested package.
+    * Expected: exactly one nvidia driver is listed (`nvidia-driver-580`), plus
+      every other non-nvidia suggested package.
  5. `ubuntu-drivers install --dry-run` (or `autoinstall`)
-    * Expected: `nvidia-driver-535` is selected, not the newest series.
+    * Expected: `nvidia-driver-580` is selected, not the newest series.
  6. `ubuntu-drivers install nvidia:<other-series>`
-    * Expected: the explicitly requested series is installed, i.e. the custom
-      pin does not override an explicit request.
+    * Expected: the explicitly requested series is installed, i.e. the custom
+      pin does not override an explicit request.
  7. Move the file to `/usr/share/oem-test-meta/custom_supported_gpus.json`,
-    remove the one in `/etc`, and repeat steps 3-5.
-    * Expected: identical results, proving the OEM lookup path works.
-    * Before the fix, steps 3-7 all select the newest driver series.
+    remove the one in `/etc`, and repeat steps 3-5.
+    * Expected: identical results, proving the OEM lookup path works.
+    * Before the fix, steps 3-7 all select the newest driver series.
  8. With a `-open` branch entry (e.g. `"branch": "580-open"`) and the matching
-    `580` series driver installed, check that the runtimepm udev rule /
-    `/proc/driver/nvidia/.../power` settings are applied.
-    * Before the fix, runtimepm was not enabled for such entries.
+    `580` series driver installed, check that the runtimepm udev rule /
+    `/proc/driver/nvidia/.../power` settings are applied.
+    * Before the fix, runtimepm was not enabled for such entries.
  
  [Where problems could occur]
  
  * The change alters which NVIDIA driver is reported as *recommended* and
-   therefore which one `ubuntu-drivers install`/`autoinstall` picks, but only
-   on systems that actually ship or define `custom_supported_gpus.json`. A
-   malformed or stale file could now pin an unsuitable or unavailable driver
-   series where previously it was ignored; in that case the pinned package
-   simply is not found in the archive and the previous selection logic applies.
+   therefore which one `ubuntu-drivers install`/`autoinstall` picks, but only
+   on systems that actually ship or define `custom_supported_gpus.json`. A
+   malformed or stale file could now pin an unsuitable or unavailable driver
+   series where previously it was ignored; in that case the pinned package
+   simply is not found in the archive and the previous selection logic applies.
  * The new `/usr/share/oem-*-meta/` lookup means files shipped by OEM meta
-   packages take effect for the first time. On OEM images carrying an outdated
-   file, the recommended driver may change compared to the previous release.
-   `/etc/custom_supported_gpus.json` can be used to override it.
+   packages take effect for the first time. On OEM images carrying an outdated
+   file, the recommended driver may change compared to the previous release.
+   `/etc/custom_supported_gpus.json` can be used to override it.
  * `ubuntu-drivers list --recommended` output is intentionally shorter for
-   NVIDIA (one package instead of the whole alternatives group). Scripts or
-   installers parsing that output and expecting multiple nvidia entries would
-   see a different result; `ubuntu-drivers list` (without `--recommended`) is
-   unchanged. The removal of the stray `break` also means the plain listing can
-   now show more lines than before, where previously entries were silently
-   dropped.
+   NVIDIA (one package instead of the whole alternatives group). Scripts or
+   installers parsing that output and expecting multiple nvidia entries would
+   see a different result; `ubuntu-drivers list` (without `--recommended`) is
+   unchanged. The removal of the stray `break` also means the plain listing can
+   now show more lines than before, where previously entries were silently
+   dropped.
  * The relaxed runtimepm series matching could enable runtime power management
-   on a few additional GPU/driver combinations that were previously (and
-   incorrectly) skipped. The matching is still anchored on the numeric series,
-   so it does not introduce substring false-positives.
+   on a few additional GPU/driver combinations that were previously (and
+   incorrectly) skipped. The matching is still anchored on the numeric series,
+   so it does not introduce substring false-positives.
  * The `gpgpu` `-open` substitution changes which metapackage is installed for
-   explicit flavour requests on drivers marked `Prefer-Variant: Open`. If the
-   `-open` metapackage were uninstallable, the install would fail where it
-   previously succeeded with the closed variant.
+   explicit flavour requests on drivers marked `Prefer-Variant: Open`. If the
+   `-open` metapackage were uninstallable, the install would fail where it
+   previously succeeded with the closed variant.
  * Regressions would be confined to the `ubuntu-drivers` CLI and the DBus
-   detection service; they would not affect already-installed drivers, and the
-   package can be downgraded without side effects.
+   detection service; they would not affect already-installed drivers, and the
+   package can be downgraded without side effects.
  
  [Other Info]

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2168955

Title:
  [SRU] honour custom_supported_gpus.json for nvidia driver installation

To manage notifications about this bug go to:
https://bugs.launchpad.net/oem-priority/+bug/2168955/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to