)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"9449438565662721930ca9766fabcd5b2366ed49","unresolved":true,"context_lines":[{"line_number":10,"context_line":"that supports any mdev-capable device, along with a Mdev Handler"},{"line_number":11,"context_line":"class to reduce code duplication with the existing"},{"line_number":12,"context_line":"GPU driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Generated-By: claude-code (claude-opus-4.6)"},{"line_number":15,"context_line":"Change-Id: I22a92c27f60428cf61371b0d36ecafce10a6eb72"},{"line_number":16,"context_line":"Signed-off-by: jgilaber \u003cjgilaber@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ad5f7dc6_cc637468","line":13,"updated":"2026-06-03 07:25:16.000000000","message":"We can link the blueprint here also.\n```\nImplements: blueprint generic-mdev-driver\n```","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"65d48dbe4585caaa63f956e5e577b08830379c38","unresolved":false,"context_lines":[{"line_number":10,"context_line":"that supports any mdev-capable device, along with a Mdev Handler"},{"line_number":11,"context_line":"class to reduce code duplication with the existing"},{"line_number":12,"context_line":"GPU driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Generated-By: claude-code (claude-opus-4.6)"},{"line_number":15,"context_line":"Change-Id: I22a92c27f60428cf61371b0d36ecafce10a6eb72"},{"line_number":16,"context_line":"Signed-off-by: jgilaber \u003cjgilaber@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"d2c7e067_f68f55e2","line":13,"in_reply_to":"ad5f7dc6_cc637468","updated":"2026-06-04 17:13:10.000000000","message":"Done","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"3d7c35f424ac74584cbd43183d06f7163dc6b09d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"574e94b9_643b3a9a","updated":"2026-03-27 13:57:40.000000000","message":"Please provide an upgrade impact as a reflection of the nova spec for the cyborg side. Also both specs need to be aligned on the minimum versions required on both sides for the MDEV feature","commit_id":"83d129f572c88d150505b11a585426e61ce8d578"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"e6480cc449e62d3196c18dffc7c55e25135626a9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c59ca531_01345f55","updated":"2026-03-27 13:44:54.000000000","message":"The spec is missing any acknowledgment that Nova might perform the mdev creation itself","commit_id":"83d129f572c88d150505b11a585426e61ce8d578"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"2c36f17172cc8b61e5ef7f4ce0351f51d9643859","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"51cf4551_fa86142b","updated":"2026-04-20 09:58:48.000000000","message":"(1) There is no **Upgrade impact** section. Given the Nova cross-project dependency [1], please add one: minimum Nova (and Cyborg) versions for end-to-end MDEV ARQ support, behavior when only one side is upgraded, and how this interacts with Nova\u0027s OWNER_NOVA / native vGPU vs Cyborg-managed paths from the companion nova-spec.\n\n(2) Consider adding the same **sample ARQ / attach_handle** JSON the Nova spec documents so the contract is explicit from both directions (MDEV type, parent BDF fields, etc.).\n\n(3) The problem statement says the driver can \"discover and manage\" mdev-capable devices while the proposed change delegates mdev **create/delete** to Nova — tightening wording avoids readers assuming Cyborg performs host mdev lifecycle.","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3b699cfa_0d4bb5b2","in_reply_to":"364b7480_debc8bf5","updated":"2026-06-09 14:24:38.000000000","message":"Done","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"5d185126cd0a910b80e82f9fedbab0a7be9cfd2d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"364b7480_debc8bf5","in_reply_to":"51cf4551_fa86142b","updated":"2026-05-15 11:06:01.000000000","message":"(1) thanks I missed that section. I\u0027ve added it now\n\n(2) done, I\u0027ve added the attach_handle example from the nova spec here for clarity.\n\n(3) I\u0027ve removed from the spec any wording that might suggest that cyborg will create mdevs","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"398f97cfd2358efaa9ab52a03a198eef7732f0ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a1d31416_de0a8ba0","updated":"2026-05-19 10:36:19.000000000","message":"Thank you for addressing all the concerns. This is LGTM.\nJust as a minor thing, there are missing the following sections from the spec template:\n- `Launchpad blueprint`: A URL should be added.\n- `Other end user impact`\n- `Performance Impact`\n- `Other deployer impact`","commit_id":"d569e24c7fe98c32f2361ebe04ced044b0a16074"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"44c9c76f0d7b5b89a8f4c1a892d5a7903368e694","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d70f8bc0_7bf2440a","in_reply_to":"a1d31416_de0a8ba0","updated":"2026-05-19 12:54:45.000000000","message":"thanks for the reviews Bogdan, I\u0027ve just created the blueprint that is linked in the spec. The sections you mention are present in the spec (lines 228, 235 and 245).","commit_id":"d569e24c7fe98c32f2361ebe04ced044b0a16074"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"9449438565662721930ca9766fabcd5b2366ed49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"0be51ad4_92c1cc0c","updated":"2026-06-03 07:25:16.000000000","message":"I am still going through the spec, will add my comments by EOD today or tomorrow thank you!","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"441aebc0d1d051eb85fa26d402636b49f26f2299","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"30f3735c_c5de8a8b","updated":"2026-06-04 05:54:16.000000000","message":"Overall, it looks good to me. Added some questions at few places to clear my confusion, Thank you once again for working on this.","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"ff43f97c_426b7fe0","updated":"2026-06-30 14:01:49.000000000","message":"some minor nits but this is mostly ready to go","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"e45ede86c9a4ebf043024559e4c475be4fe74c8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"ae03541c_5d3c63d7","updated":"2026-07-01 19:12:08.000000000","message":"Looks good to me, thanks","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"41bb05c2a48ef47772c2982a2ffe8e3c6d907b64","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"ab83c0e4_7bc182e6","updated":"2026-07-02 07:13:31.000000000","message":"looks good!","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"}],"specs/2026.2/approved/generic-mdev-driver.rst":[{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"e6480cc449e62d3196c18dffc7c55e25135626a9","unresolved":true,"context_lines":[{"line_number":61,"context_line":"module instead of carrying its own implementation. The"},{"line_number":62,"context_line":"GPU driver will retain all NVIDIA-specific logic such as vendor name"},{"line_number":63,"context_line":"parsing, trait generation, and vGPU type configuration mapping. The"},{"line_number":64,"context_line":"agent manager\u0027s ``create_vgpu_mdev`` and ``remove_vgpu_mdev``"},{"line_number":65,"context_line":"methods will be updated to delegate to the shared module."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Configuration will be provided through a new ``[mdev]`` section in"}],"source_content_type":"text/x-rst","patch_set":1,"id":"86382abe_ea6e34ae","line":64,"updated":"2026-03-27 13:44:54.000000000","message":"Based on the Nova spec [0] related to this work, Nova would be responsible for creating/deleting the mdev, not Cuborg.\n\n[0] https://review.opendev.org/c/openstack/nova-specs/+/967515","commit_id":"83d129f572c88d150505b11a585426e61ce8d578"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ba370a096e9eddcb5a729b4532dc8a641f932a32","unresolved":false,"context_lines":[{"line_number":61,"context_line":"module instead of carrying its own implementation. The"},{"line_number":62,"context_line":"GPU driver will retain all NVIDIA-specific logic such as vendor name"},{"line_number":63,"context_line":"parsing, trait generation, and vGPU type configuration mapping. The"},{"line_number":64,"context_line":"agent manager\u0027s ``create_vgpu_mdev`` and ``remove_vgpu_mdev``"},{"line_number":65,"context_line":"methods will be updated to delegate to the shared module."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Configuration will be provided through a new ``[mdev]`` section in"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1cf5380e_36bd843e","line":64,"in_reply_to":"40bedbcb_905e3cea","updated":"2026-05-11 10:40:54.000000000","message":"Done","commit_id":"83d129f572c88d150505b11a585426e61ce8d578"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"36e31d1af35491b81241607342dcae11b401f5ef","unresolved":true,"context_lines":[{"line_number":61,"context_line":"module instead of carrying its own implementation. The"},{"line_number":62,"context_line":"GPU driver will retain all NVIDIA-specific logic such as vendor name"},{"line_number":63,"context_line":"parsing, trait generation, and vGPU type configuration mapping. The"},{"line_number":64,"context_line":"agent manager\u0027s ``create_vgpu_mdev`` and ``remove_vgpu_mdev``"},{"line_number":65,"context_line":"methods will be updated to delegate to the shared module."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Configuration will be provided through a new ``[mdev]`` section in"}],"source_content_type":"text/x-rst","patch_set":1,"id":"40bedbcb_905e3cea","line":64,"in_reply_to":"86382abe_ea6e34ae","updated":"2026-04-13 16:43:15.000000000","message":"that is correct and I had misunderstood it, thanks for pointing it out, I\u0027ve clarified in the spec that mdev creation/deletion would be delegated to Nova and it will not be part of this work in Cyborg.","commit_id":"83d129f572c88d150505b11a585426e61ce8d578"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"2c36f17172cc8b61e5ef7f4ce0351f51d9643859","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Cyborg currently supports mediated devices (mdev) only through the"},{"line_number":18,"context_line":"NVIDIA GPU driver, where mdev functionality is tightly coupled to"},{"line_number":19,"context_line":"GPU-specific code. This spec proposes a standalone, generic mdev driver"},{"line_number":20,"context_line":"that can discover and manage any Linux kernel mdev-capable device,"},{"line_number":21,"context_line":"along with a shared mdev utilities module that eliminates code"},{"line_number":22,"context_line":"duplication between the new driver and the existing GPU driver."}],"source_content_type":"text/x-rst","patch_set":3,"id":"e7e842b9_36487afa","line":19,"updated":"2026-04-20 09:58:48.000000000","message":"Minor wording: \"manage\" here can read like Cyborg performs host mdev create/delete. Consider \"discover and report\" (or similar) to align with the later \"delegate creation/deletion to Nova\" statement.","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ba370a096e9eddcb5a729b4532dc8a641f932a32","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Cyborg currently supports mediated devices (mdev) only through the"},{"line_number":18,"context_line":"NVIDIA GPU driver, where mdev functionality is tightly coupled to"},{"line_number":19,"context_line":"GPU-specific code. This spec proposes a standalone, generic mdev driver"},{"line_number":20,"context_line":"that can discover and manage any Linux kernel mdev-capable device,"},{"line_number":21,"context_line":"along with a shared mdev utilities module that eliminates code"},{"line_number":22,"context_line":"duplication between the new driver and the existing GPU driver."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5eb7b02e_9d76269a","line":19,"in_reply_to":"e7e842b9_36487afa","updated":"2026-05-11 10:40:54.000000000","message":"Done","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"2c36f17172cc8b61e5ef7f4ce0351f51d9643859","unresolved":true,"context_lines":[{"line_number":80,"context_line":"driver will report. The new driver will be enabled via the"},{"line_number":81,"context_line":"existing ``[agent]enabled_drivers`` option."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Operators must not enable both the generic mdev driver and a"},{"line_number":84,"context_line":"vendor-specific driver (e.g., the NVIDIA GPU driver) for the same"},{"line_number":85,"context_line":"parent device; doing so would cause duplicate resource reporting to"},{"line_number":86,"context_line":"Placement. The ``enabled_parent_devices`` and ``enabled_mdev_types``"}],"source_content_type":"text/x-rst","patch_set":3,"id":"828e2581_12513b13","line":83,"updated":"2026-04-20 09:58:48.000000000","message":"It may help to spell out how misconfiguration surfaces (duplicate RPs / over-allocation), and whether any automated guard or doc-only mitigation is planned beyond config filters.","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"65d48dbe4585caaa63f956e5e577b08830379c38","unresolved":false,"context_lines":[{"line_number":80,"context_line":"driver will report. The new driver will be enabled via the"},{"line_number":81,"context_line":"existing ``[agent]enabled_drivers`` option."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Operators must not enable both the generic mdev driver and a"},{"line_number":84,"context_line":"vendor-specific driver (e.g., the NVIDIA GPU driver) for the same"},{"line_number":85,"context_line":"parent device; doing so would cause duplicate resource reporting to"},{"line_number":86,"context_line":"Placement. The ``enabled_parent_devices`` and ``enabled_mdev_types``"}],"source_content_type":"text/x-rst","patch_set":3,"id":"f264b697_371be76c","line":83,"in_reply_to":"06ec2820_460383d4","updated":"2026-06-04 17:13:10.000000000","message":"Done","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"5d185126cd0a910b80e82f9fedbab0a7be9cfd2d","unresolved":true,"context_lines":[{"line_number":80,"context_line":"driver will report. The new driver will be enabled via the"},{"line_number":81,"context_line":"existing ``[agent]enabled_drivers`` option."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Operators must not enable both the generic mdev driver and a"},{"line_number":84,"context_line":"vendor-specific driver (e.g., the NVIDIA GPU driver) for the same"},{"line_number":85,"context_line":"parent device; doing so would cause duplicate resource reporting to"},{"line_number":86,"context_line":"Placement. The ``enabled_parent_devices`` and ``enabled_mdev_types``"}],"source_content_type":"text/x-rst","patch_set":3,"id":"06ec2820_460383d4","line":83,"in_reply_to":"828e2581_12513b13","updated":"2026-05-15 11:06:01.000000000","message":"actually, after further investigation I don\u0027t think it would lead to duplicate reporting. Before adding newly discovered devices, the conductor creates a set of the controlpath ids of the reported devices (https://github.com/openstack/cyborg/blob/186cdd2b76aff57233660042f71761383285e5e8/cyborg/conductor/manager.py#L156-L171) so it would not report the same device twice, but it would report the device info discovered by whichever driver is configured first. I\u0027ve changed the spec to propose adding an explicit check for duplicated devices and warn the operator of the duplication","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"2c36f17172cc8b61e5ef7f4ce0351f51d9643859","unresolved":true,"context_lines":[{"line_number":204,"context_line":"* Add new configuration options for the generic mdev driver and"},{"line_number":205,"context_line":"  register the driver entry point."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* Refactor the existing GPU driver to use the shared mdev utilities"},{"line_number":208,"context_line":"  module for mdev discovery and type introspection. Update the agent manager"},{"line_number":209,"context_line":"  and existing GPU driver tests."},{"line_number":210,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"394d289a_1a14d666","line":207,"updated":"2026-04-20 09:58:48.000000000","message":"GPU driver refactor is high risk: please add concrete validation criteria (which tests must pass, functional parity definition for discovery/inventory vs pre-refactor, and whether integration coverage exercises the shared utils path).","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"5d185126cd0a910b80e82f9fedbab0a7be9cfd2d","unresolved":true,"context_lines":[{"line_number":204,"context_line":"* Add new configuration options for the generic mdev driver and"},{"line_number":205,"context_line":"  register the driver entry point."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* Refactor the existing GPU driver to use the shared mdev utilities"},{"line_number":208,"context_line":"  module for mdev discovery and type introspection. Update the agent manager"},{"line_number":209,"context_line":"  and existing GPU driver tests."},{"line_number":210,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"43fd4a45_7fd18091","line":207,"in_reply_to":"394d289a_1a14d666","updated":"2026-05-15 11:06:01.000000000","message":"I\u0027ve added addinational information about the testing of the NVIDIA driver refactor","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"65d48dbe4585caaa63f956e5e577b08830379c38","unresolved":false,"context_lines":[{"line_number":204,"context_line":"* Add new configuration options for the generic mdev driver and"},{"line_number":205,"context_line":"  register the driver entry point."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* Refactor the existing GPU driver to use the shared mdev utilities"},{"line_number":208,"context_line":"  module for mdev discovery and type introspection. Update the agent manager"},{"line_number":209,"context_line":"  and existing GPU driver tests."},{"line_number":210,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"38faba9d_2c2017d6","line":207,"in_reply_to":"43fd4a45_7fd18091","updated":"2026-06-04 17:13:10.000000000","message":"Done","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"2c36f17172cc8b61e5ef7f4ce0351f51d9643859","unresolved":true,"context_lines":[{"line_number":221,"context_line":"Testing"},{"line_number":222,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Unit tests will be added for all new code."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Tempest tests will be added leveraging the mdev sample drivers optionally"},{"line_number":227,"context_line":"included in Nova\u0027s devstack plugin. They will allow creating mtty and mdpy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"221ac11c_e23f0ac3","line":224,"updated":"2026-04-20 09:58:48.000000000","message":"Testing would be stronger with 3–5 explicit Tempest scenarios (e.g. mtty/mdpy discovery, PCI filter, mdev type filter, Placement inventory shape, ARQ bind path with Nova).","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"65d48dbe4585caaa63f956e5e577b08830379c38","unresolved":false,"context_lines":[{"line_number":221,"context_line":"Testing"},{"line_number":222,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Unit tests will be added for all new code."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Tempest tests will be added leveraging the mdev sample drivers optionally"},{"line_number":227,"context_line":"included in Nova\u0027s devstack plugin. They will allow creating mtty and mdpy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f9e70aa_a0f741be","line":224,"in_reply_to":"13e56193_a72c0357","updated":"2026-06-04 17:13:10.000000000","message":"Done","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"5d185126cd0a910b80e82f9fedbab0a7be9cfd2d","unresolved":true,"context_lines":[{"line_number":221,"context_line":"Testing"},{"line_number":222,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Unit tests will be added for all new code."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Tempest tests will be added leveraging the mdev sample drivers optionally"},{"line_number":227,"context_line":"included in Nova\u0027s devstack plugin. They will allow creating mtty and mdpy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"13e56193_a72c0357","line":224,"in_reply_to":"221ac11c_e23f0ac3","updated":"2026-05-15 11:06:01.000000000","message":"I think that all of this can be tested in the same tempest scenario. In particular, I\u0027m not sure if we could test the PCI and mdev type filters in tempest, since that would require changing the cyborg configuration, I would need to do further research on that. I\u0027ve expanded the testing section to add a bit more detail","commit_id":"a7b6f6e522144bbea025ba6e7f8717f17b62c4e3"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"441aebc0d1d051eb85fa26d402636b49f26f2299","unresolved":true,"context_lines":[{"line_number":45,"context_line":"This spec proposes a reusable ``MdevHandler`` class and a new generic"},{"line_number":46,"context_line":"mdev driver. The ``MdevHandler`` class encapsulates generic mdev bus"},{"line_number":47,"context_line":"discovery and type introspection by reading from the standard kernel"},{"line_number":48,"context_line":"sysfs hierarchy under ``/sys/class/mdev_bus/``. For each parent PCI"},{"line_number":49,"context_line":"device the class enumerates the supported mdev types, reading their"},{"line_number":50,"context_line":"names, descriptions, available instance counts, and device API strings"},{"line_number":51,"context_line":"from sysfs. It returns this information as plain dictionaries, without"}],"source_content_type":"text/x-rst","patch_set":7,"id":"feafac5b_a7f03d7d","line":48,"range":{"start_line":48,"start_character":24,"end_line":48,"end_character":44},"updated":"2026-06-04 05:54:16.000000000","message":"From this code https://github.com/openstack/cyborg/blob/master/cyborg/accelerator/drivers/gpu/nvidia/sysinfo.py#L338, Currently we are discovering gpu devices based on `/sys/bus/pci/devices/{}/mdev_supported_types/{}/`\n\nBut with this spec, `/sys/class/mdev_bus/` will be used for discovery. Since the path are changing, Doesn\u0027t it will break the discovery for existing gpus? Or we will keep the driver specific discovery logic in the driver specific code? (I think MdevHandler class design explains the discovery in detail.)","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"4b939b5685dbb7c40d596bd984d5081db43a4da7","unresolved":false,"context_lines":[{"line_number":45,"context_line":"This spec proposes a reusable ``MdevHandler`` class and a new generic"},{"line_number":46,"context_line":"mdev driver. The ``MdevHandler`` class encapsulates generic mdev bus"},{"line_number":47,"context_line":"discovery and type introspection by reading from the standard kernel"},{"line_number":48,"context_line":"sysfs hierarchy under ``/sys/class/mdev_bus/``. For each parent PCI"},{"line_number":49,"context_line":"device the class enumerates the supported mdev types, reading their"},{"line_number":50,"context_line":"names, descriptions, available instance counts, and device API strings"},{"line_number":51,"context_line":"from sysfs. It returns this information as plain dictionaries, without"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f193646_50852ee8","line":48,"range":{"start_line":48,"start_character":24,"end_line":48,"end_character":44},"in_reply_to":"855d0104_eb915e30","updated":"2026-06-05 05:13:12.000000000","message":"Thank you for adding the links. It answers my confusion around path.","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"65d48dbe4585caaa63f956e5e577b08830379c38","unresolved":true,"context_lines":[{"line_number":45,"context_line":"This spec proposes a reusable ``MdevHandler`` class and a new generic"},{"line_number":46,"context_line":"mdev driver. The ``MdevHandler`` class encapsulates generic mdev bus"},{"line_number":47,"context_line":"discovery and type introspection by reading from the standard kernel"},{"line_number":48,"context_line":"sysfs hierarchy under ``/sys/class/mdev_bus/``. For each parent PCI"},{"line_number":49,"context_line":"device the class enumerates the supported mdev types, reading their"},{"line_number":50,"context_line":"names, descriptions, available instance counts, and device API strings"},{"line_number":51,"context_line":"from sysfs. It returns this information as plain dictionaries, without"}],"source_content_type":"text/x-rst","patch_set":7,"id":"855d0104_eb915e30","line":48,"range":{"start_line":48,"start_character":24,"end_line":48,"end_character":44},"in_reply_to":"feafac5b_a7f03d7d","updated":"2026-06-04 17:13:10.000000000","message":"I used the path under `/sys/class/mdev_bus` since that was listed in the documentation for the kernel module for mediated devices https://www.kernel.org/doc/Documentation/vfio-mediated-device.txt. The same path should also work for nvidia vgpus from what I could find e.g the nova documentation on how to discover a vGPU type https://docs.openstack.org/nova/latest/admin/virtual-gpu.html#how-to-discover-a-gpu-type and the path is also used in this documentation from Red Hat Virtualization on how to use vGPU https://docs.redhat.com/en/documentation/red_hat_virtualization/4.3/html/setting_up_an_nvidia_gpu_for_a_virtual_machine_in_red_hat_virtualization/assigning_virtual_gpus","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"441aebc0d1d051eb85fa26d402636b49f26f2299","unresolved":true,"context_lines":[{"line_number":49,"context_line":"device the class enumerates the supported mdev types, reading their"},{"line_number":50,"context_line":"names, descriptions, available instance counts, and device API strings"},{"line_number":51,"context_line":"from sysfs. It returns this information as plain dictionaries, without"},{"line_number":52,"context_line":"constructing Cyborg driver objects. The proposed driver will not handle"},{"line_number":53,"context_line":"creation nor deletion of mdevs, instead will delegate that to"},{"line_number":54,"context_line":"Nova [1]_."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"The proposed generic mdev driver holds an ``MdevHandler`` instance as"},{"line_number":57,"context_line":"a private attribute, set during ``__init__``. In its ``discover()``"}],"source_content_type":"text/x-rst","patch_set":7,"id":"68c01669_947170cd","line":54,"range":{"start_line":52,"start_character":36,"end_line":54,"end_character":10},"updated":"2026-06-04 05:54:16.000000000","message":"Since `_create_mdev` libvirt method nova side will take care of mdev. It means create_vgpu_mdev() and remove_vgpu_mdev() in cyborg\u0027s agent/manager.py will be dropped? as well create_mdev_privileged() and remove_mdev_privileged() from gpu/utils.py during refactoring?","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"4b939b5685dbb7c40d596bd984d5081db43a4da7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"device the class enumerates the supported mdev types, reading their"},{"line_number":50,"context_line":"names, descriptions, available instance counts, and device API strings"},{"line_number":51,"context_line":"from sysfs. It returns this information as plain dictionaries, without"},{"line_number":52,"context_line":"constructing Cyborg driver objects. The proposed driver will not handle"},{"line_number":53,"context_line":"creation nor deletion of mdevs, instead will delegate that to"},{"line_number":54,"context_line":"Nova [1]_."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"The proposed generic mdev driver holds an ``MdevHandler`` instance as"},{"line_number":57,"context_line":"a private attribute, set during ``__init__``. In its ``discover()``"}],"source_content_type":"text/x-rst","patch_set":7,"id":"0c7aaf82_de8e1a42","line":54,"range":{"start_line":52,"start_character":36,"end_line":54,"end_character":10},"in_reply_to":"633114e3_9bdcab7e","updated":"2026-06-05 05:13:12.000000000","message":"Acknowledged","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"65d48dbe4585caaa63f956e5e577b08830379c38","unresolved":true,"context_lines":[{"line_number":49,"context_line":"device the class enumerates the supported mdev types, reading their"},{"line_number":50,"context_line":"names, descriptions, available instance counts, and device API strings"},{"line_number":51,"context_line":"from sysfs. It returns this information as plain dictionaries, without"},{"line_number":52,"context_line":"constructing Cyborg driver objects. The proposed driver will not handle"},{"line_number":53,"context_line":"creation nor deletion of mdevs, instead will delegate that to"},{"line_number":54,"context_line":"Nova [1]_."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"The proposed generic mdev driver holds an ``MdevHandler`` instance as"},{"line_number":57,"context_line":"a private attribute, set during ``__init__``. In its ``discover()``"}],"source_content_type":"text/x-rst","patch_set":7,"id":"633114e3_9bdcab7e","line":54,"range":{"start_line":52,"start_character":36,"end_line":54,"end_character":10},"in_reply_to":"68c01669_947170cd","updated":"2026-06-04 17:13:10.000000000","message":"yes that is correct, we\u0027ll remove those functions since we\u0027ll rely on Nova to create and delete the mdevs. I believe I clarified that in the Nova spec but I did not add it here, I\u0027ll cover the remove in the next patchset.","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"441aebc0d1d051eb85fa26d402636b49f26f2299","unresolved":true,"context_lines":[{"line_number":78,"context_line":"For example, a type named ``mtty-2`` produces the resource class"},{"line_number":79,"context_line":"``CUSTOM_MDEV_MTTY_2``. This allows operators to write device"},{"line_number":80,"context_line":"profiles that request specific mdev types."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Finally, the driver will create ``DriverAttachHandle`` objects of type MDEV,"},{"line_number":83,"context_line":"which in its attach handle infor will have a will have a new ``asked_type``"},{"line_number":84,"context_line":"field in addition to the PCI address fields. The attach handle will look as"}],"source_content_type":"text/x-rst","patch_set":7,"id":"15ea1151_dc1d96fa","line":81,"updated":"2026-06-04 05:54:16.000000000","message":"Currently GPU traits are referenced with `OWNER_CYBORG, CUSTOM_NVIDIA_1EB8_T4_2B`(somehting like that).\nHow will traits look for cyborg-managed mdevs discovered by the generic driver? Will it be just `[\"OWNER_CYBORG\"]`? Or will there be additional traits like `[\"OWNER_CYBORG\", \"CUSTOM_MDEV_MTTY_2\"]`?","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"65d48dbe4585caaa63f956e5e577b08830379c38","unresolved":true,"context_lines":[{"line_number":78,"context_line":"For example, a type named ``mtty-2`` produces the resource class"},{"line_number":79,"context_line":"``CUSTOM_MDEV_MTTY_2``. This allows operators to write device"},{"line_number":80,"context_line":"profiles that request specific mdev types."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Finally, the driver will create ``DriverAttachHandle`` objects of type MDEV,"},{"line_number":83,"context_line":"which in its attach handle infor will have a will have a new ``asked_type``"},{"line_number":84,"context_line":"field in addition to the PCI address fields. The attach handle will look as"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ac25d448_b83c918f","line":81,"in_reply_to":"15ea1151_dc1d96fa","updated":"2026-06-04 17:13:10.000000000","message":"yes, the only trait I was considering was the OWNER one, I\u0027ve noted it explicitely in the spec","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"4b939b5685dbb7c40d596bd984d5081db43a4da7","unresolved":false,"context_lines":[{"line_number":78,"context_line":"For example, a type named ``mtty-2`` produces the resource class"},{"line_number":79,"context_line":"``CUSTOM_MDEV_MTTY_2``. This allows operators to write device"},{"line_number":80,"context_line":"profiles that request specific mdev types."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Finally, the driver will create ``DriverAttachHandle`` objects of type MDEV,"},{"line_number":83,"context_line":"which in its attach handle infor will have a will have a new ``asked_type``"},{"line_number":84,"context_line":"field in addition to the PCI address fields. The attach handle will look as"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ca749038_ddd323a9","line":81,"in_reply_to":"ac25d448_b83c918f","updated":"2026-06-05 05:13:12.000000000","message":"Acknowledged","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"75b1d8bb2e3ad88f38937b8f343307453cece256","unresolved":true,"context_lines":[{"line_number":80,"context_line":"profiles that request specific mdev types."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Finally, the driver will create ``DriverAttachHandle`` objects of type MDEV,"},{"line_number":83,"context_line":"which in its attach handle infor will have a will have a new ``asked_type``"},{"line_number":84,"context_line":"field in addition to the PCI address fields. The attach handle will look as"},{"line_number":85,"context_line":"follows:"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"88e945ba_8a966bef","line":83,"range":{"start_line":83,"start_character":27,"end_line":83,"end_character":54},"updated":"2026-06-03 07:07:39.000000000","message":"```suggestion\nwhich in its attach handle info will have a new ``asked_type``\n```","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"65d48dbe4585caaa63f956e5e577b08830379c38","unresolved":false,"context_lines":[{"line_number":80,"context_line":"profiles that request specific mdev types."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Finally, the driver will create ``DriverAttachHandle`` objects of type MDEV,"},{"line_number":83,"context_line":"which in its attach handle infor will have a will have a new ``asked_type``"},{"line_number":84,"context_line":"field in addition to the PCI address fields. The attach handle will look as"},{"line_number":85,"context_line":"follows:"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"2b74757b_66a6ffed","line":83,"range":{"start_line":83,"start_character":27,"end_line":83,"end_character":54},"in_reply_to":"88e945ba_8a966bef","updated":"2026-06-04 17:13:10.000000000","message":"thanks, fixed!","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"441aebc0d1d051eb85fa26d402636b49f26f2299","unresolved":true,"context_lines":[{"line_number":167,"context_line":"driver will report. The new driver will be enabled via the"},{"line_number":168,"context_line":"existing ``[agent]enabled_drivers`` option."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Operators should not enable both the generic mdev driver and a"},{"line_number":171,"context_line":"vendor-specific driver (e.g., the NVIDIA GPU driver) for the same"},{"line_number":172,"context_line":"parent device. Doing so would not cause duplicate resource reporting to"},{"line_number":173,"context_line":"Placement, but the device would be reported with the attributes discovered"},{"line_number":174,"context_line":"by whichever driver is listed first in the ``enabled_drivers`` option."},{"line_number":175,"context_line":"This might be suboptimal as for example NVIDIA devices should be discovered"},{"line_number":176,"context_line":"by the NVIDIA driver rather than the generic mdev one. The"},{"line_number":177,"context_line":"``enabled_parent_devices`` and ``enabled_mdev_types`` configuration options"},{"line_number":178,"context_line":"can be used to avoid overlap. Nonetheless, an additional check will be"},{"line_number":179,"context_line":"implemented in the conductor to catch duplicated devices and warn the"},{"line_number":180,"context_line":"operator that the configuration should be revised."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"Alternatives"},{"line_number":183,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"df48c415_57c93c95","line":180,"range":{"start_line":170,"start_character":0,"end_line":180,"end_character":50},"updated":"2026-06-04 05:54:16.000000000","message":"+1 thank you for calling out explictly in the spec about enabling both generic and vendor specific driver and warning user about config revision.","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":true,"context_lines":[{"line_number":167,"context_line":"driver will report. The new driver will be enabled via the"},{"line_number":168,"context_line":"existing ``[agent]enabled_drivers`` option."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Operators should not enable both the generic mdev driver and a"},{"line_number":171,"context_line":"vendor-specific driver (e.g., the NVIDIA GPU driver) for the same"},{"line_number":172,"context_line":"parent device. Doing so would not cause duplicate resource reporting to"},{"line_number":173,"context_line":"Placement, but the device would be reported with the attributes discovered"},{"line_number":174,"context_line":"by whichever driver is listed first in the ``enabled_drivers`` option."},{"line_number":175,"context_line":"This might be suboptimal as for example NVIDIA devices should be discovered"},{"line_number":176,"context_line":"by the NVIDIA driver rather than the generic mdev one. The"},{"line_number":177,"context_line":"``enabled_parent_devices`` and ``enabled_mdev_types`` configuration options"},{"line_number":178,"context_line":"can be used to avoid overlap. Nonetheless, an additional check will be"},{"line_number":179,"context_line":"implemented in the conductor to catch duplicated devices and warn the"},{"line_number":180,"context_line":"operator that the configuration should be revised."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"Alternatives"},{"line_number":183,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9b133f94_6403cdff","line":180,"range":{"start_line":170,"start_character":0,"end_line":180,"end_character":50},"in_reply_to":"54c72785_ea5d0d6d","updated":"2026-06-09 14:24:38.000000000","message":"agreed I considered adding some check in the current code but it did not seem right to do it in the conductor. I also did not want to bring the move to the agent into this spec","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":167,"context_line":"driver will report. The new driver will be enabled via the"},{"line_number":168,"context_line":"existing ``[agent]enabled_drivers`` option."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Operators should not enable both the generic mdev driver and a"},{"line_number":171,"context_line":"vendor-specific driver (e.g., the NVIDIA GPU driver) for the same"},{"line_number":172,"context_line":"parent device. Doing so would not cause duplicate resource reporting to"},{"line_number":173,"context_line":"Placement, but the device would be reported with the attributes discovered"},{"line_number":174,"context_line":"by whichever driver is listed first in the ``enabled_drivers`` option."},{"line_number":175,"context_line":"This might be suboptimal as for example NVIDIA devices should be discovered"},{"line_number":176,"context_line":"by the NVIDIA driver rather than the generic mdev one. The"},{"line_number":177,"context_line":"``enabled_parent_devices`` and ``enabled_mdev_types`` configuration options"},{"line_number":178,"context_line":"can be used to avoid overlap. Nonetheless, an additional check will be"},{"line_number":179,"context_line":"implemented in the conductor to catch duplicated devices and warn the"},{"line_number":180,"context_line":"operator that the configuration should be revised."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"Alternatives"},{"line_number":183,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"2e006aaf_3ca5f75f","line":180,"range":{"start_line":170,"start_character":0,"end_line":180,"end_character":50},"in_reply_to":"9b133f94_6403cdff","updated":"2026-06-28 18:40:42.000000000","message":"Acknowledged","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":167,"context_line":"driver will report. The new driver will be enabled via the"},{"line_number":168,"context_line":"existing ``[agent]enabled_drivers`` option."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Operators should not enable both the generic mdev driver and a"},{"line_number":171,"context_line":"vendor-specific driver (e.g., the NVIDIA GPU driver) for the same"},{"line_number":172,"context_line":"parent device. Doing so would not cause duplicate resource reporting to"},{"line_number":173,"context_line":"Placement, but the device would be reported with the attributes discovered"},{"line_number":174,"context_line":"by whichever driver is listed first in the ``enabled_drivers`` option."},{"line_number":175,"context_line":"This might be suboptimal as for example NVIDIA devices should be discovered"},{"line_number":176,"context_line":"by the NVIDIA driver rather than the generic mdev one. The"},{"line_number":177,"context_line":"``enabled_parent_devices`` and ``enabled_mdev_types`` configuration options"},{"line_number":178,"context_line":"can be used to avoid overlap. Nonetheless, an additional check will be"},{"line_number":179,"context_line":"implemented in the conductor to catch duplicated devices and warn the"},{"line_number":180,"context_line":"operator that the configuration should be revised."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"Alternatives"},{"line_number":183,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"54c72785_ea5d0d6d","line":180,"range":{"start_line":170,"start_character":0,"end_line":180,"end_character":50},"in_reply_to":"df48c415_57c93c95","updated":"2026-06-05 14:06:58.000000000","message":"so catuchign the deplulicat at the conductor is not really ok\n\nwe shoudl catch it in teh cyborg agent and reject starting with a cofniguration error if 2 enabeld drivers discover the same resouce.\n\ndocumenting this is a good start but we sshould be evolving the cybrog agent so devices are rported to placement by the cybrog agent not via the conductor which emans we need to enfoce things like this locally in the agent not in the conductor.","commit_id":"9101836e5ca831b845c39473c448038bbdeb540b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":false,"context_lines":[{"line_number":20,"context_line":"that can discover and report any Linux kernel mdev-capable device,"},{"line_number":21,"context_line":"along with a reusable ``MdevHandler`` class that encapsulates mdev bus"},{"line_number":22,"context_line":"discovery and eliminates code duplication between the new driver and"},{"line_number":23,"context_line":"the existing GPU driver."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Use Cases"},{"line_number":26,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"17525f35_7438f699","line":23,"updated":"2026-06-05 14:06:58.000000000","message":"+1","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":false,"context_lines":[{"line_number":30,"context_line":"mdev drivers like mtty or mdpy. Reusing this proven mdev discovery class"},{"line_number":31,"context_line":"in other drivers like the GPU driver means increasing the testing"},{"line_number":32,"context_line":"coverage across the project, reducing the risk of bugs and the cost of"},{"line_number":33,"context_line":"ongoing maintenance."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"As an operator I would like to expose non-GPU mdev-capable devices"},{"line_number":36,"context_line":"such as Intel GVT-g, Intel QAT, or vendor-provided vFPGA devices to"}],"source_content_type":"text/x-rst","patch_set":8,"id":"6267ffda_c0542e54","line":33,"updated":"2026-06-05 14:06:58.000000000","message":"+1 yes very much agreed","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":33,"context_line":"ongoing maintenance."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"As an operator I would like to expose non-GPU mdev-capable devices"},{"line_number":36,"context_line":"such as Intel GVT-g, Intel QAT, or vendor-provided vFPGA devices to"},{"line_number":37,"context_line":"my tenants without waiting for a dedicated Cyborg driver for each"},{"line_number":38,"context_line":"device type. A generic mdev driver lets me make any mdev-capable"},{"line_number":39,"context_line":"hardware available through Cyborg immediately."}],"source_content_type":"text/x-rst","patch_set":8,"id":"a26c24d1_5ebef957","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":20},"updated":"2026-06-05 14:06:58.000000000","message":"nit: this is technally also a gpu :) \nits intels name for there mdev based vgpus on the integated gpu on the cpu\n\nthe QAT and fpga case are geneuinly non GPU examples.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":33,"context_line":"ongoing maintenance."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"As an operator I would like to expose non-GPU mdev-capable devices"},{"line_number":36,"context_line":"such as Intel GVT-g, Intel QAT, or vendor-provided vFPGA devices to"},{"line_number":37,"context_line":"my tenants without waiting for a dedicated Cyborg driver for each"},{"line_number":38,"context_line":"device type. A generic mdev driver lets me make any mdev-capable"},{"line_number":39,"context_line":"hardware available through Cyborg immediately."}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a258fba_6f2d4ffe","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":20},"in_reply_to":"a26c24d1_5ebef957","updated":"2026-06-28 18:40:42.000000000","message":"Done","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":false,"context_lines":[{"line_number":33,"context_line":"ongoing maintenance."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"As an operator I would like to expose non-GPU mdev-capable devices"},{"line_number":36,"context_line":"such as Intel GVT-g, Intel QAT, or vendor-provided vFPGA devices to"},{"line_number":37,"context_line":"my tenants without waiting for a dedicated Cyborg driver for each"},{"line_number":38,"context_line":"device type. A generic mdev driver lets me make any mdev-capable"},{"line_number":39,"context_line":"hardware available through Cyborg immediately."}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa5baefd_8a31890c","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":20},"in_reply_to":"a26c24d1_5ebef957","updated":"2026-06-09 14:24:38.000000000","message":"thanks fixed, I did not spend much time looking into the intel drivers so I did not notice that","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":false,"context_lines":[{"line_number":37,"context_line":"my tenants without waiting for a dedicated Cyborg driver for each"},{"line_number":38,"context_line":"device type. A generic mdev driver lets me make any mdev-capable"},{"line_number":39,"context_line":"hardware available through Cyborg immediately."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Proposed change"},{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"33b67424_61baea83","line":40,"updated":"2026-06-05 14:06:58.000000000","message":"+1","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":53,"context_line":"creation nor deletion of mdevs, instead will delegate that to"},{"line_number":54,"context_line":"Nova [1]_."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"The proposed generic mdev driver holds an ``MdevHandler`` instance as"},{"line_number":57,"context_line":"a private attribute, set during ``__init__``. In its ``discover()``"},{"line_number":58,"context_line":"method, the driver calls ``MdevHandler.discover_parent_devices()`` to"},{"line_number":59,"context_line":"enumerate mdev-capable PCI devices, then calls"},{"line_number":60,"context_line":"``MdevHandler.get_mdev_types()`` for each parent to retrieve the"},{"line_number":61,"context_line":"supported mdev types. For each parent device and mdev type the driver"},{"line_number":62,"context_line":"produces the standard Cyborg driver objects: a ``DriverDevice``"},{"line_number":63,"context_line":"representing the parent PCI device, a ``DriverDeployable``"},{"line_number":64,"context_line":"representing the mdev type (which maps to a placement resource provider"},{"line_number":65,"context_line":"parented to the compute node), and one ``DriverAttachHandle`` per"},{"line_number":66,"context_line":"available instance (which maps to inventory on that resource provider)."},{"line_number":67,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":68,"context_line":"``DriverAttribute`` objects as needed. Configuration-based filtering"}],"source_content_type":"text/x-rst","patch_set":8,"id":"b5f2b851_3cfdee76","line":65,"range":{"start_line":56,"start_character":0,"end_line":65,"end_character":29},"updated":"2026-06-05 14:06:58.000000000","message":"so we should have only 1 resouce provder per phsyical device\n\nwith an inventory of a CUSTOM_\u003cmdev type\u003e resouces for the mdevs and a total equal to avaliable_isntance + the currently allcoated mdevs form that device\n\nevery time you create a mdev of a given type aviabel isntance goes down but if its not used by a vm currenly you have to add the aviable ones tot the created and unused ones.\n\nthe ohter thing we need need to conider is do we allow seting the max amoutn via a max_isntance value in the config like nova\n\nthat existing becasue for nvidia gpus if the mdev is reported via the VF you 32 or 64 VFs always evne if the mdev type only allows 2 of the mdev to be created on the device\n\nbasiclly nivad create the maxium numboer of VFs required to supprot the smallest mdev type. and when you filed the card all the other vf suddenly went to 0","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":false,"context_lines":[{"line_number":53,"context_line":"creation nor deletion of mdevs, instead will delegate that to"},{"line_number":54,"context_line":"Nova [1]_."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"The proposed generic mdev driver holds an ``MdevHandler`` instance as"},{"line_number":57,"context_line":"a private attribute, set during ``__init__``. In its ``discover()``"},{"line_number":58,"context_line":"method, the driver calls ``MdevHandler.discover_parent_devices()`` to"},{"line_number":59,"context_line":"enumerate mdev-capable PCI devices, then calls"},{"line_number":60,"context_line":"``MdevHandler.get_mdev_types()`` for each parent to retrieve the"},{"line_number":61,"context_line":"supported mdev types. For each parent device and mdev type the driver"},{"line_number":62,"context_line":"produces the standard Cyborg driver objects: a ``DriverDevice``"},{"line_number":63,"context_line":"representing the parent PCI device, a ``DriverDeployable``"},{"line_number":64,"context_line":"representing the mdev type (which maps to a placement resource provider"},{"line_number":65,"context_line":"parented to the compute node), and one ``DriverAttachHandle`` per"},{"line_number":66,"context_line":"available instance (which maps to inventory on that resource provider)."},{"line_number":67,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":68,"context_line":"``DriverAttribute`` objects as needed. Configuration-based filtering"}],"source_content_type":"text/x-rst","patch_set":8,"id":"369ee0ec_ccd3f442","line":65,"range":{"start_line":56,"start_character":0,"end_line":65,"end_character":29},"in_reply_to":"4b3677f1_5fde923c","updated":"2026-06-29 13:52:59.000000000","message":"Acknowledged","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":53,"context_line":"creation nor deletion of mdevs, instead will delegate that to"},{"line_number":54,"context_line":"Nova [1]_."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"The proposed generic mdev driver holds an ``MdevHandler`` instance as"},{"line_number":57,"context_line":"a private attribute, set during ``__init__``. In its ``discover()``"},{"line_number":58,"context_line":"method, the driver calls ``MdevHandler.discover_parent_devices()`` to"},{"line_number":59,"context_line":"enumerate mdev-capable PCI devices, then calls"},{"line_number":60,"context_line":"``MdevHandler.get_mdev_types()`` for each parent to retrieve the"},{"line_number":61,"context_line":"supported mdev types. For each parent device and mdev type the driver"},{"line_number":62,"context_line":"produces the standard Cyborg driver objects: a ``DriverDevice``"},{"line_number":63,"context_line":"representing the parent PCI device, a ``DriverDeployable``"},{"line_number":64,"context_line":"representing the mdev type (which maps to a placement resource provider"},{"line_number":65,"context_line":"parented to the compute node), and one ``DriverAttachHandle`` per"},{"line_number":66,"context_line":"available instance (which maps to inventory on that resource provider)."},{"line_number":67,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":68,"context_line":"``DriverAttribute`` objects as needed. Configuration-based filtering"}],"source_content_type":"text/x-rst","patch_set":8,"id":"4b3677f1_5fde923c","line":65,"range":{"start_line":56,"start_character":0,"end_line":65,"end_character":29},"in_reply_to":"9576cd45_3845e460","updated":"2026-06-28 18:40:42.000000000","message":"in placement yes.\n1 rp with multipel inventories \nin cybrog we may need to fix things to make that work.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":true,"context_lines":[{"line_number":53,"context_line":"creation nor deletion of mdevs, instead will delegate that to"},{"line_number":54,"context_line":"Nova [1]_."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"The proposed generic mdev driver holds an ``MdevHandler`` instance as"},{"line_number":57,"context_line":"a private attribute, set during ``__init__``. In its ``discover()``"},{"line_number":58,"context_line":"method, the driver calls ``MdevHandler.discover_parent_devices()`` to"},{"line_number":59,"context_line":"enumerate mdev-capable PCI devices, then calls"},{"line_number":60,"context_line":"``MdevHandler.get_mdev_types()`` for each parent to retrieve the"},{"line_number":61,"context_line":"supported mdev types. For each parent device and mdev type the driver"},{"line_number":62,"context_line":"produces the standard Cyborg driver objects: a ``DriverDevice``"},{"line_number":63,"context_line":"representing the parent PCI device, a ``DriverDeployable``"},{"line_number":64,"context_line":"representing the mdev type (which maps to a placement resource provider"},{"line_number":65,"context_line":"parented to the compute node), and one ``DriverAttachHandle`` per"},{"line_number":66,"context_line":"available instance (which maps to inventory on that resource provider)."},{"line_number":67,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":68,"context_line":"``DriverAttribute`` objects as needed. Configuration-based filtering"}],"source_content_type":"text/x-rst","patch_set":8,"id":"9576cd45_3845e460","line":65,"range":{"start_line":56,"start_character":0,"end_line":65,"end_character":29},"in_reply_to":"b5f2b851_3cfdee76","updated":"2026-06-09 14:24:38.000000000","message":"is it possible to have 1 resource provider per device if the device supports multiple mdev types? Currently I don\u0027t see a why of expressing multiple resource classes in a single DriverDeployable, as it only has one `num_accelerators` field. Unless I\u0027m misunderstanding something, currently the conductor assumes that a DriverDevice might have more than one DriverDeployable but that deployable will only correspond to one resource class https://github.com/openstack/cyborg/blob/233f2a5b7e396c24bf15ae22f8cf64a480666f5c/cyborg/conductor/manager.py#L485","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":65,"context_line":"parented to the compute node), and one ``DriverAttachHandle`` per"},{"line_number":66,"context_line":"available instance (which maps to inventory on that resource provider)."},{"line_number":67,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":68,"context_line":"``DriverAttribute`` objects as needed. Configuration-based filtering"},{"line_number":69,"context_line":"is passed through to the ``MdevHandler`` methods via their"},{"line_number":70,"context_line":"``pci_filter`` and ``type_filter`` parameters."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The generic mdev driver will report a custom resource class for each"},{"line_number":73,"context_line":"deployable. The class name is derived from the mdev type name"}],"source_content_type":"text/x-rst","patch_set":8,"id":"c6a59786_6acc1757","line":70,"range":{"start_line":68,"start_character":39,"end_line":70,"end_character":46},"updated":"2026-06-05 14:06:58.000000000","message":"yes so this shoudl eb an opt in or include list model\n\nby default we shoudl not report any mdev unelss you specify either an mdev type to be manged by this driver or a parent pci device\n\nthe question is do we require both alwasy\n\nif we do nto alwasy require the pci adress then we need max instnace ans we need to apply that restriction at the PF level for all mdevs exposed by its chile VFs fo that given type\n\nwe also need to supprot a sinle PF that staticly can have more then one mdev type ensbled at oce\n\nfinally for mtty and mdpy sample diver we also need to supprot device that od not have a pci adress. in this case we can use a sentelal virtal value\n\nas an aside im stongly consdierign extending my pci_sime kernel module to supprot mdevs as well to make this toplogy look more real but i dont want to make that a hard requiremetn for this spec.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":65,"context_line":"parented to the compute node), and one ``DriverAttachHandle`` per"},{"line_number":66,"context_line":"available instance (which maps to inventory on that resource provider)."},{"line_number":67,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":68,"context_line":"``DriverAttribute`` objects as needed. Configuration-based filtering"},{"line_number":69,"context_line":"is passed through to the ``MdevHandler`` methods via their"},{"line_number":70,"context_line":"``pci_filter`` and ``type_filter`` parameters."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The generic mdev driver will report a custom resource class for each"},{"line_number":73,"context_line":"deployable. The class name is derived from the mdev type name"}],"source_content_type":"text/x-rst","patch_set":8,"id":"e3a79e51_efdd8bc5","line":70,"range":{"start_line":68,"start_character":39,"end_line":70,"end_character":46},"in_reply_to":"37946409_c4de2bf2","updated":"2026-06-28 18:40:42.000000000","message":"Acknowledged","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":true,"context_lines":[{"line_number":65,"context_line":"parented to the compute node), and one ``DriverAttachHandle`` per"},{"line_number":66,"context_line":"available instance (which maps to inventory on that resource provider)."},{"line_number":67,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":68,"context_line":"``DriverAttribute`` objects as needed. Configuration-based filtering"},{"line_number":69,"context_line":"is passed through to the ``MdevHandler`` methods via their"},{"line_number":70,"context_line":"``pci_filter`` and ``type_filter`` parameters."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"The generic mdev driver will report a custom resource class for each"},{"line_number":73,"context_line":"deployable. The class name is derived from the mdev type name"}],"source_content_type":"text/x-rst","patch_set":8,"id":"37946409_c4de2bf2","line":70,"range":{"start_line":68,"start_character":39,"end_line":70,"end_character":46},"in_reply_to":"c6a59786_6acc1757","updated":"2026-06-09 14:24:38.000000000","message":"yes, I\u0027ve expanded the configuration section of the proposal to make clear that only devices configured will be managed by Cyborg","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":72,"context_line":"The generic mdev driver will report a custom resource class for each"},{"line_number":73,"context_line":"deployable. The class name is derived from the mdev type name"},{"line_number":74,"context_line":"(the directory name under ``mdev_supported_types/``) using the"},{"line_number":75,"context_line":"format ``CUSTOM_MDEV_\u003cTYPE_NAME\u003e``. The type name is normalized by"},{"line_number":76,"context_line":"converting hyphens to underscores and uppercasing all alphabetic"},{"line_number":77,"context_line":"characters to produce a valid Placement custom resource class name."},{"line_number":78,"context_line":"For example, a type named ``mtty-2`` produces the resource class"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ffbb7994_d101e764","line":75,"range":{"start_line":75,"start_character":7,"end_line":75,"end_character":34},"updated":"2026-06-05 14:06:58.000000000","message":"+1 this follows the `CUSTOM_\u003cBUS|DRIVER\u003e_\u003cNAME\u003e` format  we dicussed in the ptg.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":72,"context_line":"The generic mdev driver will report a custom resource class for each"},{"line_number":73,"context_line":"deployable. The class name is derived from the mdev type name"},{"line_number":74,"context_line":"(the directory name under ``mdev_supported_types/``) using the"},{"line_number":75,"context_line":"format ``CUSTOM_MDEV_\u003cTYPE_NAME\u003e``. The type name is normalized by"},{"line_number":76,"context_line":"converting hyphens to underscores and uppercasing all alphabetic"},{"line_number":77,"context_line":"characters to produce a valid Placement custom resource class name."},{"line_number":78,"context_line":"For example, a type named ``mtty-2`` produces the resource class"}],"source_content_type":"text/x-rst","patch_set":8,"id":"c22f2d6b_301e04a8","line":75,"range":{"start_line":75,"start_character":7,"end_line":75,"end_character":34},"in_reply_to":"ffbb7994_d101e764","updated":"2026-06-28 18:40:42.000000000","message":"Acknowledged","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":79,"context_line":"``CUSTOM_MDEV_MTTY_2``. This allows operators to write device"},{"line_number":80,"context_line":"profiles that request specific mdev types. The only trait that will be"},{"line_number":81,"context_line":"reported by the generic mdev driver is the \"OWNER_CYBORG\" trait that is common"},{"line_number":82,"context_line":"to all devices managed by cyborg."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Finally, the driver will create ``DriverAttachHandle`` objects of type MDEV,"},{"line_number":85,"context_line":"which in its attach handle info will have a new ``asked_type`` field in"}],"source_content_type":"text/x-rst","patch_set":8,"id":"d6037034_1fb2dcd0","line":82,"updated":"2026-06-05 14:06:58.000000000","message":"+1 this is also imporant where a resouce clase might be shared via 2 diffent serivces.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":79,"context_line":"``CUSTOM_MDEV_MTTY_2``. This allows operators to write device"},{"line_number":80,"context_line":"profiles that request specific mdev types. The only trait that will be"},{"line_number":81,"context_line":"reported by the generic mdev driver is the \"OWNER_CYBORG\" trait that is common"},{"line_number":82,"context_line":"to all devices managed by cyborg."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Finally, the driver will create ``DriverAttachHandle`` objects of type MDEV,"},{"line_number":85,"context_line":"which in its attach handle info will have a new ``asked_type`` field in"}],"source_content_type":"text/x-rst","patch_set":8,"id":"65e75884_853f9036","line":82,"in_reply_to":"d6037034_1fb2dcd0","updated":"2026-06-28 18:40:42.000000000","message":"Acknowledged","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":92,"context_line":"        \u0027attach_handle_type\u0027: \u0027MDEV\u0027,"},{"line_number":93,"context_line":"        \u0027attach_handle_uuid\u0027: \u002791ac1606-427e-44bb-8233-f4ff4bf3d241\u0027,"},{"line_number":94,"context_line":"        \u0027attach_handle_info\u0027: {"},{"line_number":95,"context_line":"            \u0027asked_type\u0027: \u0027mtty\u0027,"},{"line_number":96,"context_line":"            \"domain\": \"0000\","},{"line_number":97,"context_line":"            \"bus\": \"10\","},{"line_number":98,"context_line":"            \"device\": \"1\","}],"source_content_type":"text/x-rst","patch_set":8,"id":"7049cbec_1c839923","line":95,"range":{"start_line":95,"start_character":13,"end_line":95,"end_character":23},"updated":"2026-06-05 14:06:58.000000000","message":"i guess this is out of scope but in a futre release i would prefer to change the name of this value in a new microverion ot medv_type ro just `type`","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \u0027attach_handle_type\u0027: \u0027MDEV\u0027,"},{"line_number":93,"context_line":"        \u0027attach_handle_uuid\u0027: \u002791ac1606-427e-44bb-8233-f4ff4bf3d241\u0027,"},{"line_number":94,"context_line":"        \u0027attach_handle_info\u0027: {"},{"line_number":95,"context_line":"            \u0027asked_type\u0027: \u0027mtty\u0027,"},{"line_number":96,"context_line":"            \"domain\": \"0000\","},{"line_number":97,"context_line":"            \"bus\": \"10\","},{"line_number":98,"context_line":"            \"device\": \"1\","}],"source_content_type":"text/x-rst","patch_set":8,"id":"a0d20645_8af0f3b7","line":95,"range":{"start_line":95,"start_character":13,"end_line":95,"end_character":23},"in_reply_to":"7049cbec_1c839923","updated":"2026-06-28 18:40:42.000000000","message":"Acknowledged","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":99,"context_line":"            \"function\": \"0\","},{"line_number":100,"context_line":"        },"},{"line_number":101,"context_line":"    }"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"This spec also proposes refactoring the existing GPU driver to hold an"},{"line_number":104,"context_line":"``MdevHandler`` instance and delegate mdev bus discovery to it, instead"},{"line_number":105,"context_line":"of carrying its own sysfs parsing implementation. The GPU driver will"},{"line_number":106,"context_line":"retain all NVIDIA-specific logic such as vendor name parsing,"},{"line_number":107,"context_line":"lspci-based PCI discovery, trait generation, vGPU type configuration"},{"line_number":108,"context_line":"mapping, and construction of its own Cyborg driver objects. Only the"},{"line_number":109,"context_line":"raw mdev type introspection (reading ``available_instances``, ``name``,"},{"line_number":110,"context_line":"``device_api`` from sysfs) is delegated to ``MdevHandler``. As a result of the"},{"line_number":111,"context_line":"refactor, the existing methods for creating and deleting mdevs will be removed,"},{"line_number":112,"context_line":"since that functionality will be delegated completely to Nova."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"MdevHandler class design"},{"line_number":115,"context_line":"------------------------"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"4cded1ae_10f25ea8","line":113,"range":{"start_line":102,"start_character":1,"end_line":113,"end_character":1},"updated":"2026-06-05 14:06:58.000000000","message":"for now this is fine but i want to also have the lspci part delegated to the generic pci implation in teh future\n\nmy medium term goal would be ot deprecate and remove the nvida driver entirly along with a number of others once we catea a v2 of the geneic pci driver and have the mdev driver\n\nwe can see how much progress we make on this thice cycle.\n\nif it can be resused form the geneirc implementation i would like to do that but we can leave that to the implementation review.\n\nnote that the exisitng mdev supprot has never worked because the nova part was never complete so there should not be existing usage of this fucntionatly.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":true,"context_lines":[{"line_number":99,"context_line":"            \"function\": \"0\","},{"line_number":100,"context_line":"        },"},{"line_number":101,"context_line":"    }"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"This spec also proposes refactoring the existing GPU driver to hold an"},{"line_number":104,"context_line":"``MdevHandler`` instance and delegate mdev bus discovery to it, instead"},{"line_number":105,"context_line":"of carrying its own sysfs parsing implementation. The GPU driver will"},{"line_number":106,"context_line":"retain all NVIDIA-specific logic such as vendor name parsing,"},{"line_number":107,"context_line":"lspci-based PCI discovery, trait generation, vGPU type configuration"},{"line_number":108,"context_line":"mapping, and construction of its own Cyborg driver objects. Only the"},{"line_number":109,"context_line":"raw mdev type introspection (reading ``available_instances``, ``name``,"},{"line_number":110,"context_line":"``device_api`` from sysfs) is delegated to ``MdevHandler``. As a result of the"},{"line_number":111,"context_line":"refactor, the existing methods for creating and deleting mdevs will be removed,"},{"line_number":112,"context_line":"since that functionality will be delegated completely to Nova."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"MdevHandler class design"},{"line_number":115,"context_line":"------------------------"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"aabb21c3_2059a9b7","line":113,"range":{"start_line":102,"start_character":1,"end_line":113,"end_character":1},"in_reply_to":"4cded1ae_10f25ea8","updated":"2026-06-09 14:24:38.000000000","message":"+1 to that. I intentionally however left the PCI side of the nvidia driver out of this spec so that we can design v2 drivers clearly with its own spec","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            \"function\": \"0\","},{"line_number":100,"context_line":"        },"},{"line_number":101,"context_line":"    }"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"This spec also proposes refactoring the existing GPU driver to hold an"},{"line_number":104,"context_line":"``MdevHandler`` instance and delegate mdev bus discovery to it, instead"},{"line_number":105,"context_line":"of carrying its own sysfs parsing implementation. The GPU driver will"},{"line_number":106,"context_line":"retain all NVIDIA-specific logic such as vendor name parsing,"},{"line_number":107,"context_line":"lspci-based PCI discovery, trait generation, vGPU type configuration"},{"line_number":108,"context_line":"mapping, and construction of its own Cyborg driver objects. Only the"},{"line_number":109,"context_line":"raw mdev type introspection (reading ``available_instances``, ``name``,"},{"line_number":110,"context_line":"``device_api`` from sysfs) is delegated to ``MdevHandler``. As a result of the"},{"line_number":111,"context_line":"refactor, the existing methods for creating and deleting mdevs will be removed,"},{"line_number":112,"context_line":"since that functionality will be delegated completely to Nova."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"MdevHandler class design"},{"line_number":115,"context_line":"------------------------"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"5131de1e_e8552dbd","line":113,"range":{"start_line":102,"start_character":1,"end_line":113,"end_character":1},"in_reply_to":"aabb21c3_2059a9b7","updated":"2026-06-28 18:40:42.000000000","message":"Acknowledged","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":121,"context_line":"The constructor accepts an optional ``sysfs_path`` parameter"},{"line_number":122,"context_line":"(defaulting to ``/sys/class/mdev_bus/``) that specifies the root"},{"line_number":123,"context_line":"directory for mdev bus discovery. This allows unit tests to point"},{"line_number":124,"context_line":"the handler at a fake sysfs tree without patching."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"The class exposes two methods:"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"fcfb068d_e829398e","line":124,"updated":"2026-06-05 14:06:58.000000000","message":"i assume its defiend this way so that we can pass a diffent sysfs_path liek we do in https://github.com/openstack/nova/blob/master/nova/filesystem.py for testing\n\nwe shoudl steal/copy some fo those hleper by the way.\n\nreading and writhing sysfs is not hard but there are a few gotchs like handleign busy devices that that helps with.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":121,"context_line":"The constructor accepts an optional ``sysfs_path`` parameter"},{"line_number":122,"context_line":"(defaulting to ``/sys/class/mdev_bus/``) that specifies the root"},{"line_number":123,"context_line":"directory for mdev bus discovery. This allows unit tests to point"},{"line_number":124,"context_line":"the handler at a fake sysfs tree without patching."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"The class exposes two methods:"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1c2f1f8a_f20482ea","line":124,"in_reply_to":"6bd256c1_318b9dad","updated":"2026-06-28 18:40:42.000000000","message":"Acknowledged","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":true,"context_lines":[{"line_number":121,"context_line":"The constructor accepts an optional ``sysfs_path`` parameter"},{"line_number":122,"context_line":"(defaulting to ``/sys/class/mdev_bus/``) that specifies the root"},{"line_number":123,"context_line":"directory for mdev bus discovery. This allows unit tests to point"},{"line_number":124,"context_line":"the handler at a fake sysfs tree without patching."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"The class exposes two methods:"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"6bd256c1_318b9dad","line":124,"in_reply_to":"fcfb068d_e829398e","updated":"2026-06-09 14:24:38.000000000","message":"exactly, the intended goal was to be able to replicate mdev files in a temporary directory to run the unit test in environments withouth mtty or any driver that creates mdevs. Thanks for the link, I\u0027ll take it into account when implementing","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":128,"context_line":"* ``discover_parent_devices(pci_filter\u003dNone)`` -- Scans"},{"line_number":129,"context_line":"  ``/sys/class/mdev_bus/`` and returns a list of PCI addresses of"},{"line_number":130,"context_line":"  mdev-capable parent devices. When ``pci_filter`` is a non-empty"},{"line_number":131,"context_line":"  list, only PCI addresses present in that list are returned."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* ``get_mdev_types(pci_address, type_filter\u003dNone)`` -- Reads"},{"line_number":134,"context_line":"  ``/sys/class/mdev_bus/{pci_address}/mdev_supported_types/`` and"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5955a661_5ae8070a","line":131,"updated":"2026-06-05 14:06:58.000000000","message":"we shoudl not assume cybrog can manage any aviabel decies in any driver\n\nwe shoudl alway requrie a sential for that which iwoudl propes address\u003d\u0027*\u0027\nas such the pci_filter should be a list of adresses","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":true,"context_lines":[{"line_number":128,"context_line":"* ``discover_parent_devices(pci_filter\u003dNone)`` -- Scans"},{"line_number":129,"context_line":"  ``/sys/class/mdev_bus/`` and returns a list of PCI addresses of"},{"line_number":130,"context_line":"  mdev-capable parent devices. When ``pci_filter`` is a non-empty"},{"line_number":131,"context_line":"  list, only PCI addresses present in that list are returned."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* ``get_mdev_types(pci_address, type_filter\u003dNone)`` -- Reads"},{"line_number":134,"context_line":"  ``/sys/class/mdev_bus/{pci_address}/mdev_supported_types/`` and"}],"source_content_type":"text/x-rst","patch_set":8,"id":"92653dbd_206da51c","line":131,"in_reply_to":"5955a661_5ae8070a","updated":"2026-06-09 14:24:38.000000000","message":"I\u0027ve updated the section to use `[\u0027*\u0027]` as the default value to discover all existing devices","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":128,"context_line":"* ``discover_parent_devices(pci_filter\u003dNone)`` -- Scans"},{"line_number":129,"context_line":"  ``/sys/class/mdev_bus/`` and returns a list of PCI addresses of"},{"line_number":130,"context_line":"  mdev-capable parent devices. When ``pci_filter`` is a non-empty"},{"line_number":131,"context_line":"  list, only PCI addresses present in that list are returned."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* ``get_mdev_types(pci_address, type_filter\u003dNone)`` -- Reads"},{"line_number":134,"context_line":"  ``/sys/class/mdev_bus/{pci_address}/mdev_supported_types/`` and"}],"source_content_type":"text/x-rst","patch_set":8,"id":"bc84c4d5_91ee0622","line":131,"in_reply_to":"92653dbd_206da51c","updated":"2026-06-28 18:40:42.000000000","message":"this is not quite wha ti ment\n\n\ni do nto want this to deiscover all devices by defualt\nwe can allow explcit opt in to that behavior but when you enebal the driver\nif you dont configure the devicec it should nto report any device at all","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":true,"context_lines":[{"line_number":128,"context_line":"* ``discover_parent_devices(pci_filter\u003dNone)`` -- Scans"},{"line_number":129,"context_line":"  ``/sys/class/mdev_bus/`` and returns a list of PCI addresses of"},{"line_number":130,"context_line":"  mdev-capable parent devices. When ``pci_filter`` is a non-empty"},{"line_number":131,"context_line":"  list, only PCI addresses present in that list are returned."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* ``get_mdev_types(pci_address, type_filter\u003dNone)`` -- Reads"},{"line_number":134,"context_line":"  ``/sys/class/mdev_bus/{pci_address}/mdev_supported_types/`` and"}],"source_content_type":"text/x-rst","patch_set":8,"id":"c3f32591_6c823ad4","line":131,"in_reply_to":"bc84c4d5_91ee0622","updated":"2026-06-29 13:52:59.000000000","message":"ack, I reverted to `None` as the default, with `[\u0027*\u0027]` as a special value to return all devices, with the usual behavious being the driver passing a list of addresses build from the configuration","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":false,"context_lines":[{"line_number":128,"context_line":"* ``discover_parent_devices(pci_filter\u003dNone)`` -- Scans"},{"line_number":129,"context_line":"  ``/sys/class/mdev_bus/`` and returns a list of PCI addresses of"},{"line_number":130,"context_line":"  mdev-capable parent devices. When ``pci_filter`` is a non-empty"},{"line_number":131,"context_line":"  list, only PCI addresses present in that list are returned."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* ``get_mdev_types(pci_address, type_filter\u003dNone)`` -- Reads"},{"line_number":134,"context_line":"  ``/sys/class/mdev_bus/{pci_address}/mdev_supported_types/`` and"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ed8f9feb_2cb1f0de","line":131,"in_reply_to":"c3f32591_6c823ad4","updated":"2026-06-30 14:01:49.000000000","message":"Acknowledged","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":139,"context_line":"  (contents of the ``device_api`` file), and ``description`` (contents"},{"line_number":140,"context_line":"  of the ``description`` file, or empty string if absent). When"},{"line_number":141,"context_line":"  ``type_filter`` is a non-empty list, only types whose"},{"line_number":142,"context_line":"  ``type_name`` appears in the list are returned."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Drivers that need mdev support create an ``MdevHandler`` instance in"},{"line_number":145,"context_line":"their ``__init__`` method and store it as a private attribute. The"}],"source_content_type":"text/x-rst","patch_set":8,"id":"c38963bd_e38c7de6","line":142,"updated":"2026-06-05 14:06:58.000000000","message":"we need to be able to supprmt muples mdev types for the same PF\nand we need to be able to specy diffent mdev types on diffent PF or VF adresses\nand we need to special case virutal deveice with address\u003d\u0027virutal\u0027\nto supprot mtty/mdpy\n\nhttps://github.com/torvalds/linux/blob/master/samples/vfio-mdev/README.rst?plain\u003d1#L16\n\nsince those are not on the pci bus but the virutal buse so the palce where the pci adress woudl normally be is \"virtual/\u003cmoudle\u003e/\u003cisntace\u003e\" instead i.e.\n`/sys/devices/virtual/mtty/mtty/`","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":139,"context_line":"  (contents of the ``device_api`` file), and ``description`` (contents"},{"line_number":140,"context_line":"  of the ``description`` file, or empty string if absent). When"},{"line_number":141,"context_line":"  ``type_filter`` is a non-empty list, only types whose"},{"line_number":142,"context_line":"  ``type_name`` appears in the list are returned."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Drivers that need mdev support create an ``MdevHandler`` instance in"},{"line_number":145,"context_line":"their ``__init__`` method and store it as a private attribute. The"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1fd0fd3f_41c3cf35","line":142,"in_reply_to":"5366b921_217a2fc8","updated":"2026-06-28 18:40:42.000000000","message":"Acknowledged","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":true,"context_lines":[{"line_number":139,"context_line":"  (contents of the ``device_api`` file), and ``description`` (contents"},{"line_number":140,"context_line":"  of the ``description`` file, or empty string if absent). When"},{"line_number":141,"context_line":"  ``type_filter`` is a non-empty list, only types whose"},{"line_number":142,"context_line":"  ``type_name`` appears in the list are returned."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Drivers that need mdev support create an ``MdevHandler`` instance in"},{"line_number":145,"context_line":"their ``__init__`` method and store it as a private attribute. The"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5366b921_217a2fc8","line":142,"in_reply_to":"c38963bd_e38c7de6","updated":"2026-06-09 14:24:38.000000000","message":"I think the current design already supports multiple mdev types for PF. I\u0027ve based the spec on reading from `/sys/class/mdev_bus/` instead of `/sys/devices/`. It seems to me that both paths contain the same information, do you know if there is any difference between them?","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":162,"context_line":"    +-- discover()     +-- discover()"},{"line_number":163,"context_line":"        uses               uses"},{"line_number":164,"context_line":"        _mdev_handler      _mdev_handler"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Configuration will be provided through a new ``[mdev]`` section in"},{"line_number":167,"context_line":"``cyborg.conf``. The ``enabled_parent_devices`` option accepts a"},{"line_number":168,"context_line":"list of PCI addresses (empty by default), and ``enabled_mdev_types``"},{"line_number":169,"context_line":"accepts a list of mdev type name strings (empty by default)."},{"line_number":170,"context_line":"These options control which devices and types the generic mdev"},{"line_number":171,"context_line":"driver will report. The new driver will be enabled via the"},{"line_number":172,"context_line":"existing ``[agent]enabled_drivers`` option."}],"source_content_type":"text/x-rst","patch_set":8,"id":"e0588029_c3e3f460","line":169,"range":{"start_line":165,"start_character":1,"end_line":169,"end_character":60},"updated":"2026-06-05 14:06:58.000000000","message":"this is not quite the correct config shape\n\nwe do not have to matchnova exactly  but we do need more granularity then this\n\nnova has a list of enabeld types which then are used to generate dynmic config sectons `[mdev_\u003ctype]` which then ahs a set fo files like adress and max_isntances\n\n\nthat is an approch\n\na beter one may be to sue a json filed where have a list of object that have adresss, max_isntance, type, resouce_class and traits fiels\n\nwe shoudl allow overriedign the defualt resouce classs and addign triats to the provider via the config.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":162,"context_line":"    +-- discover()     +-- discover()"},{"line_number":163,"context_line":"        uses               uses"},{"line_number":164,"context_line":"        _mdev_handler      _mdev_handler"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Configuration will be provided through a new ``[mdev]`` section in"},{"line_number":167,"context_line":"``cyborg.conf``. The ``enabled_parent_devices`` option accepts a"},{"line_number":168,"context_line":"list of PCI addresses (empty by default), and ``enabled_mdev_types``"},{"line_number":169,"context_line":"accepts a list of mdev type name strings (empty by default)."},{"line_number":170,"context_line":"These options control which devices and types the generic mdev"},{"line_number":171,"context_line":"driver will report. The new driver will be enabled via the"},{"line_number":172,"context_line":"existing ``[agent]enabled_drivers`` option."}],"source_content_type":"text/x-rst","patch_set":8,"id":"5eb02b33_3ca20ede","line":169,"range":{"start_line":165,"start_character":1,"end_line":169,"end_character":60},"in_reply_to":"3a8e5240_47ec1167","updated":"2026-06-28 18:40:42.000000000","message":"Acknowledged","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":true,"context_lines":[{"line_number":162,"context_line":"    +-- discover()     +-- discover()"},{"line_number":163,"context_line":"        uses               uses"},{"line_number":164,"context_line":"        _mdev_handler      _mdev_handler"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Configuration will be provided through a new ``[mdev]`` section in"},{"line_number":167,"context_line":"``cyborg.conf``. The ``enabled_parent_devices`` option accepts a"},{"line_number":168,"context_line":"list of PCI addresses (empty by default), and ``enabled_mdev_types``"},{"line_number":169,"context_line":"accepts a list of mdev type name strings (empty by default)."},{"line_number":170,"context_line":"These options control which devices and types the generic mdev"},{"line_number":171,"context_line":"driver will report. The new driver will be enabled via the"},{"line_number":172,"context_line":"existing ``[agent]enabled_drivers`` option."}],"source_content_type":"text/x-rst","patch_set":8,"id":"3a8e5240_47ec1167","line":169,"range":{"start_line":165,"start_character":1,"end_line":169,"end_character":60},"in_reply_to":"e0588029_c3e3f460","updated":"2026-06-09 14:24:38.000000000","message":"thanks, that  is a good suggestion, I\u0027ve updated the spec to include a `device_spec` field which is a list of json objects with the mentioned fields","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":191,"context_line":"driver with its own copy of the mdev sysfs logic. This is how Cyborg"},{"line_number":192,"context_line":"currently handles mediated devices. It can lead to code duplication,"},{"line_number":193,"context_line":"increase the maintenance burden, and raise the barrier for adding"},{"line_number":194,"context_line":"new mdev device support."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"Extend the existing GPU driver to handle non-GPU mdev devices."},{"line_number":197,"context_line":"The GPU driver could be broadened to discover all mdev types, not"}],"source_content_type":"text/x-rst","patch_set":8,"id":"54f5dcf2_0f459901","line":194,"updated":"2026-06-05 14:06:58.000000000","message":"we agreed to also clasify driver based on supprot level and eventualy remove them if we do not have 1st or 3rd paty ci\n\nwe also agreed to mark all existing driver as experimetnal and evetually deprecate and remvoe them if this was not met\n\nthe genric dvier will be testable in the 1st party ci. the nvidia one will not and it is not clear that we will ever have 3rd party ci.\n\nas a result it my expection that the vendor specifc drive will evnetually be removed unless that changes and only the generic driver will remain exactly how cinder deals with this.\n\nso long term i dotn think vendor specif driver are going to be a viabel option unless there is actully suprpot and testing from teh vendor or a comuntity effrot to test that.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":191,"context_line":"driver with its own copy of the mdev sysfs logic. This is how Cyborg"},{"line_number":192,"context_line":"currently handles mediated devices. It can lead to code duplication,"},{"line_number":193,"context_line":"increase the maintenance burden, and raise the barrier for adding"},{"line_number":194,"context_line":"new mdev device support."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"Extend the existing GPU driver to handle non-GPU mdev devices."},{"line_number":197,"context_line":"The GPU driver could be broadened to discover all mdev types, not"}],"source_content_type":"text/x-rst","patch_set":8,"id":"13d3f83d_b62c7329","line":194,"in_reply_to":"54f5dcf2_0f459901","updated":"2026-06-28 18:40:42.000000000","message":"Acknowledged","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":207,"context_line":"None. The generic mdev driver produces the same driver objects"},{"line_number":208,"context_line":"(``DriverDevice``, ``DriverDeployable``, ``DriverAttachHandle``,"},{"line_number":209,"context_line":"etc.) that the existing GPU driver produces. No new database tables"},{"line_number":210,"context_line":"or schema migrations are required."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"REST API impact"},{"line_number":213,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"c03dbed6_65abf536","line":210,"updated":"2026-06-05 14:06:58.000000000","message":"we shoudl do oen change to the db\n\nhttps://github.com/openstack/cyborg/blob/master/cyborg/db/sqlalchemy/models.py#L86\nadd MDEV to the device type enum\nwe could factor that out into a sepeate spec actully as we shoudl add pci there as well\n\n\nthe genric pci adn mdev driver shoudl report the type of the device genericly\n\nwe can seperatly report the calss fo the device usign triat via the atirbute api fi we know it but type in this case shoudl nto be GPU for all mdevs as the nvida driver does today.\n\nthat does not need a microversion as we do not spcify that field as a enum filed in the api tis just an opace string","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":207,"context_line":"None. The generic mdev driver produces the same driver objects"},{"line_number":208,"context_line":"(``DriverDevice``, ``DriverDeployable``, ``DriverAttachHandle``,"},{"line_number":209,"context_line":"etc.) that the existing GPU driver produces. No new database tables"},{"line_number":210,"context_line":"or schema migrations are required."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"REST API impact"},{"line_number":213,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"d8a58ee7_456bdff5","line":210,"in_reply_to":"93b20830_a5e7f825","updated":"2026-06-28 18:40:42.000000000","message":"its an enum in the object/db\n\nit not specififed as one in the api ref\n\nhttps://docs.openstack.org/api-ref/accelerator/#id23\n\nif we had a microvrion for it we would need to filter out all devcies with the new type in older microversions.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":true,"context_lines":[{"line_number":207,"context_line":"None. The generic mdev driver produces the same driver objects"},{"line_number":208,"context_line":"(``DriverDevice``, ``DriverDeployable``, ``DriverAttachHandle``,"},{"line_number":209,"context_line":"etc.) that the existing GPU driver produces. No new database tables"},{"line_number":210,"context_line":"or schema migrations are required."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"REST API impact"},{"line_number":213,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"dcc73069_f3008ebc","line":210,"in_reply_to":"c03dbed6_65abf536","updated":"2026-06-09 14:24:38.000000000","message":"good catch, added","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":false,"context_lines":[{"line_number":207,"context_line":"None. The generic mdev driver produces the same driver objects"},{"line_number":208,"context_line":"(``DriverDevice``, ``DriverDeployable``, ``DriverAttachHandle``,"},{"line_number":209,"context_line":"etc.) that the existing GPU driver produces. No new database tables"},{"line_number":210,"context_line":"or schema migrations are required."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"REST API impact"},{"line_number":213,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"a5de8411_b652d0f2","line":210,"in_reply_to":"d8a58ee7_456bdff5","updated":"2026-06-29 13:52:59.000000000","message":"right, I mixed up the api objec with the db ones, it\u0027s correct as written","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"890a106d16b76878e3288c872ad8059b58aa0198","unresolved":true,"context_lines":[{"line_number":207,"context_line":"None. The generic mdev driver produces the same driver objects"},{"line_number":208,"context_line":"(``DriverDevice``, ``DriverDeployable``, ``DriverAttachHandle``,"},{"line_number":209,"context_line":"etc.) that the existing GPU driver produces. No new database tables"},{"line_number":210,"context_line":"or schema migrations are required."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"REST API impact"},{"line_number":213,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"93b20830_a5e7f825","line":210,"in_reply_to":"dcc73069_f3008ebc","updated":"2026-06-26 10:08:28.000000000","message":"on a second thought I think we might need a microversion here. I was reviewing the NMVe spec https://review.opendev.org/c/openstack/cyborg-specs/+/985349/17/specs/2026.2/approved/generic-nvme-driver-with-secure-cleanup.rst#648 and there it claims the device type is exposed as an enum, which seems correct https://github.com/openstack/cyborg/blob/master/cyborg/objects/device.py#L39 and changin an enum would require an API microversion right?","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":220,"context_line":"---------------"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The driver reads sysfs files during discovery; these are"},{"line_number":223,"context_line":"kernel-provided pseudo-files that do not contain user-supplied data."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"Notifications impact"},{"line_number":226,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"32243aec_b4e9947f","line":223,"updated":"2026-06-05 14:06:58.000000000","message":"i woudl jsut say none here","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":false,"context_lines":[{"line_number":220,"context_line":"---------------"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The driver reads sysfs files during discovery; these are"},{"line_number":223,"context_line":"kernel-provided pseudo-files that do not contain user-supplied data."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"Notifications impact"},{"line_number":226,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"38d02963_2757bf91","line":223,"in_reply_to":"32243aec_b4e9947f","updated":"2026-06-09 14:24:38.000000000","message":"Done","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":222,"context_line":"The driver reads sysfs files during discovery; these are"},{"line_number":223,"context_line":"kernel-provided pseudo-files that do not contain user-supplied data."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"Notifications impact"},{"line_number":226,"context_line":"--------------------"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"None. The generic mdev driver uses the same discovery-report pipeline"},{"line_number":229,"context_line":"as other Cyborg drivers and does not introduce new notification"},{"line_number":230,"context_line":"types."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"Other end user impact"},{"line_number":233,"context_line":"---------------------"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"d48ceae0_facdd488","line":231,"range":{"start_line":225,"start_character":0,"end_line":231,"end_character":1},"updated":"2026-06-05 14:06:58.000000000","message":"im temepted to delete this form the spec templat fo rnow because\ncybrog does nto currently suprpot notificaions\n\nthe baisc rpc code is there form teh inital improt form nova but it was never used by the code.\n\nwe will need to fix this for all driver genericly in a future spec but not now.\n\nbut this shoudl just say None for now because there are no common notificaions so that lawst sentice is incorrect.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":false,"context_lines":[{"line_number":222,"context_line":"The driver reads sysfs files during discovery; these are"},{"line_number":223,"context_line":"kernel-provided pseudo-files that do not contain user-supplied data."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"Notifications impact"},{"line_number":226,"context_line":"--------------------"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"None. The generic mdev driver uses the same discovery-report pipeline"},{"line_number":229,"context_line":"as other Cyborg drivers and does not introduce new notification"},{"line_number":230,"context_line":"types."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"Other end user impact"},{"line_number":233,"context_line":"---------------------"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"413465ee_38b7027a","line":231,"range":{"start_line":225,"start_character":0,"end_line":231,"end_character":1},"in_reply_to":"d48ceae0_facdd488","updated":"2026-06-09 14:24:38.000000000","message":"right, I changed it to just None.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b643e5894d15c2da287f093158f9a5ba03e7c35","unresolved":true,"context_lines":[{"line_number":283,"context_line":"This functionality requires a version of Nova that implements [1]_. Upgrading"},{"line_number":284,"context_line":"Cyborg without upgrading Nova will prevent the devices discovered by the new"},{"line_number":285,"context_line":"generic mdev driver from being usable, since Nova will ignore the mdev arqs."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Since the companion Nova spec adds the support for mdev requests from cyborg,"},{"line_number":288,"context_line":"there will be no migration path for cyborg owned devices. For nova-owned"},{"line_number":289,"context_line":"devices, resize your instance directly from a flavor with a nova-managed GPU"},{"line_number":290,"context_line":"(resources:vgpu\u003d1 in the flavor) to a flavor with a cyborg-managed MDEVs"},{"line_number":291,"context_line":"(accel:device-profile\u003dcyborg-vgpu-device-profile-name), as detailed in the nova"},{"line_number":292,"context_line":"spec [1]_."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Implementation"},{"line_number":295,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"bbbec742_4471b82a","line":293,"range":{"start_line":286,"start_character":1,"end_line":293,"end_character":1},"updated":"2026-06-05 14:06:58.000000000","message":"note i do not consider change formn nova to cybrog mangement to be an uprage activity. you are disconsitnu sue of oen feature and adotpign the use a a diffent feature in a diffent serice. that is inernetly a differnt day 2 oepration the upgade.\n\nalso resize is not implemeted for nova isntnace with cybrog device today so we shoud just remove that.","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":false,"context_lines":[{"line_number":283,"context_line":"This functionality requires a version of Nova that implements [1]_. Upgrading"},{"line_number":284,"context_line":"Cyborg without upgrading Nova will prevent the devices discovered by the new"},{"line_number":285,"context_line":"generic mdev driver from being usable, since Nova will ignore the mdev arqs."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Since the companion Nova spec adds the support for mdev requests from cyborg,"},{"line_number":288,"context_line":"there will be no migration path for cyborg owned devices. For nova-owned"},{"line_number":289,"context_line":"devices, resize your instance directly from a flavor with a nova-managed GPU"},{"line_number":290,"context_line":"(resources:vgpu\u003d1 in the flavor) to a flavor with a cyborg-managed MDEVs"},{"line_number":291,"context_line":"(accel:device-profile\u003dcyborg-vgpu-device-profile-name), as detailed in the nova"},{"line_number":292,"context_line":"spec [1]_."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Implementation"},{"line_number":295,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"c9d7981c_c8a03a8b","line":293,"range":{"start_line":286,"start_character":1,"end_line":293,"end_character":1},"in_reply_to":"2638572e_12d369d9","updated":"2026-06-30 14:01:49.000000000","message":"Done","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":true,"context_lines":[{"line_number":283,"context_line":"This functionality requires a version of Nova that implements [1]_. Upgrading"},{"line_number":284,"context_line":"Cyborg without upgrading Nova will prevent the devices discovered by the new"},{"line_number":285,"context_line":"generic mdev driver from being usable, since Nova will ignore the mdev arqs."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Since the companion Nova spec adds the support for mdev requests from cyborg,"},{"line_number":288,"context_line":"there will be no migration path for cyborg owned devices. For nova-owned"},{"line_number":289,"context_line":"devices, resize your instance directly from a flavor with a nova-managed GPU"},{"line_number":290,"context_line":"(resources:vgpu\u003d1 in the flavor) to a flavor with a cyborg-managed MDEVs"},{"line_number":291,"context_line":"(accel:device-profile\u003dcyborg-vgpu-device-profile-name), as detailed in the nova"},{"line_number":292,"context_line":"spec [1]_."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Implementation"},{"line_number":295,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"2638572e_12d369d9","line":293,"range":{"start_line":286,"start_character":1,"end_line":293,"end_character":1},"in_reply_to":"26d135f9_6c792593","updated":"2026-06-29 13:52:59.000000000","message":"right, I forgot to change this, done","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":283,"context_line":"This functionality requires a version of Nova that implements [1]_. Upgrading"},{"line_number":284,"context_line":"Cyborg without upgrading Nova will prevent the devices discovered by the new"},{"line_number":285,"context_line":"generic mdev driver from being usable, since Nova will ignore the mdev arqs."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Since the companion Nova spec adds the support for mdev requests from cyborg,"},{"line_number":288,"context_line":"there will be no migration path for cyborg owned devices. For nova-owned"},{"line_number":289,"context_line":"devices, resize your instance directly from a flavor with a nova-managed GPU"},{"line_number":290,"context_line":"(resources:vgpu\u003d1 in the flavor) to a flavor with a cyborg-managed MDEVs"},{"line_number":291,"context_line":"(accel:device-profile\u003dcyborg-vgpu-device-profile-name), as detailed in the nova"},{"line_number":292,"context_line":"spec [1]_."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Implementation"},{"line_number":295,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"26d135f9_6c792593","line":293,"range":{"start_line":286,"start_character":1,"end_line":293,"end_character":1},"in_reply_to":"b69b5fbb_edf85d55","updated":"2026-06-28 18:40:42.000000000","message":"this still applies","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"80295aea22ecc684b7582fae7784a39598ac22da","unresolved":true,"context_lines":[{"line_number":283,"context_line":"This functionality requires a version of Nova that implements [1]_. Upgrading"},{"line_number":284,"context_line":"Cyborg without upgrading Nova will prevent the devices discovered by the new"},{"line_number":285,"context_line":"generic mdev driver from being usable, since Nova will ignore the mdev arqs."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Since the companion Nova spec adds the support for mdev requests from cyborg,"},{"line_number":288,"context_line":"there will be no migration path for cyborg owned devices. For nova-owned"},{"line_number":289,"context_line":"devices, resize your instance directly from a flavor with a nova-managed GPU"},{"line_number":290,"context_line":"(resources:vgpu\u003d1 in the flavor) to a flavor with a cyborg-managed MDEVs"},{"line_number":291,"context_line":"(accel:device-profile\u003dcyborg-vgpu-device-profile-name), as detailed in the nova"},{"line_number":292,"context_line":"spec [1]_."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Implementation"},{"line_number":295,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"b69b5fbb_edf85d55","line":293,"range":{"start_line":286,"start_character":1,"end_line":293,"end_character":1},"in_reply_to":"bbbec742_4471b82a","updated":"2026-06-09 14:24:38.000000000","message":"right, I changed the resize mention, it was from the early drafts and I forgot to update that","commit_id":"96fb5f64b1592d8df0e321afb3673e5050c4febc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":25,"context_line":"Use Cases"},{"line_number":26,"context_line":"---------"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"As a Cyborg developer I would like to test mdev support easily and cheaply."},{"line_number":29,"context_line":"Adding a generic mdev driver would allow testing that functionality with fake"},{"line_number":30,"context_line":"mdev drivers like mtty or mdpy. Reusing this proven mdev discovery class"},{"line_number":31,"context_line":"in other drivers like the GPU driver means increasing the testing"},{"line_number":32,"context_line":"coverage across the project, reducing the risk of bugs and the cost of"},{"line_number":33,"context_line":"ongoing maintenance."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9b212076_639f895f","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":32},"updated":"2026-06-28 18:40:42.000000000","message":"nit: because of how this is workign with nova i think we wont be able to use the mtty sample model to test this for what its worth\n\nbasiclly neove is goign to expact a valid pci adress for the attchment handel and mtty/mdpy wont have that.\n\ni think we are goign to have to implement the mdev support in the pci-sim module\n\ni planed to do that eventually anyway so that not a blocker for me just an aside give we wont have a pci adress for mtty","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d19b3bc78e5210fe5d8f42f7231aaff5a36cc62e","unresolved":true,"context_lines":[{"line_number":25,"context_line":"Use Cases"},{"line_number":26,"context_line":"---------"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"As a Cyborg developer I would like to test mdev support easily and cheaply."},{"line_number":29,"context_line":"Adding a generic mdev driver would allow testing that functionality with fake"},{"line_number":30,"context_line":"mdev drivers like mtty or mdpy. Reusing this proven mdev discovery class"},{"line_number":31,"context_line":"in other drivers like the GPU driver means increasing the testing"},{"line_number":32,"context_line":"coverage across the project, reducing the risk of bugs and the cost of"},{"line_number":33,"context_line":"ongoing maintenance."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3b86baef_5305d666","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":32},"in_reply_to":"0a35d3bc_ed02cc11","updated":"2026-06-30 17:28:03.000000000","message":"+1, trying to use mtty with the attach_handle_info could get ugly, I\u0027ve changed mention of mtty to pci-sim","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"325d69d80d7c0f543dfcb75aed99f49529d6eefa","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Use Cases"},{"line_number":26,"context_line":"---------"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"As a Cyborg developer I would like to test mdev support easily and cheaply."},{"line_number":29,"context_line":"Adding a generic mdev driver would allow testing that functionality with fake"},{"line_number":30,"context_line":"mdev drivers like mtty or mdpy. Reusing this proven mdev discovery class"},{"line_number":31,"context_line":"in other drivers like the GPU driver means increasing the testing"},{"line_number":32,"context_line":"coverage across the project, reducing the risk of bugs and the cost of"},{"line_number":33,"context_line":"ongoing maintenance."}],"source_content_type":"text/x-rst","patch_set":10,"id":"207afd87_3894f59f","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":32},"in_reply_to":"3b86baef_5305d666","updated":"2026-06-30 19:52:33.000000000","message":"Done","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":true,"context_lines":[{"line_number":25,"context_line":"Use Cases"},{"line_number":26,"context_line":"---------"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"As a Cyborg developer I would like to test mdev support easily and cheaply."},{"line_number":29,"context_line":"Adding a generic mdev driver would allow testing that functionality with fake"},{"line_number":30,"context_line":"mdev drivers like mtty or mdpy. Reusing this proven mdev discovery class"},{"line_number":31,"context_line":"in other drivers like the GPU driver means increasing the testing"},{"line_number":32,"context_line":"coverage across the project, reducing the risk of bugs and the cost of"},{"line_number":33,"context_line":"ongoing maintenance."}],"source_content_type":"text/x-rst","patch_set":10,"id":"0a35d3bc_ed02cc11","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":32},"in_reply_to":"82e23984_8becf297","updated":"2026-06-30 14:01:49.000000000","message":"on the nova side we likely would not merge that fallback.\nbeyond that cyborg shoudl not return invalid pci assress so we woudl need to agree a sentenal values or some other encodign as part of the microversion such as the sysfs path to the partent device.\n\ni woudl prefer not to modify attach_handle_info to have a test only format for mtty style devices.","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":true,"context_lines":[{"line_number":25,"context_line":"Use Cases"},{"line_number":26,"context_line":"---------"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"As a Cyborg developer I would like to test mdev support easily and cheaply."},{"line_number":29,"context_line":"Adding a generic mdev driver would allow testing that functionality with fake"},{"line_number":30,"context_line":"mdev drivers like mtty or mdpy. Reusing this proven mdev discovery class"},{"line_number":31,"context_line":"in other drivers like the GPU driver means increasing the testing"},{"line_number":32,"context_line":"coverage across the project, reducing the risk of bugs and the cost of"},{"line_number":33,"context_line":"ongoing maintenance."}],"source_content_type":"text/x-rst","patch_set":10,"id":"82e23984_8becf297","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":32},"in_reply_to":"9b212076_639f895f","updated":"2026-06-29 13:52:59.000000000","message":"hmm the nova side I did not think it would problematic, I was thinking of implementing a fallback check in case the address is invalid to try to find an mdev device in the sys filesystem like it\u0027s proposed in the nova mtty patch series. What would be problematic is how to fill the attach_handle_info for mtty devices, so as you say we will probably need to rely on pci-sim","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":69,"context_line":"the conductor extracts only the first ``rc`` attribute to build"},{"line_number":70,"context_line":"inventory.  This means that, without changes to the conductor and"},{"line_number":71,"context_line":"the driver object model, a single deployable cannot carry"},{"line_number":72,"context_line":"inventory for multiple resource classes."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"A physical parent device may support several mdev types, each of"},{"line_number":75,"context_line":"which needs its own resource class.  There are three possible"}],"source_content_type":"text/x-rst","patch_set":10,"id":"c0b8c22c_81106ffc","line":72,"updated":"2026-06-28 18:40:42.000000000","message":"note if we dont fix this now it will mean we will need to fix it later and provider upgrade supprot via implemting a runtime reshape https://docs.openstack.org/api-ref/placement/#id86 in the future.","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":false,"context_lines":[{"line_number":69,"context_line":"the conductor extracts only the first ``rc`` attribute to build"},{"line_number":70,"context_line":"inventory.  This means that, without changes to the conductor and"},{"line_number":71,"context_line":"the driver object model, a single deployable cannot carry"},{"line_number":72,"context_line":"inventory for multiple resource classes."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"A physical parent device may support several mdev types, each of"},{"line_number":75,"context_line":"which needs its own resource class.  There are three possible"}],"source_content_type":"text/x-rst","patch_set":10,"id":"14b4cd56_5cdbb21f","line":72,"in_reply_to":"c0b8c22c_81106ffc","updated":"2026-06-29 13:52:59.000000000","message":"Acknowledged","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":86,"context_line":"   per-type inventory in the attribute list and modify the"},{"line_number":87,"context_line":"   conductor to build a multi-key inventory dict.  This also"},{"line_number":88,"context_line":"   requires making attach handle allocation type-aware (the"},{"line_number":89,"context_line":"   current query grabs any free handle on the deployable)."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"c) **Nested resource providers** -- keep one deployable per type"},{"line_number":92,"context_line":"   but introduce a device-level RP as an intermediate parent,"}],"source_content_type":"text/x-rst","patch_set":10,"id":"bde8eb61_ce3dbf5f","line":89,"updated":"2026-06-28 18:40:42.000000000","message":"b is the intended way to do this in placement.","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":false,"context_lines":[{"line_number":86,"context_line":"   per-type inventory in the attribute list and modify the"},{"line_number":87,"context_line":"   conductor to build a multi-key inventory dict.  This also"},{"line_number":88,"context_line":"   requires making attach handle allocation type-aware (the"},{"line_number":89,"context_line":"   current query grabs any free handle on the deployable)."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"c) **Nested resource providers** -- keep one deployable per type"},{"line_number":92,"context_line":"   but introduce a device-level RP as an intermediate parent,"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9b86181c_48c8b0bf","line":89,"in_reply_to":"bde8eb61_ce3dbf5f","updated":"2026-06-29 13:52:59.000000000","message":"Acknowledged","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":94,"context_line":"   ``compute-node \u003e device_\u003cpci_addr\u003e \u003e type_\u003cmdev_type\u003e``."},{"line_number":95,"context_line":"   Driver objects are unchanged but the conductor needs to create"},{"line_number":96,"context_line":"   the intermediate RP."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"This spec proposes **option (a)** for the initial implementation:"},{"line_number":99,"context_line":"the driver produces one ``DriverDevice`` per physical parent PCI"},{"line_number":100,"context_line":"device and one ``DriverDeployable`` per mdev type on that parent."},{"line_number":101,"context_line":"Each deployable maps to its own child resource provider parented"},{"line_number":102,"context_line":"to the compute node.  Options (b) and (c) can be considered in a"},{"line_number":103,"context_line":"future spec if a single-RP-per-device topology is desired."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The resulting Placement and driver object trees for a host with"},{"line_number":106,"context_line":"two parent devices are shown below::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"8f1928aa_d31c6d26","line":103,"range":{"start_line":97,"start_character":1,"end_line":103,"end_character":58},"updated":"2026-06-28 18:40:42.000000000","message":"that may be acpcatble for the initall release but if we go with A we need to implment b next cycle.\n\n\nthere are scaliableiy issue with having many resouce provider in a nested tree although those mainly manifest if their are multiple with the same resocue class in the same tree which is not the case which actully doe not change between a and b\n\nb has fewer over all resouce provider but it has the same numer for any given mdev type.","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":false,"context_lines":[{"line_number":94,"context_line":"   ``compute-node \u003e device_\u003cpci_addr\u003e \u003e type_\u003cmdev_type\u003e``."},{"line_number":95,"context_line":"   Driver objects are unchanged but the conductor needs to create"},{"line_number":96,"context_line":"   the intermediate RP."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"This spec proposes **option (a)** for the initial implementation:"},{"line_number":99,"context_line":"the driver produces one ``DriverDevice`` per physical parent PCI"},{"line_number":100,"context_line":"device and one ``DriverDeployable`` per mdev type on that parent."},{"line_number":101,"context_line":"Each deployable maps to its own child resource provider parented"},{"line_number":102,"context_line":"to the compute node.  Options (b) and (c) can be considered in a"},{"line_number":103,"context_line":"future spec if a single-RP-per-device topology is desired."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The resulting Placement and driver object trees for a host with"},{"line_number":106,"context_line":"two parent devices are shown below::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7e428000_0dc089a1","line":103,"range":{"start_line":97,"start_character":1,"end_line":103,"end_character":58},"in_reply_to":"3a7dfe52_80dd4fb4","updated":"2026-06-30 14:01:49.000000000","message":"since we have momentem i think we can start with A. was a few months ago i think i would have perfered to fix the fact that the conductor is creating the placment resouce before doing any new driver change if i had been aware of the 1 resouces class per presouce provdier limitaitons \n\nill result this for now and we can prioritse that refacotring for next cycle.","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":true,"context_lines":[{"line_number":94,"context_line":"   ``compute-node \u003e device_\u003cpci_addr\u003e \u003e type_\u003cmdev_type\u003e``."},{"line_number":95,"context_line":"   Driver objects are unchanged but the conductor needs to create"},{"line_number":96,"context_line":"   the intermediate RP."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"This spec proposes **option (a)** for the initial implementation:"},{"line_number":99,"context_line":"the driver produces one ``DriverDevice`` per physical parent PCI"},{"line_number":100,"context_line":"device and one ``DriverDeployable`` per mdev type on that parent."},{"line_number":101,"context_line":"Each deployable maps to its own child resource provider parented"},{"line_number":102,"context_line":"to the compute node.  Options (b) and (c) can be considered in a"},{"line_number":103,"context_line":"future spec if a single-RP-per-device topology is desired."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The resulting Placement and driver object trees for a host with"},{"line_number":106,"context_line":"two parent devices are shown below::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a7dfe52_80dd4fb4","line":103,"range":{"start_line":97,"start_character":1,"end_line":103,"end_character":58},"in_reply_to":"8f1928aa_d31c6d26","updated":"2026-06-29 13:52:59.000000000","message":"the reason I proposed option A in the spec is that option B requires a few more changes: to the driver objects, to the conductor manager, to attach handle allocation and possibly other places. So I was concerned that the scope of the changes required by this spec could become to big and risk not being finished in this cycle. IMO it would be good to start with option A and defer B to next cycle as mentioned, while that has the downside of having to deal with placement reshapes, I think that making the changes for option B with existing testing would be safer.","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":138,"context_line":"      +-- DriverDeployable \"mdev_0000:42:00.0_i915-GVTg_V5_4\""},{"line_number":139,"context_line":"            num_accelerators\u003d8, rc\u003dCUSTOM_MDEV_I915_GVTG_V5_4"},{"line_number":140,"context_line":"            +-- DriverAttachHandle (MDEV, asked_type\u003di915-GVTg_V5_4)  x8"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"The custom resource class name for each mdev type is derived from"},{"line_number":143,"context_line":"the type name (the directory name under"},{"line_number":144,"context_line":"``mdev_supported_types/``) using the format"}],"source_content_type":"text/x-rst","patch_set":10,"id":"a5776ec9_39bd1acb","line":141,"updated":"2026-06-28 18:40:42.000000000","message":"this will work. lonterm we will want more flexibalty thne this provide but we can leave refactorign to enabl that to a diffent spec","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":false,"context_lines":[{"line_number":138,"context_line":"      +-- DriverDeployable \"mdev_0000:42:00.0_i915-GVTg_V5_4\""},{"line_number":139,"context_line":"            num_accelerators\u003d8, rc\u003dCUSTOM_MDEV_I915_GVTG_V5_4"},{"line_number":140,"context_line":"            +-- DriverAttachHandle (MDEV, asked_type\u003di915-GVTg_V5_4)  x8"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"The custom resource class name for each mdev type is derived from"},{"line_number":143,"context_line":"the type name (the directory name under"},{"line_number":144,"context_line":"``mdev_supported_types/``) using the format"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9c234250_839dc72f","line":141,"in_reply_to":"a5776ec9_39bd1acb","updated":"2026-06-29 13:52:59.000000000","message":"Acknowledged","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":142,"context_line":"The custom resource class name for each mdev type is derived from"},{"line_number":143,"context_line":"the type name (the directory name under"},{"line_number":144,"context_line":"``mdev_supported_types/``) using the format"},{"line_number":145,"context_line":"``CUSTOM_MDEV_\u003cTYPE_NAME\u003e``.  The type name is normalized by"},{"line_number":146,"context_line":"converting hyphens to underscores and uppercasing all alphabetic"},{"line_number":147,"context_line":"characters to produce a valid Placement custom resource class"},{"line_number":148,"context_line":"name.  For example, a type named ``mtty-2`` produces the resource"},{"line_number":149,"context_line":"class ``CUSTOM_MDEV_MTTY_2``.  This allows operators to write"},{"line_number":150,"context_line":"device profiles that request specific mdev types."},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"458ef861_68c25dae","line":148,"range":{"start_line":145,"start_character":30,"end_line":148,"end_character":7},"updated":"2026-06-28 18:40:42.000000000","message":"this is more or less how the normaisation works yes but os-taits and os-resouce-classes provide a functions to do this for us so in reality we shoudl jsut call that when we are implementing this.\n\nhttps://github.com/openstack/os-resource-classes/blob/master/os_resource_classes/__init__.py#L97-L119\nhttps://github.com/openstack/os-traits/blob/master/os_traits/__init__.py#L152-L169","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":true,"context_lines":[{"line_number":142,"context_line":"The custom resource class name for each mdev type is derived from"},{"line_number":143,"context_line":"the type name (the directory name under"},{"line_number":144,"context_line":"``mdev_supported_types/``) using the format"},{"line_number":145,"context_line":"``CUSTOM_MDEV_\u003cTYPE_NAME\u003e``.  The type name is normalized by"},{"line_number":146,"context_line":"converting hyphens to underscores and uppercasing all alphabetic"},{"line_number":147,"context_line":"characters to produce a valid Placement custom resource class"},{"line_number":148,"context_line":"name.  For example, a type named ``mtty-2`` produces the resource"},{"line_number":149,"context_line":"class ``CUSTOM_MDEV_MTTY_2``.  This allows operators to write"},{"line_number":150,"context_line":"device profiles that request specific mdev types."},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"4eb41885_3fca269c","line":148,"range":{"start_line":145,"start_character":30,"end_line":148,"end_character":7},"in_reply_to":"458ef861_68c25dae","updated":"2026-06-29 13:52:59.000000000","message":"ack, I noted that this functions exist and will be used in the implementation","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":false,"context_lines":[{"line_number":142,"context_line":"The custom resource class name for each mdev type is derived from"},{"line_number":143,"context_line":"the type name (the directory name under"},{"line_number":144,"context_line":"``mdev_supported_types/``) using the format"},{"line_number":145,"context_line":"``CUSTOM_MDEV_\u003cTYPE_NAME\u003e``.  The type name is normalized by"},{"line_number":146,"context_line":"converting hyphens to underscores and uppercasing all alphabetic"},{"line_number":147,"context_line":"characters to produce a valid Placement custom resource class"},{"line_number":148,"context_line":"name.  For example, a type named ``mtty-2`` produces the resource"},{"line_number":149,"context_line":"class ``CUSTOM_MDEV_MTTY_2``.  This allows operators to write"},{"line_number":150,"context_line":"device profiles that request specific mdev types."},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"4665d450_72fa76b9","line":148,"range":{"start_line":145,"start_character":30,"end_line":148,"end_character":7},"in_reply_to":"4eb41885_3fca269c","updated":"2026-06-30 14:01:49.000000000","message":"Acknowledged","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":false,"context_lines":[{"line_number":166,"context_line":"``/sys/class/mdev_bus/\u003cpci_addr\u003e/mdev_supported_types/\u003ctype\u003e/devices/``."},{"line_number":167,"context_line":"When a ``max_instances`` value is specified in the ``device_spec``"},{"line_number":168,"context_line":"configuration for this parent/type combination, the reported total"},{"line_number":169,"context_line":"is capped to that value."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"The only trait that will be reported by the generic mdev driver is"},{"line_number":172,"context_line":"the ``OWNER_CYBORG`` trait that is common to all devices managed"}],"source_content_type":"text/x-rst","patch_set":10,"id":"20725c2e_ea295264","line":169,"updated":"2026-06-28 18:40:42.000000000","message":"ack, the exacty way that the aviabel instace work is somehwat device specific but this cover the most typical case,","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":171,"context_line":"The only trait that will be reported by the generic mdev driver is"},{"line_number":172,"context_line":"the ``OWNER_CYBORG`` trait that is common to all devices managed"},{"line_number":173,"context_line":"by Cyborg. Additional traits can be added through the"},{"line_number":174,"context_line":"``device_spec`` configuration."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":177,"context_line":"``DriverAttribute`` objects as needed. Configuration-based"}],"source_content_type":"text/x-rst","patch_set":10,"id":"386ee6f7_e44d8dd2","line":174,"updated":"2026-06-28 18:40:42.000000000","message":"we may want to note that htis would only allow adding CUSTOM_ traits\n\nstandard triats shoudl ideally be owned by the driver and added by it hwere relevent.","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":true,"context_lines":[{"line_number":171,"context_line":"The only trait that will be reported by the generic mdev driver is"},{"line_number":172,"context_line":"the ``OWNER_CYBORG`` trait that is common to all devices managed"},{"line_number":173,"context_line":"by Cyborg. Additional traits can be added through the"},{"line_number":174,"context_line":"``device_spec`` configuration."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":177,"context_line":"``DriverAttribute`` objects as needed. Configuration-based"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5a51099b_0513a74d","line":174,"in_reply_to":"1f199122_913b3220","updated":"2026-06-30 14:01:49.000000000","message":"by convetion no.\n\nwe coudl allow it but the idea of standard tratis are they are common values that should be discoverd and reported by the driver automaticlly not somethign that should require you to report.\n\nbut we could allow this perhaps defer that for nwo adn we can revisit next cycle.\n\nnova does not currntly allow it for its pci devices or via provdier.yaml\nit is posisbel to do via the placement api however so we coudl take either approch in the long term","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":true,"context_lines":[{"line_number":171,"context_line":"The only trait that will be reported by the generic mdev driver is"},{"line_number":172,"context_line":"the ``OWNER_CYBORG`` trait that is common to all devices managed"},{"line_number":173,"context_line":"by Cyborg. Additional traits can be added through the"},{"line_number":174,"context_line":"``device_spec`` configuration."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":177,"context_line":"``DriverAttribute`` objects as needed. Configuration-based"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1f199122_913b3220","line":174,"in_reply_to":"386ee6f7_e44d8dd2","updated":"2026-06-29 13:52:59.000000000","message":"couldn\u0027t we add standards traits as well via the configration? The device_spec is modelled after the nova pci option https://github.com/openstack/nova/blob/656ceb0ea209f67fcf42fc84b65fc9ac12a26893/nova/conf/pci.py#L127 and there it states that the user can configure both standard or custom traits.\n\nFrom the driver POV, I don\u0027t know if mdevs created by for example nvidia define some information that it could be used to add standard traits other than the vendor id, but I feel like that should be part of a vendor specific driver, not a generic one","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d19b3bc78e5210fe5d8f42f7231aaff5a36cc62e","unresolved":true,"context_lines":[{"line_number":171,"context_line":"The only trait that will be reported by the generic mdev driver is"},{"line_number":172,"context_line":"the ``OWNER_CYBORG`` trait that is common to all devices managed"},{"line_number":173,"context_line":"by Cyborg. Additional traits can be added through the"},{"line_number":174,"context_line":"``device_spec`` configuration."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":177,"context_line":"``DriverAttribute`` objects as needed. Configuration-based"}],"source_content_type":"text/x-rst","patch_set":10,"id":"eb103489_917e2297","line":174,"in_reply_to":"5a51099b_0513a74d","updated":"2026-06-30 17:28:03.000000000","message":"ack, then the current text is accurate since it mentions that we can add custom traits. the question of how to discover traits in the driver I feel is harder without adding any logic about vendors","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"325d69d80d7c0f543dfcb75aed99f49529d6eefa","unresolved":true,"context_lines":[{"line_number":171,"context_line":"The only trait that will be reported by the generic mdev driver is"},{"line_number":172,"context_line":"the ``OWNER_CYBORG`` trait that is common to all devices managed"},{"line_number":173,"context_line":"by Cyborg. Additional traits can be added through the"},{"line_number":174,"context_line":"``device_spec`` configuration."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"The driver also populates ``DriverControlPathID`` and"},{"line_number":177,"context_line":"``DriverAttribute`` objects as needed. Configuration-based"}],"source_content_type":"text/x-rst","patch_set":10,"id":"a3df1c41_adacbded","line":174,"in_reply_to":"eb103489_917e2297","updated":"2026-06-30 19:52:33.000000000","message":"so there are way of doing it genericly for some clases of devices\n\nfor nic for exampel nova used ethtool (via libivrt) to discover nic hardware feature flags\n\nfor cpus we use /proc/cpuinfo or lscpu via libvirt again\n\nthere are some feature flags avaibel form lspci.\n\ni think for now we can defer this but in the furure we may add the ablity to dicsover some capablits form sysfs if thre is a portabel way to do that.\n\nif not then we may need to add some vendero specific check or jsut leave this up to the admin to manulaly config but we can cross that bridge later.\n\nif the nvidia driver just becase a tiny shim that added traits and know how to do the feature discovery for nvidia gpus that would be a win but traits discovery is nto part fo the mvp for now","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":198,"context_line":"    }"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"This spec also proposes refactoring the existing GPU driver to hold an"},{"line_number":201,"context_line":"``MdevHandler`` instance and delegate mdev bus discovery to it, instead"},{"line_number":202,"context_line":"of carrying its own sysfs parsing implementation. The GPU driver will"},{"line_number":203,"context_line":"retain all NVIDIA-specific logic such as vendor name parsing,"},{"line_number":204,"context_line":"lspci-based PCI discovery, trait generation, vGPU type configuration"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ab39de38_0806cf4c","line":201,"range":{"start_line":201,"start_character":2,"end_line":201,"end_character":13},"updated":"2026-06-28 18:40:42.000000000","message":"we may want to come up with a beter name for this perhaps `MdevManger`\n\nA `handeler` is typicly a stateless callback funciton not someitng you call methods on.\n\nim ok to defer that to the implemention","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    }"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"This spec also proposes refactoring the existing GPU driver to hold an"},{"line_number":201,"context_line":"``MdevHandler`` instance and delegate mdev bus discovery to it, instead"},{"line_number":202,"context_line":"of carrying its own sysfs parsing implementation. The GPU driver will"},{"line_number":203,"context_line":"retain all NVIDIA-specific logic such as vendor name parsing,"},{"line_number":204,"context_line":"lspci-based PCI discovery, trait generation, vGPU type configuration"}],"source_content_type":"text/x-rst","patch_set":10,"id":"bbb18f9f_997d92fd","line":201,"range":{"start_line":201,"start_character":2,"end_line":201,"end_character":13},"in_reply_to":"ab39de38_0806cf4c","updated":"2026-06-29 13:52:59.000000000","message":"Acknowledged","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":204,"context_line":"lspci-based PCI discovery, trait generation, vGPU type configuration"},{"line_number":205,"context_line":"mapping, and construction of its own Cyborg driver objects. Only the"},{"line_number":206,"context_line":"raw mdev type introspection (reading ``available_instances``, ``name``,"},{"line_number":207,"context_line":"``device_api`` from sysfs) is delegated to ``MdevHandler``. As a result of the"},{"line_number":208,"context_line":"refactor, the existing methods for creating and deleting mdevs will be removed,"},{"line_number":209,"context_line":"since that functionality will be delegated completely to Nova."},{"line_number":210,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"1b5b7065_564ac7a5","line":207,"range":{"start_line":207,"start_character":45,"end_line":207,"end_character":56},"updated":"2026-06-28 18:40:42.000000000","message":"based on the description manager or tracker or introspector are more precise\n\nperhasp even `MdevBusManager` as i coudl see use haveing `PCIBusManager` and `USBBusManger` classes in the future that woudl own discovery/introspect and transformign the tool output ino dataclases so that we are not just pasing waround raw stings.  a `BusManager` in thei sense woudl effectivly be a set o f utility function for performaing operations on a give bus but the buisligc of when to do that woudl be exernalised and drive by the agent and drivers.","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":true,"context_lines":[{"line_number":204,"context_line":"lspci-based PCI discovery, trait generation, vGPU type configuration"},{"line_number":205,"context_line":"mapping, and construction of its own Cyborg driver objects. Only the"},{"line_number":206,"context_line":"raw mdev type introspection (reading ``available_instances``, ``name``,"},{"line_number":207,"context_line":"``device_api`` from sysfs) is delegated to ``MdevHandler``. As a result of the"},{"line_number":208,"context_line":"refactor, the existing methods for creating and deleting mdevs will be removed,"},{"line_number":209,"context_line":"since that functionality will be delegated completely to Nova."},{"line_number":210,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"a7a8f172_ffbc77ac","line":207,"range":{"start_line":207,"start_character":45,"end_line":207,"end_character":56},"in_reply_to":"1b5b7065_564ac7a5","updated":"2026-06-29 13:52:59.000000000","message":"I like the suggestion, it\u0027s a more precise description of the class intended responsibility. I\u0027ve updated the spec with the new name","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":false,"context_lines":[{"line_number":204,"context_line":"lspci-based PCI discovery, trait generation, vGPU type configuration"},{"line_number":205,"context_line":"mapping, and construction of its own Cyborg driver objects. Only the"},{"line_number":206,"context_line":"raw mdev type introspection (reading ``available_instances``, ``name``,"},{"line_number":207,"context_line":"``device_api`` from sysfs) is delegated to ``MdevHandler``. As a result of the"},{"line_number":208,"context_line":"refactor, the existing methods for creating and deleting mdevs will be removed,"},{"line_number":209,"context_line":"since that functionality will be delegated completely to Nova."},{"line_number":210,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"a6267817_f65a1787","line":207,"range":{"start_line":207,"start_character":45,"end_line":207,"end_character":56},"in_reply_to":"a7a8f172_ffbc77ac","updated":"2026-06-30 14:01:49.000000000","message":"Done","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":247,"context_line":"driver-specific object construction in the driver."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"The following diagram illustrates the composition relationship::"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    GenericDriver (ABC)               MdevHandler"},{"line_number":252,"context_line":"         |                        (mdev bus discovery)"},{"line_number":253,"context_line":"         |                                ^"},{"line_number":254,"context_line":"         |                                | holds instance"},{"line_number":255,"context_line":"    +-----------+------+                  |"},{"line_number":256,"context_line":"    |                  |                  |"},{"line_number":257,"context_line":"  MdevDriver     NVIDIAGPUDriver -+------+"},{"line_number":258,"context_line":"  (generic)      (via GPUDriver)  |"},{"line_number":259,"context_line":"    |                  |          |"},{"line_number":260,"context_line":"    +-- discover()     +-- discover()"},{"line_number":261,"context_line":"        uses               uses"},{"line_number":262,"context_line":"        _mdev_handler      _mdev_handler"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Configuration will be provided through a new ``[mdev]`` section in"},{"line_number":265,"context_line":"``cyborg.conf``. The ``device_spec`` option accepts a JSON list of"},{"line_number":266,"context_line":"objects, each describing an mdev type to manage. Only mdevs contained in"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d34dc28b_f5f2a79e","line":263,"range":{"start_line":250,"start_character":1,"end_line":263,"end_character":1},"updated":"2026-06-28 18:40:42.000000000","message":"```suggestion\n\n                       +----------------------+\n                       |  GenericDriver (ABC) |\n                       +----------+-----------+\n                                  |\n               +------------------+------------------+\n               | (Is-a)                              | (Is-a)\n               v                                     v\n    +--------------------+                 +--------------------+\n    |    MdevDriver      |                 |     GPUDriver      |\n    |    (generic)       |                 +---------+----------+\n    +----------+---------+                           | (Is-a)\n               |                                     v\n               |                           +--------------------+\n               |                           |  NVIDIAGPUDriver   |\n               |                           +---------+----------+\n               | (Has-a)                             | (Has-a)\n               v                                     v\n    +--------------------+                 +--------------------+\n    |    MdevHandler     |                 |    MdevHandler     |\n    |   (Instance #1)    |                 |   (Instance #2)    |\n    +--------------------+                 +--------------------+\n\n```\n\nthe discovery would look somethign like this\n```\nAgentManager             ResourceTracker            acc_driver          _mdev_handler\n      |                          |                (Mdev / NVIDIA)     (Driver\u0027s Instance)\n      |                          |                       |                     |\n      | periodic_task            |                       |                     |\n      |---\\                      |                       |                     |\n      |   | update_available_    |                       |                     |\n      |   | resource()           |                       |                     |\n      |\u003c--/                      |                       |                     |\n      |                          |                       |                     |\n      | update_usage(context)    |                       |                     |\n      |-------------------------\u003e|                       |                     |\n      |                          |                       |                     |\n      |                          |\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\   |                     |\n      |                          | LOOP:             |   |                     |\n      |                          | for acc_driver    |   |                     |\n      |                          | in acc_drivers    |   |                     |\n      |                          |\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d/   |                     |\n      |                          |---|                   |                     |\n      |                          |   |                   |                     |\n      |                          |   | discover()        |                     |\n      |                          |   |------------------\u003e|                     |\n      |                          |   |                   |                     |\n      |                          |   |                   | discover() / scan() |\n      |                          |   |                   |--------------------\u003e|\n      |                          |   |                   |                     | -- Scans sysfs/bus\n      |                          |   |                   |   raw_device_data   |\n      |                          |   |                   |\u003c--------------------|\n      |                          |   |                   |                     |\n      |                          |   |   discovered_list |                     |\n      |                          |   |\u003c------------------|                     |\n      |                          |   |                   |                     |\n      |                          |   |---\\               |                     |\n      |                          |   |   | acc_list.     |                     |\n      |                          |   |   | extend(...)   |                     |\n      |                          |   |\u003c--/               |                     |\n      |                          |\u003d\u003d\u003d|\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\                     |\n      |                          | END LOOP              |                     |\n      |                          |\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d/                     |\n      |                          |                       |                     |\n      |                          |---\\                   |                     |\n      |                          |   | Audit \u0026 Claim     |                     |\n      |                          |   | local resources   |                     |\n      |                          |\u003c--/                   |                     |\n      | return                   |                       |                     |\n      |\u003c-------------------------|                       |                     |\n```","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":false,"context_lines":[{"line_number":247,"context_line":"driver-specific object construction in the driver."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"The following diagram illustrates the composition relationship::"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    GenericDriver (ABC)               MdevHandler"},{"line_number":252,"context_line":"         |                        (mdev bus discovery)"},{"line_number":253,"context_line":"         |                                ^"},{"line_number":254,"context_line":"         |                                | holds instance"},{"line_number":255,"context_line":"    +-----------+------+                  |"},{"line_number":256,"context_line":"    |                  |                  |"},{"line_number":257,"context_line":"  MdevDriver     NVIDIAGPUDriver -+------+"},{"line_number":258,"context_line":"  (generic)      (via GPUDriver)  |"},{"line_number":259,"context_line":"    |                  |          |"},{"line_number":260,"context_line":"    +-- discover()     +-- discover()"},{"line_number":261,"context_line":"        uses               uses"},{"line_number":262,"context_line":"        _mdev_handler      _mdev_handler"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Configuration will be provided through a new ``[mdev]`` section in"},{"line_number":265,"context_line":"``cyborg.conf``. The ``device_spec`` option accepts a JSON list of"},{"line_number":266,"context_line":"objects, each describing an mdev type to manage. Only mdevs contained in"}],"source_content_type":"text/x-rst","patch_set":10,"id":"893b650b_d13888df","line":263,"range":{"start_line":250,"start_character":1,"end_line":263,"end_character":1},"in_reply_to":"d0e6df21_d85707bc","updated":"2026-06-30 14:01:49.000000000","message":"Done","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":true,"context_lines":[{"line_number":247,"context_line":"driver-specific object construction in the driver."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"The following diagram illustrates the composition relationship::"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    GenericDriver (ABC)               MdevHandler"},{"line_number":252,"context_line":"         |                        (mdev bus discovery)"},{"line_number":253,"context_line":"         |                                ^"},{"line_number":254,"context_line":"         |                                | holds instance"},{"line_number":255,"context_line":"    +-----------+------+                  |"},{"line_number":256,"context_line":"    |                  |                  |"},{"line_number":257,"context_line":"  MdevDriver     NVIDIAGPUDriver -+------+"},{"line_number":258,"context_line":"  (generic)      (via GPUDriver)  |"},{"line_number":259,"context_line":"    |                  |          |"},{"line_number":260,"context_line":"    +-- discover()     +-- discover()"},{"line_number":261,"context_line":"        uses               uses"},{"line_number":262,"context_line":"        _mdev_handler      _mdev_handler"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Configuration will be provided through a new ``[mdev]`` section in"},{"line_number":265,"context_line":"``cyborg.conf``. The ``device_spec`` option accepts a JSON list of"},{"line_number":266,"context_line":"objects, each describing an mdev type to manage. Only mdevs contained in"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d0e6df21_d85707bc","line":263,"range":{"start_line":250,"start_character":1,"end_line":263,"end_character":1},"in_reply_to":"d34dc28b_f5f2a79e","updated":"2026-06-29 13:52:59.000000000","message":"thanks, I\u0027ve updated the diagram and added the new one, since it might add some clarity for reviewers","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":284,"context_line":"Example ``cyborg.conf`` snippet::"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    [mdev]"},{"line_number":287,"context_line":"    device_spec \u003d ["},{"line_number":288,"context_line":"        {"},{"line_number":289,"context_line":"            \"address\": \"0000:41:00.0\","},{"line_number":290,"context_line":"            \"mdev_type\": \"nvidia-319\","},{"line_number":291,"context_line":"            \"max_instances\": 8,"},{"line_number":292,"context_line":"            \"resource_class\": \"VGPU\","},{"line_number":293,"context_line":"            \"traits\": [\"CUSTOM_NVIDIA_V100\", \"HW_GPU_API_VULKAN\"]"},{"line_number":294,"context_line":"        },"},{"line_number":295,"context_line":"        {"},{"line_number":296,"context_line":"            \"address\": \"0000:42:00.0\","},{"line_number":297,"context_line":"            \"mdev_type\": \"i915-GVTg_V5_4\""},{"line_number":298,"context_line":"        }"},{"line_number":299,"context_line":"    ]"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"The new driver will be enabled via the existing"},{"line_number":302,"context_line":"``[agent]enabled_drivers`` option."},{"line_number":303,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ff796226_8409ce10","line":300,"range":{"start_line":287,"start_character":1,"end_line":300,"end_character":1},"updated":"2026-06-28 18:40:42.000000000","message":"ok so this normalise the convifution options betwene the new nvme dirver and the mdev dirver and nova pci pashthough funtionatliy.\n\ni think that is good.\n\nthere are some downside to that format but if we do deceid to change it in the future we can look at a better representation taht woudl work for all the drivers\n\none of them bing that when we use json types in oslo.config im not sure you can have it on multipel lieks with out eitehr quotating or doeign escaps\n```\n    device_spec \u003d [ \\\n        { \\\n            \"address\": \"0000:41:00.0\",\\ \n            \"mdev_type\": \"nvidia-319\", \\\n            \"max_instances\": 8, \\\n            \"resource_class\": \"VGPU\", \\\n            \"traits\": [\"CUSTOM_NVIDIA_V100\", \"HW_GPU_API_VULKAN\"] \\\n        }, \\\n        { \\\n            \"address\": \"0000:42:00.0\", \\\n            \"mdev_type\": \"i915-GVTg_V5_4\" \\\n        } \\\n    ] \n```\n\nwe may have to play with this to see what actully works\n\ni knwo json type are supproted im just not sure exactly what the parsing rules are off hand","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d19b3bc78e5210fe5d8f42f7231aaff5a36cc62e","unresolved":false,"context_lines":[{"line_number":284,"context_line":"Example ``cyborg.conf`` snippet::"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    [mdev]"},{"line_number":287,"context_line":"    device_spec \u003d ["},{"line_number":288,"context_line":"        {"},{"line_number":289,"context_line":"            \"address\": \"0000:41:00.0\","},{"line_number":290,"context_line":"            \"mdev_type\": \"nvidia-319\","},{"line_number":291,"context_line":"            \"max_instances\": 8,"},{"line_number":292,"context_line":"            \"resource_class\": \"VGPU\","},{"line_number":293,"context_line":"            \"traits\": [\"CUSTOM_NVIDIA_V100\", \"HW_GPU_API_VULKAN\"]"},{"line_number":294,"context_line":"        },"},{"line_number":295,"context_line":"        {"},{"line_number":296,"context_line":"            \"address\": \"0000:42:00.0\","},{"line_number":297,"context_line":"            \"mdev_type\": \"i915-GVTg_V5_4\""},{"line_number":298,"context_line":"        }"},{"line_number":299,"context_line":"    ]"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"The new driver will be enabled via the existing"},{"line_number":302,"context_line":"``[agent]enabled_drivers`` option."},{"line_number":303,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"6265c313_e1a4309d","line":300,"range":{"start_line":287,"start_character":1,"end_line":300,"end_character":1},"in_reply_to":"f5eac38c_3751ded3","updated":"2026-06-30 17:28:03.000000000","message":"Done","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":true,"context_lines":[{"line_number":284,"context_line":"Example ``cyborg.conf`` snippet::"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    [mdev]"},{"line_number":287,"context_line":"    device_spec \u003d ["},{"line_number":288,"context_line":"        {"},{"line_number":289,"context_line":"            \"address\": \"0000:41:00.0\","},{"line_number":290,"context_line":"            \"mdev_type\": \"nvidia-319\","},{"line_number":291,"context_line":"            \"max_instances\": 8,"},{"line_number":292,"context_line":"            \"resource_class\": \"VGPU\","},{"line_number":293,"context_line":"            \"traits\": [\"CUSTOM_NVIDIA_V100\", \"HW_GPU_API_VULKAN\"]"},{"line_number":294,"context_line":"        },"},{"line_number":295,"context_line":"        {"},{"line_number":296,"context_line":"            \"address\": \"0000:42:00.0\","},{"line_number":297,"context_line":"            \"mdev_type\": \"i915-GVTg_V5_4\""},{"line_number":298,"context_line":"        }"},{"line_number":299,"context_line":"    ]"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"The new driver will be enabled via the existing"},{"line_number":302,"context_line":"``[agent]enabled_drivers`` option."},{"line_number":303,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"f5eac38c_3751ded3","line":300,"range":{"start_line":287,"start_character":1,"end_line":300,"end_character":1},"in_reply_to":"ff796226_8409ce10","updated":"2026-06-29 13:52:59.000000000","message":"actually, it looks like I got the format wrong, it\u0027s slightly different than the one used in nova https://docs.openstack.org/nova/latest/admin/pci-passthrough.html#support-for-multiple-types-of-vfs and the one proposed in the nvme spec. Instead of a list of objects, it should be a multiline string, with one `device_spec` entry per device, I\u0027ve corrected it now","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":311,"context_line":"``address`` field in each ``device_spec`` entry can be used to"},{"line_number":312,"context_line":"avoid overlap. Nonetheless, an additional check will be"},{"line_number":313,"context_line":"implemented in the conductor to catch duplicated devices and warn the"},{"line_number":314,"context_line":"operator that the configuration should be revised."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"Alternatives"},{"line_number":317,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"a09b884c_3691b10e","line":314,"updated":"2026-06-28 18:40:42.000000000","message":"so i think we shoudl be modifying the resocue tracker to detec and prevent this but im ok with puting that into its own feature","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":false,"context_lines":[{"line_number":311,"context_line":"``address`` field in each ``device_spec`` entry can be used to"},{"line_number":312,"context_line":"avoid overlap. Nonetheless, an additional check will be"},{"line_number":313,"context_line":"implemented in the conductor to catch duplicated devices and warn the"},{"line_number":314,"context_line":"operator that the configuration should be revised."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"Alternatives"},{"line_number":317,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d7f6a778_599f46ac","line":314,"in_reply_to":"a09b884c_3691b10e","updated":"2026-06-29 13:52:59.000000000","message":"Acknowledged","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bef30da9fe1cd7e71909759a191f22132679de40","unresolved":true,"context_lines":[{"line_number":341,"context_line":"``MDEV`` to that set so the generic mdev driver can report the"},{"line_number":342,"context_line":"device type accurately instead of labelling every mediated device"},{"line_number":343,"context_line":"as ``GPU`` the way the NVIDIA driver does today.  For completeness"},{"line_number":344,"context_line":"this spec also proposes adding ``PCI`` for the generic PCI driver."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"No new database tables or schema migrations are required; the"},{"line_number":347,"context_line":"``type`` field is an opaque string in the API, so the new value"}],"source_content_type":"text/x-rst","patch_set":10,"id":"6b25e365_54dc4fb1","line":344,"updated":"2026-06-28 18:40:42.000000000","message":"+1","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ef8effde9645e95c0f27b85b41cd6d904195c591","unresolved":false,"context_lines":[{"line_number":341,"context_line":"``MDEV`` to that set so the generic mdev driver can report the"},{"line_number":342,"context_line":"device type accurately instead of labelling every mediated device"},{"line_number":343,"context_line":"as ``GPU`` the way the NVIDIA driver does today.  For completeness"},{"line_number":344,"context_line":"this spec also proposes adding ``PCI`` for the generic PCI driver."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"No new database tables or schema migrations are required; the"},{"line_number":347,"context_line":"``type`` field is an opaque string in the API, so the new value"}],"source_content_type":"text/x-rst","patch_set":10,"id":"f058b74a_209be0ea","line":344,"in_reply_to":"6b25e365_54dc4fb1","updated":"2026-06-29 13:52:59.000000000","message":"Acknowledged","commit_id":"319ff579bbc1d2ff4f9e54e6ebb67c4b1fcd04d0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":true,"context_lines":[{"line_number":18,"context_line":"NVIDIA GPU driver, where mdev functionality is tightly coupled to"},{"line_number":19,"context_line":"GPU-specific code. This spec proposes a standalone, generic mdev driver"},{"line_number":20,"context_line":"that can discover and report any Linux kernel mdev-capable device,"},{"line_number":21,"context_line":"along with a reusable ``MdevBusManager`` class that encapsulates mdev bus"},{"line_number":22,"context_line":"discovery and eliminates code duplication between the new driver and"},{"line_number":23,"context_line":"the existing GPU driver."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"3d5680fd_3f5227e6","line":21,"range":{"start_line":21,"start_character":24,"end_line":21,"end_character":38},"updated":"2026-06-30 14:01:49.000000000","message":"note the `BusManager` concept is part of what i hope will evolve into the new generic driver framework\n\nso im glad to see it starting in this series since we dicssued starting this work in the ptg.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":false,"context_lines":[{"line_number":53,"context_line":"creation nor deletion of mdevs, instead will delegate that to"},{"line_number":54,"context_line":"Nova [1]_."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"The proposed generic mdev driver holds an ``MdevBusManager`` instance as"},{"line_number":57,"context_line":"a private attribute, set during ``__init__``. In its ``discover()``"},{"line_number":58,"context_line":"method, the driver calls ``MdevBusManager.discover_parent_devices()`` to"},{"line_number":59,"context_line":"enumerate mdev-capable PCI devices, then calls"}],"source_content_type":"text/x-rst","patch_set":11,"id":"45f104f1_932ca513","line":56,"range":{"start_line":56,"start_character":44,"end_line":56,"end_character":58},"updated":"2026-06-30 14:01:49.000000000","message":"once i finish my manged mode serise for the pci deriver i may start on https://bugs.launchpad.net/openstack-cyborg/+bug/2152545 and create a PciBusManager following the pattern established in yoru series but i may keep that as a protype for next cycle.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"971e5649c9afda2c91267e62a988722df6a7a8e3","unresolved":false,"context_lines":[{"line_number":144,"context_line":"``mdev_supported_types/``) using the format"},{"line_number":145,"context_line":"``CUSTOM_MDEV_\u003cTYPE_NAME\u003e``.  The type name is normalized by"},{"line_number":146,"context_line":"converting hyphens to underscores and uppercasing all alphabetic"},{"line_number":147,"context_line":"characters to produce a valid Placement custom resource class"},{"line_number":148,"context_line":"name. There exists functions to do this normalization in the os-traits and"},{"line_number":149,"context_line":"os-resource-classes libraries that will be used for this purpose. As an"},{"line_number":150,"context_line":"example, a type named ``mtty-2`` produces the resource class"}],"source_content_type":"text/x-rst","patch_set":11,"id":"0b2ebd4d_62a83ea0","line":147,"updated":"2026-06-29 14:13:27.000000000","message":"The resource class normalization (lines 142-152) references os-traits/os-resource-classes functions but does not specify handling of mdev type names that could exceed the Placement custom resource class length limit or produce collisions after normalization.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Mdev type names vary by vendor and can be long (e.g. some NVIDIA vGPU type strings). Stating the truncation/collision policy up front avoids a fragile normalization implementation and surprised operators at deploy time.\n\n**Recommendation**:\nAdd a sentence noting that normalization uses the os-resource-classes sanitization helper (which enforces the CUSTOM_ prefix, the [A-Z0-9_] character set, and the length limit), and describe the behavior if two distinct type names normalize to the same resource class (error out at discovery rather than silently collide).","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":true,"context_lines":[{"line_number":144,"context_line":"``mdev_supported_types/``) using the format"},{"line_number":145,"context_line":"``CUSTOM_MDEV_\u003cTYPE_NAME\u003e``.  The type name is normalized by"},{"line_number":146,"context_line":"converting hyphens to underscores and uppercasing all alphabetic"},{"line_number":147,"context_line":"characters to produce a valid Placement custom resource class"},{"line_number":148,"context_line":"name. There exists functions to do this normalization in the os-traits and"},{"line_number":149,"context_line":"os-resource-classes libraries that will be used for this purpose. As an"},{"line_number":150,"context_line":"example, a type named ``mtty-2`` produces the resource class"}],"source_content_type":"text/x-rst","patch_set":11,"id":"bac000ae_c974f2a1","line":147,"in_reply_to":"0b2ebd4d_62a83ea0","updated":"2026-06-30 14:01:49.000000000","message":"they shoudl not exceed the lenght limit but its a valid concner\nfor now lets defer and jsut supprot passing a resocue_class via the devstack so that operator can override the default generated one if tha that happens.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d19b3bc78e5210fe5d8f42f7231aaff5a36cc62e","unresolved":false,"context_lines":[{"line_number":144,"context_line":"``mdev_supported_types/``) using the format"},{"line_number":145,"context_line":"``CUSTOM_MDEV_\u003cTYPE_NAME\u003e``.  The type name is normalized by"},{"line_number":146,"context_line":"converting hyphens to underscores and uppercasing all alphabetic"},{"line_number":147,"context_line":"characters to produce a valid Placement custom resource class"},{"line_number":148,"context_line":"name. There exists functions to do this normalization in the os-traits and"},{"line_number":149,"context_line":"os-resource-classes libraries that will be used for this purpose. As an"},{"line_number":150,"context_line":"example, a type named ``mtty-2`` produces the resource class"}],"source_content_type":"text/x-rst","patch_set":11,"id":"b9a2fd35_c07601d9","line":147,"in_reply_to":"bac000ae_c974f2a1","updated":"2026-06-30 17:28:03.000000000","message":"Acknowledged","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"971e5649c9afda2c91267e62a988722df6a7a8e3","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        \u0027attach_handle_type\u0027: \u0027MDEV\u0027,"},{"line_number":192,"context_line":"        \u0027attach_handle_uuid\u0027: \u002791ac1606-427e-44bb-8233-f4ff4bf3d241\u0027,"},{"line_number":193,"context_line":"        \u0027attach_handle_info\u0027: {"},{"line_number":194,"context_line":"            \u0027asked_type\u0027: \u0027mtty\u0027,"},{"line_number":195,"context_line":"            \"domain\": \"0000\","},{"line_number":196,"context_line":"            \"bus\": \"10\","},{"line_number":197,"context_line":"            \"device\": \"1\","}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba775d84_b4c24962","line":194,"updated":"2026-06-29 14:13:27.000000000","message":"The asked_type value in the attach handle example (\u0027mtty\u0027) does not match the type names used everywhere else in the spec (mtty-2, mtty-4, i915-GVTg_V5_4). The topology diagrams on lines 130 and 134 show asked_type\u003dmtty-2 and asked_type\u003dmtty-4.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: An ambiguous asked_type that omits the type variant would make the attach handle insufficient for Nova to create the correct mdev instance, since mtty-2 and mtty-4 are distinct types. This undercuts the spec\u0027s stated goal that Nova use asked_type to create the right mdev.\n\n**Suggestion**:\nUse the full, exact mdev type name in asked_type. Change the example to \u0027asked_type\u0027: \u0027mtty-2\u0027 (and align the parent PCI address with the 0000:41:00.0 example used in the diagrams) so the example is consistent with the topology section and unambiguous for Nova.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"971e5649c9afda2c91267e62a988722df6a7a8e3","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        \u0027attach_handle_type\u0027: \u0027MDEV\u0027,"},{"line_number":192,"context_line":"        \u0027attach_handle_uuid\u0027: \u002791ac1606-427e-44bb-8233-f4ff4bf3d241\u0027,"},{"line_number":193,"context_line":"        \u0027attach_handle_info\u0027: {"},{"line_number":194,"context_line":"            \u0027asked_type\u0027: \u0027mtty\u0027,"},{"line_number":195,"context_line":"            \"domain\": \"0000\","},{"line_number":196,"context_line":"            \"bus\": \"10\","},{"line_number":197,"context_line":"            \"device\": \"1\","}],"source_content_type":"text/x-rst","patch_set":11,"id":"80381e88_7e4bd532","line":194,"updated":"2026-06-29 14:13:27.000000000","message":"The attach handle example on lines 190-200 is shown as a Python dict literal (single quotes, a trailing comma after \u0027function\u0027: \u00270\u0027), not valid JSON. It mixes single-quoted and double-quoted keys and ends with a trailing comma, which no JSON parser accepts.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: The example is presented as a data-structure/JSON block but is neither valid JSON nor runnable Python. Readers may copy it verbatim into config or tests and hit parse errors, and its inconsistency with the double-quoted device_spec examples (lines 351-352) is confusing.\n\n**Suggestion**:\nDecide on one representation and make it internally consistent. If JSON, use double quotes throughout and remove the trailing comma. If it is intentionally a Python dict repr, label the code block clearly (e.g. \u0027Python dict\u0027) and keep quote style consistent. Given the [mdev] device_spec uses JSON, aligning this example to JSON is preferable.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d19b3bc78e5210fe5d8f42f7231aaff5a36cc62e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        \u0027attach_handle_type\u0027: \u0027MDEV\u0027,"},{"line_number":192,"context_line":"        \u0027attach_handle_uuid\u0027: \u002791ac1606-427e-44bb-8233-f4ff4bf3d241\u0027,"},{"line_number":193,"context_line":"        \u0027attach_handle_info\u0027: {"},{"line_number":194,"context_line":"            \u0027asked_type\u0027: \u0027mtty\u0027,"},{"line_number":195,"context_line":"            \"domain\": \"0000\","},{"line_number":196,"context_line":"            \"bus\": \"10\","},{"line_number":197,"context_line":"            \"device\": \"1\","}],"source_content_type":"text/x-rst","patch_set":11,"id":"c7cdf158_33e4bf44","line":194,"in_reply_to":"33a761d6_922b6acf","updated":"2026-06-30 17:28:03.000000000","message":"fair, it\u0027s a small change I\u0027ll fix it in the next patchset","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d19b3bc78e5210fe5d8f42f7231aaff5a36cc62e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        \u0027attach_handle_type\u0027: \u0027MDEV\u0027,"},{"line_number":192,"context_line":"        \u0027attach_handle_uuid\u0027: \u002791ac1606-427e-44bb-8233-f4ff4bf3d241\u0027,"},{"line_number":193,"context_line":"        \u0027attach_handle_info\u0027: {"},{"line_number":194,"context_line":"            \u0027asked_type\u0027: \u0027mtty\u0027,"},{"line_number":195,"context_line":"            \"domain\": \"0000\","},{"line_number":196,"context_line":"            \"bus\": \"10\","},{"line_number":197,"context_line":"            \"device\": \"1\","}],"source_content_type":"text/x-rst","patch_set":11,"id":"51650ad3_ff4fd584","line":194,"in_reply_to":"6a30e5d4_059aafbe","updated":"2026-06-30 17:28:03.000000000","message":"makes sense, done","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":true,"context_lines":[{"line_number":191,"context_line":"        \u0027attach_handle_type\u0027: \u0027MDEV\u0027,"},{"line_number":192,"context_line":"        \u0027attach_handle_uuid\u0027: \u002791ac1606-427e-44bb-8233-f4ff4bf3d241\u0027,"},{"line_number":193,"context_line":"        \u0027attach_handle_info\u0027: {"},{"line_number":194,"context_line":"            \u0027asked_type\u0027: \u0027mtty\u0027,"},{"line_number":195,"context_line":"            \"domain\": \"0000\","},{"line_number":196,"context_line":"            \"bus\": \"10\","},{"line_number":197,"context_line":"            \"device\": \"1\","}],"source_content_type":"text/x-rst","patch_set":11,"id":"33a761d6_922b6acf","line":194,"in_reply_to":"80381e88_7e4bd532","updated":"2026-06-30 14:01:49.000000000","message":"nit: this is technialy true json requires `\"` not `\u0027` and cant have trailing commas\n\nbut i think this is fine to update if you want too but not a blocker.\n\nits undersandable as  but feel free to correct.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":true,"context_lines":[{"line_number":191,"context_line":"        \u0027attach_handle_type\u0027: \u0027MDEV\u0027,"},{"line_number":192,"context_line":"        \u0027attach_handle_uuid\u0027: \u002791ac1606-427e-44bb-8233-f4ff4bf3d241\u0027,"},{"line_number":193,"context_line":"        \u0027attach_handle_info\u0027: {"},{"line_number":194,"context_line":"            \u0027asked_type\u0027: \u0027mtty\u0027,"},{"line_number":195,"context_line":"            \"domain\": \"0000\","},{"line_number":196,"context_line":"            \"bus\": \"10\","},{"line_number":197,"context_line":"            \"device\": \"1\","}],"source_content_type":"text/x-rst","patch_set":11,"id":"6a30e5d4_059aafbe","line":194,"in_reply_to":"ba775d84_b4c24962","updated":"2026-06-30 14:01:49.000000000","message":"this is also technially valid \n\n `\"asked_type\": \"mtty-2\"`\n \n woudl be more consitent","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"971e5649c9afda2c91267e62a988722df6a7a8e3","unresolved":false,"context_lines":[{"line_number":337,"context_line":"  (e.g. ``nvidia-319``)."},{"line_number":338,"context_line":"* ``max_instances`` *(optional)* -- maximum number of mdev"},{"line_number":339,"context_line":"  instances the driver may report for this parent/type"},{"line_number":340,"context_line":"  combination.  Defaults to the value advertised by the kernel"},{"line_number":341,"context_line":"  in ``available_instances``."},{"line_number":342,"context_line":"* ``resource_class`` *(optional)* -- custom Placement resource"},{"line_number":343,"context_line":"  class.  Defaults to ``MDEV``."}],"source_content_type":"text/x-rst","patch_set":11,"id":"24ff22b2_93f05c57","line":340,"updated":"2026-06-29 14:13:27.000000000","message":"The max_instances default semantics are ambiguous. The config field (line 340) defaults it to the kernel\u0027s available_instances, but the Inventory counting section (lines 157-171) defines total \u003d available_instances + created_instances, with max_instances capping the reported total.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: available_instances is a momentary free-capacity value that shrinks as mdevs are created; using it as the default max_instances would make the reported total shrink over time and conflict with the total formula, misleading operators about expected capacity.\n\n**Suggestion**:\nClarify the default. Either define the default max_instances as the kernel\u0027s static creation maximum (the value of available_instances when no instances of that type exist yet) or state explicitly that an unset max_instances means \u0027no cap, use available+created\u0027. Reference the total formula on lines 164-171 so the two sections agree.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":true,"context_lines":[{"line_number":337,"context_line":"  (e.g. ``nvidia-319``)."},{"line_number":338,"context_line":"* ``max_instances`` *(optional)* -- maximum number of mdev"},{"line_number":339,"context_line":"  instances the driver may report for this parent/type"},{"line_number":340,"context_line":"  combination.  Defaults to the value advertised by the kernel"},{"line_number":341,"context_line":"  in ``available_instances``."},{"line_number":342,"context_line":"* ``resource_class`` *(optional)* -- custom Placement resource"},{"line_number":343,"context_line":"  class.  Defaults to ``MDEV``."}],"source_content_type":"text/x-rst","patch_set":11,"id":"2520eea1_b233f2dd","line":340,"in_reply_to":"24ff22b2_93f05c57","updated":"2026-06-30 14:01:49.000000000","message":"a better way to phase this si to say that it defaults to None meaning no limit is placed on the reported instances.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d19b3bc78e5210fe5d8f42f7231aaff5a36cc62e","unresolved":true,"context_lines":[{"line_number":337,"context_line":"  (e.g. ``nvidia-319``)."},{"line_number":338,"context_line":"* ``max_instances`` *(optional)* -- maximum number of mdev"},{"line_number":339,"context_line":"  instances the driver may report for this parent/type"},{"line_number":340,"context_line":"  combination.  Defaults to the value advertised by the kernel"},{"line_number":341,"context_line":"  in ``available_instances``."},{"line_number":342,"context_line":"* ``resource_class`` *(optional)* -- custom Placement resource"},{"line_number":343,"context_line":"  class.  Defaults to ``MDEV``."}],"source_content_type":"text/x-rst","patch_set":11,"id":"c08a020a_45a962b5","line":340,"in_reply_to":"2520eea1_b233f2dd","updated":"2026-06-30 17:28:03.000000000","message":"thanks, done","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"325d69d80d7c0f543dfcb75aed99f49529d6eefa","unresolved":false,"context_lines":[{"line_number":337,"context_line":"  (e.g. ``nvidia-319``)."},{"line_number":338,"context_line":"* ``max_instances`` *(optional)* -- maximum number of mdev"},{"line_number":339,"context_line":"  instances the driver may report for this parent/type"},{"line_number":340,"context_line":"  combination.  Defaults to the value advertised by the kernel"},{"line_number":341,"context_line":"  in ``available_instances``."},{"line_number":342,"context_line":"* ``resource_class`` *(optional)* -- custom Placement resource"},{"line_number":343,"context_line":"  class.  Defaults to ``MDEV``."}],"source_content_type":"text/x-rst","patch_set":11,"id":"d2bbaf0b_8a38bc77","line":340,"in_reply_to":"c08a020a_45a962b5","updated":"2026-06-30 19:52:33.000000000","message":"Done","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"971e5649c9afda2c91267e62a988722df6a7a8e3","unresolved":false,"context_lines":[{"line_number":340,"context_line":"  combination.  Defaults to the value advertised by the kernel"},{"line_number":341,"context_line":"  in ``available_instances``."},{"line_number":342,"context_line":"* ``resource_class`` *(optional)* -- custom Placement resource"},{"line_number":343,"context_line":"  class.  Defaults to ``MDEV``."},{"line_number":344,"context_line":"* ``traits`` *(optional)* -- list of additional Placement traits"},{"line_number":345,"context_line":"  to set on the resource provider"},{"line_number":346,"context_line":"  (e.g. ``[\"CUSTOM_GPU\", \"HW_GPU_API_VULKAN\"]``)."}],"source_content_type":"text/x-rst","patch_set":11,"id":"d30d5d0b_3a58e886","line":343,"updated":"2026-06-29 14:13:27.000000000","message":"The resource_class default is internally contradictory. The config section states resource_class \u0027Defaults to MDEV\u0027, but the Placement topology section derives CUSTOM_MDEV_\u003cTYPE_NAME\u003e for every mdev type and the diagrams show rc\u003dCUSTOM_MDEV_MTTY_2 etc.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Implementers and operators will be unsure whether the unconfigured resource class is the bare \u0027MDEV\u0027 or the derived \u0027CUSTOM_MDEV_\u003cTYPE\u003e\u0027. A bare MDEV default also collides across all mdev types on a host and violates the Placement CUSTOM_ namespace, which could cause incorrect inventory accounting.\n\n**Priority**: Before merge\n**Why This Matters**: The resource class is what Placement uses to match device profiles to inventory. An ambiguous or colliding default would make per-type selection impossible for operators who rely on the default, directly undermining the spec\u0027s core goal of exposing distinct mdev types.\n\n**Recommendation**:\nReconcile the two statements. Either state that resource_class defaults to the derived CUSTOM_MDEV_\u003cTYPE_NAME\u003e (matching the topology section and the normalization rule on lines 142-152), or, if a literal \u0027MDEV\u0027 default is intended, explain how it interacts with the per-type derivation and the CUSTOM_ prefix requirement. Update the [mdev] device_spec field description on line 342-343 accordingly.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d19b3bc78e5210fe5d8f42f7231aaff5a36cc62e","unresolved":true,"context_lines":[{"line_number":340,"context_line":"  combination.  Defaults to the value advertised by the kernel"},{"line_number":341,"context_line":"  in ``available_instances``."},{"line_number":342,"context_line":"* ``resource_class`` *(optional)* -- custom Placement resource"},{"line_number":343,"context_line":"  class.  Defaults to ``MDEV``."},{"line_number":344,"context_line":"* ``traits`` *(optional)* -- list of additional Placement traits"},{"line_number":345,"context_line":"  to set on the resource provider"},{"line_number":346,"context_line":"  (e.g. ``[\"CUSTOM_GPU\", \"HW_GPU_API_VULKAN\"]``)."}],"source_content_type":"text/x-rst","patch_set":11,"id":"dedca391_947f6055","line":343,"in_reply_to":"68d453dd_dee9af5e","updated":"2026-06-30 17:28:03.000000000","message":"yep, that is a good catch, I\u0027ve fixed it","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":true,"context_lines":[{"line_number":340,"context_line":"  combination.  Defaults to the value advertised by the kernel"},{"line_number":341,"context_line":"  in ``available_instances``."},{"line_number":342,"context_line":"* ``resource_class`` *(optional)* -- custom Placement resource"},{"line_number":343,"context_line":"  class.  Defaults to ``MDEV``."},{"line_number":344,"context_line":"* ``traits`` *(optional)* -- list of additional Placement traits"},{"line_number":345,"context_line":"  to set on the resource provider"},{"line_number":346,"context_line":"  (e.g. ``[\"CUSTOM_GPU\", \"HW_GPU_API_VULKAN\"]``)."}],"source_content_type":"text/x-rst","patch_set":11,"id":"68d453dd_dee9af5e","line":343,"in_reply_to":"d30d5d0b_3a58e886","updated":"2026-06-30 14:01:49.000000000","message":"so this is incorrect\nit shoudl default to python `None`\nwhich means we will compute ita s `CUSTOM_MDEV_\u003cTYPE\u003e`","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"325d69d80d7c0f543dfcb75aed99f49529d6eefa","unresolved":false,"context_lines":[{"line_number":340,"context_line":"  combination.  Defaults to the value advertised by the kernel"},{"line_number":341,"context_line":"  in ``available_instances``."},{"line_number":342,"context_line":"* ``resource_class`` *(optional)* -- custom Placement resource"},{"line_number":343,"context_line":"  class.  Defaults to ``MDEV``."},{"line_number":344,"context_line":"* ``traits`` *(optional)* -- list of additional Placement traits"},{"line_number":345,"context_line":"  to set on the resource provider"},{"line_number":346,"context_line":"  (e.g. ``[\"CUSTOM_GPU\", \"HW_GPU_API_VULKAN\"]``)."}],"source_content_type":"text/x-rst","patch_set":11,"id":"e56d732b_272b5907","line":343,"in_reply_to":"dedca391_947f6055","updated":"2026-06-30 19:52:33.000000000","message":"Done","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"971e5649c9afda2c91267e62a988722df6a7a8e3","unresolved":false,"context_lines":[{"line_number":348,"context_line":"Example ``cyborg.conf`` snippet::"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    [mdev]"},{"line_number":351,"context_line":"    device_spec \u003d { \"address\": \"0000:41:00.0\", \"mdev_type\": \"nvidia-319\", \"max_instances\": 8, \"resource_class\": \"VGPU\", \"traits\": [\"CUSTOM_NVIDIA_V100\", \"VULKAN\"] },"},{"line_number":352,"context_line":"    device_spec \u003d { \"address\": \"0000:42:00.0\", \"mdev_type\": \"i915-GVTg_V5_4\" }"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"The new driver will be enabled via the existing"}],"source_content_type":"text/x-rst","patch_set":11,"id":"e2fb6920_1dcf3541","line":351,"updated":"2026-06-29 14:13:27.000000000","message":"Four lines exceed the 79-character limit enforced by doc8 on the specs/ directory (D001 is enabled for specs/ in tox.ini, unlike doc/ which ignores it). Lines 279, 280, 304 are in the sequence diagram and line 351 is a 165-char device_spec example.\n\n**Severity**: WARNING | **Confidence**: 1.0\n\n**Impact**: The pep8 tox environment runs \u0027doc8 specs/\u0027 which will fail on these lines, gating the patch. The 165-character device_spec line (351) is a clear violation; the ASCII diagram lines (279, 280, 304) also exceed the limit.\n\n**Suggestion**:\nWrap the device_spec example on line 351 across multiple device_spec entries or shorten it. For the sequence diagram lines 279, 280, and 304, shorten the participant labels (e.g. abbreviate \u0027acc_driver\u0027 / \u0027Driver\u0027s Instance\u0027) or restructure the diagram so no line exceeds 79 characters. Run \u0027tox -e pep8\u0027 locally to confirm.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":true,"context_lines":[{"line_number":348,"context_line":"Example ``cyborg.conf`` snippet::"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    [mdev]"},{"line_number":351,"context_line":"    device_spec \u003d { \"address\": \"0000:41:00.0\", \"mdev_type\": \"nvidia-319\", \"max_instances\": 8, \"resource_class\": \"VGPU\", \"traits\": [\"CUSTOM_NVIDIA_V100\", \"VULKAN\"] },"},{"line_number":352,"context_line":"    device_spec \u003d { \"address\": \"0000:42:00.0\", \"mdev_type\": \"i915-GVTg_V5_4\" }"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"The new driver will be enabled via the existing"}],"source_content_type":"text/x-rst","patch_set":11,"id":"855b6b82_bc2d11e2","line":351,"range":{"start_line":351,"start_character":130,"end_line":351,"end_character":162},"updated":"2026-06-30 14:01:49.000000000","message":"so `[\"CUSTOM_NVIDIA_V100\", \"VULKAN\"]`\nwoudl result in \n`\"CUSTOM_NVIDIA_V100\"` and `\"CUSTOM_VULKAN\"`\nbeing reported.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c91d10e62da5ca1a5e962bd58fa4c8184f3845af","unresolved":true,"context_lines":[{"line_number":348,"context_line":"Example ``cyborg.conf`` snippet::"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    [mdev]"},{"line_number":351,"context_line":"    device_spec \u003d { \"address\": \"0000:41:00.0\", \"mdev_type\": \"nvidia-319\", \"max_instances\": 8, \"resource_class\": \"VGPU\", \"traits\": [\"CUSTOM_NVIDIA_V100\", \"VULKAN\"] },"},{"line_number":352,"context_line":"    device_spec \u003d { \"address\": \"0000:42:00.0\", \"mdev_type\": \"i915-GVTg_V5_4\" }"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"The new driver will be enabled via the existing"}],"source_content_type":"text/x-rst","patch_set":11,"id":"e14b12c7_cbc704c5","line":351,"range":{"start_line":351,"start_character":130,"end_line":351,"end_character":162},"in_reply_to":"855b6b82_bc2d11e2","updated":"2026-07-01 00:59:07.000000000","message":"Is that some sort of Placement magic again? (automatic prepend of CUSTOM_ to non-standard trait names?)\n\nTo be clear, I think CUSTOM_ is correct.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"59d8f01c0fe9db0e0cf54ae376a9f0a75af7f8e5","unresolved":true,"context_lines":[{"line_number":348,"context_line":"Example ``cyborg.conf`` snippet::"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    [mdev]"},{"line_number":351,"context_line":"    device_spec \u003d { \"address\": \"0000:41:00.0\", \"mdev_type\": \"nvidia-319\", \"max_instances\": 8, \"resource_class\": \"VGPU\", \"traits\": [\"CUSTOM_NVIDIA_V100\", \"VULKAN\"] },"},{"line_number":352,"context_line":"    device_spec \u003d { \"address\": \"0000:42:00.0\", \"mdev_type\": \"i915-GVTg_V5_4\" }"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"The new driver will be enabled via the existing"}],"source_content_type":"text/x-rst","patch_set":11,"id":"23824a14_edafde91","line":351,"range":{"start_line":351,"start_character":130,"end_line":351,"end_character":162},"in_reply_to":"e14b12c7_cbc704c5","updated":"2026-07-02 11:10:12.000000000","message":"specifically we shoudl be passing these values through \n\nnormalize_name\n\nhttps://github.com/openstack/os-traits/blob/master/os_traits/__init__.py#L153-L169\nand\nhttps://github.com/openstack/os-resource-classes/blob/master/os_resource_classes/__init__.py#L100-L119\n\nwe do actully have a HW_GPU_VULKAN \nhttps://github.com/openstack/os-traits/blob/master/os_traits/hw/gpu/api.py#L40\n\nbut there are 2 pbrales with those traitrs\n\nfirst while there is a hardware element to support the acual supprot realy depend on the driver used in the guest vm\n\n\nso a windows guest may be able to use  \u0027DIRECT3D_V12_0\u0027\nbut that does nto mean it will work on linux  \n\nthe cuda traits are similarly problematic \nhttps://github.com/openstack/os-traits/blob/master/os_traits/hw/gpu/cuda.py\n\nwe normally wont have teh cuda tools installed so we cant really introspect the capablity to adverstise it and if you dont have the same installed in the vm it also wont work\n\nso while these seamed like a good idea at the tiem realistically these are hard to detect and automatically report without runtime dependencies that we woudl not need otherwise.\n\nwe may want to eventually allow adding standard traits eventually if you fully spell them out. i.e. \u0027HW_GPU_CUDA_COMPUTE_CAPABILITY_V7_2\u0027\n\nbut nova does not use \n\nhttps://github.com/openstack/os-traits/blob/master/os_traits/hw/gpu/cuda.py#L166-L172\n\nto know tha tif you ask for HW_GPU_CUDA_SDK_V10_0 it shoudl work becuase we are not translatign themnm and building the `in:...` placement request.\n\nso in effect the indirection we tried to build are not usable end to end.\n\nthe intent was to build somehting like the cpu feature flags\n\nhttps://github.com/openstack/os-traits/blob/master/os_traits/hw/cpu/x86/__init__.py#L16\n\nbut those are aviabel via /proc/cpuinfo or cpuid so they are trivial to discover and advertise unlike the gpus ones.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"81aeb401cbac0ec9811a5c4862885b309e9c3067","unresolved":true,"context_lines":[{"line_number":348,"context_line":"Example ``cyborg.conf`` snippet::"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    [mdev]"},{"line_number":351,"context_line":"    device_spec \u003d { \"address\": \"0000:41:00.0\", \"mdev_type\": \"nvidia-319\", \"max_instances\": 8, \"resource_class\": \"VGPU\", \"traits\": [\"CUSTOM_NVIDIA_V100\", \"VULKAN\"] },"},{"line_number":352,"context_line":"    device_spec \u003d { \"address\": \"0000:42:00.0\", \"mdev_type\": \"i915-GVTg_V5_4\" }"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"The new driver will be enabled via the existing"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ebe07ccf_f7c7c7bf","line":351,"range":{"start_line":351,"start_character":130,"end_line":351,"end_character":162},"in_reply_to":"e14b12c7_cbc704c5","updated":"2026-07-01 08:45:05.000000000","message":"we covered somewhere else in the spec that we\u0027d use os-tratis functions to normalize trait names https://github.com/openstack/os-traits/blob/master/os_traits/__init__.py#L144-L169 that should handle the conversion","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"e45ede86c9a4ebf043024559e4c475be4fe74c8f","unresolved":false,"context_lines":[{"line_number":348,"context_line":"Example ``cyborg.conf`` snippet::"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    [mdev]"},{"line_number":351,"context_line":"    device_spec \u003d { \"address\": \"0000:41:00.0\", \"mdev_type\": \"nvidia-319\", \"max_instances\": 8, \"resource_class\": \"VGPU\", \"traits\": [\"CUSTOM_NVIDIA_V100\", \"VULKAN\"] },"},{"line_number":352,"context_line":"    device_spec \u003d { \"address\": \"0000:42:00.0\", \"mdev_type\": \"i915-GVTg_V5_4\" }"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"The new driver will be enabled via the existing"}],"source_content_type":"text/x-rst","patch_set":11,"id":"23c12eae_c3bbd7d9","line":351,"range":{"start_line":351,"start_character":130,"end_line":351,"end_character":162},"in_reply_to":"ebe07ccf_f7c7c7bf","updated":"2026-07-01 19:12:08.000000000","message":"I was aware of the normalize functions but did not remember they are the ones that prepend CUSTOM_ ... thank you for linking the code 🙂","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"971e5649c9afda2c91267e62a988722df6a7a8e3","unresolved":false,"context_lines":[{"line_number":362,"context_line":"This might be suboptimal as for example NVIDIA devices should be discovered"},{"line_number":363,"context_line":"by the NVIDIA driver rather than the generic mdev one. The"},{"line_number":364,"context_line":"``address`` field in each ``device_spec`` entry can be used to"},{"line_number":365,"context_line":"avoid overlap. Nonetheless, an additional check will be"},{"line_number":366,"context_line":"implemented in the conductor to catch duplicated devices and warn the"},{"line_number":367,"context_line":"operator that the configuration should be revised."},{"line_number":368,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"70ca5332_4cd14a46","line":365,"updated":"2026-06-29 14:13:27.000000000","message":"The duplicate-driver detection is described only narratively (lines 357-367). The conductor \u0027check to catch duplicated devices and warn the operator\u0027 has no specified behavior, severity, or failure mode.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: A concrete description of the detection (e.g. compare PCI addresses across enabled drivers\u0027 device_spec entries, emit a warning log, and skip the duplicate) would prevent divergent implementations and set operator expectations about whether duplicate reporting is hard-blocked or merely warned.\n\n**Recommendation**:\nAdd one or two sentences specifying what the conductor compares (parent PCI address across the generic and vendor-specific drivers), that it emits a warning rather than failing discovery, and which log message/level operators will see. This can be a short paragraph in the Proposed change section.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf418c68d95c1a68b07bd4e694a38e213dd984c6","unresolved":false,"context_lines":[{"line_number":441,"context_line":""},{"line_number":442,"context_line":"1. Ensure the host kernel supports mdev (``/sys/class/mdev_bus/``"},{"line_number":443,"context_line":"   must be present) and that vendor-specific kernel modules are"},{"line_number":444,"context_line":"   loaded (e.g., ``nvidia-vgpu-vfio``, ``kvmgt``, ``intel_qat``)."},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"2. Add the ``[mdev]`` configuration section to ``cyborg.conf`` to"},{"line_number":447,"context_line":"   control which parent devices or mdev types are"}],"source_content_type":"text/x-rst","patch_set":11,"id":"d675a8c5_7205059e","line":444,"range":{"start_line":444,"start_character":19,"end_line":444,"end_character":35},"updated":"2026-06-30 14:01:49.000000000","message":"nit: i htink this is not the correct module for mdev support but its also just an example so its fine. that is the module you use for gpus where you directly pass the vf to the vm.\n\nalthough it might be the same module name with just different behvior depending on the nivdia gride or ai driver package verion","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"971e5649c9afda2c91267e62a988722df6a7a8e3","unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":"Since the companion Nova spec adds the support for mdev requests from cyborg,"},{"line_number":476,"context_line":"there will be no migration path for cyborg owned devices. For nova-owned"},{"line_number":477,"context_line":"devices, instance need to be recreated with a flavor with a cyborg-managed"},{"line_number":478,"context_line":"MDEVs (accel:device-profile\u003dcyborg-vgpu-device-profile-name), as detailed in"},{"line_number":479,"context_line":"the nova spec [1]_."},{"line_number":480,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"ca76406e_a36fd6c2","line":477,"updated":"2026-06-29 14:13:27.000000000","message":"The Upgrade impact section (lines 468-479) has minor grammar issues (\u0027instance need to be recreated\u0027 should be \u0027instances need to be recreated\u0027) that affect readability of an important migration note.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: The upgrade/migration path is a critical operator-facing detail; clean wording reduces the chance of misinterpretation during Nova-owned-to-Cyborg-owned mdev migration.\n\n**Recommendation**:\nChange \u0027instance need to be recreated with a flavor with a cyborg-managed MDEVs\u0027 to \u0027instances need to be recreated with a flavor referencing a Cyborg-managed mdev device profile\u0027.","commit_id":"881fd1faa49ec56317319452a40532fa2c5742b9"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35c6e3c33ae13b71174019378e4d084adb9f2e81","unresolved":false,"context_lines":[{"line_number":180,"context_line":"filtering is passed through to the ``MdevBusManager`` methods via"},{"line_number":181,"context_line":"their ``pci_filter`` and ``type_filter`` parameters."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Finally, the driver will create ``DriverAttachHandle`` objects of type MDEV,"},{"line_number":184,"context_line":"which in its attach handle info will have a new ``asked_type`` field in"},{"line_number":185,"context_line":"addition to the PCI address fields. The attach handle will look as"},{"line_number":186,"context_line":"follows:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5731ad9b_87e2dff2","line":183,"updated":"2026-06-30 18:05:45.000000000","message":"The field name \u0027asked_type\u0027 is unusual for a persisted attach-handle attribute and does not match the style of the surrounding keys (domain, bus, device, function). It reads as an internal variable name rather than a stable API field.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: A clearer name such as \u0027mdev_type\u0027 would make the cross-project contract with Nova more obvious and reduce the chance of naming drift between the Cyborg and Nova implementations.\n\n**Recommendation**:\nConsider renaming asked_type to mdev_type (or requested_mdev_type) in the attach_handle_info contract, and confirm the chosen name is agreed with the Nova-side reviewers of the companion spec before implementation.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35c6e3c33ae13b71174019378e4d084adb9f2e81","unresolved":false,"context_lines":[{"line_number":180,"context_line":"filtering is passed through to the ``MdevBusManager`` methods via"},{"line_number":181,"context_line":"their ``pci_filter`` and ``type_filter`` parameters."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Finally, the driver will create ``DriverAttachHandle`` objects of type MDEV,"},{"line_number":184,"context_line":"which in its attach handle info will have a new ``asked_type`` field in"},{"line_number":185,"context_line":"addition to the PCI address fields. The attach handle will look as"},{"line_number":186,"context_line":"follows:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"91976229_2f62eef1","line":183,"updated":"2026-06-30 18:05:45.000000000","message":"The spec introduces a new \u0027asked_type\u0027 field in MDEV attach_handle_info, but the REST API impact section says \u0027None\u0027. The sibling VFIO variant driver spec added its analogous \u0027managed\u0027 field behind a new microversion (2.4). Adding a field is API-visible unless MDEV handles were opaque.\n\n**Severity**: WARNING | **Confidence**: 0.7\n\n**Impact**: If asked_type is serialized in ARQ responses, clients and Nova must be version-aware; declaring \u0027no API impact\u0027 could cause the microversion and client-update work items to be missed during implementation.\n\n**Suggestion**:\nClarify in the REST API impact section whether asked_type appears in ARQ responses. If it does, state the required microversion and add OpenStack SDK / python-cyborgclient work items, mirroring the VFIO variant driver spec. If it is internal-only, say so explicitly.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c91d10e62da5ca1a5e962bd58fa4c8184f3845af","unresolved":true,"context_lines":[{"line_number":184,"context_line":"which in its attach handle info will have a new ``asked_type`` field in"},{"line_number":185,"context_line":"addition to the PCI address fields. The attach handle will look as"},{"line_number":186,"context_line":"follows:"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"::"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    {"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5040b953_712be482","line":187,"updated":"2026-07-01 00:59:07.000000000","message":"Note to self: `asked_type` is a pre-existing \"load-bearing\" name in the codebase.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"59d8f01c0fe9db0e0cf54ae376a9f0a75af7f8e5","unresolved":true,"context_lines":[{"line_number":184,"context_line":"which in its attach handle info will have a new ``asked_type`` field in"},{"line_number":185,"context_line":"addition to the PCI address fields. The attach handle will look as"},{"line_number":186,"context_line":"follows:"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"::"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    {"}],"source_content_type":"text/x-rst","patch_set":12,"id":"f3510769_da8e9b2e","line":187,"in_reply_to":"5040b953_712be482","updated":"2026-07-02 11:10:12.000000000","message":"ya... that on my list of thing to maybe change in a new api version but it makes me sad. it shoudl be `type` or `requested_type`\n\ni have been strongly debating between a v3 api or just a microveion and raisign the min microversion overtime as there are other questionable api decsions that i would like to correct in 2027.1","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35c6e3c33ae13b71174019378e4d084adb9f2e81","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"::"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    {"},{"line_number":191,"context_line":"        \"attach_handle_type\": \"MDEV\","},{"line_number":192,"context_line":"        \"attach_handle_uuid\": \"91ac1606-427e-44bb-8233-f4ff4bf3d241\","},{"line_number":193,"context_line":"        \"attach_handle_info\": {"}],"source_content_type":"text/x-rst","patch_set":12,"id":"397ac1f1_de9df86e","line":190,"updated":"2026-06-30 18:05:45.000000000","message":"The attach handle JSON example has PCI fields that do not match the parent device of the example mdev type. It shows asked_type \u0027mtty-2\u0027 with bus \u002710\u0027, device \u00271\u0027 (0000:10:01.0), but every diagram assigns mtty-2 to parent 0000:41:00.0 (bus 41, device 00). The bus and device values are wrong.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Implementers and reviewers using this example as the contract for the MDEV attach handle will encode the wrong PCI address mapping, and Nova-side consumers reading the companion spec will be misled about the handle shape.\n\n**Priority**: Before merge\n**Why This Matters**: The attach_handle_info mapping is the cross-project contract between Cyborg and Nova. An incorrect worked example propagates into implementation bugs that are hard to catch in review because the schema is opaque JSON.\n\n**Recommendation**:\nCorrect the example so the PCI fields match the parent of asked_type \u0027mtty-2\u0027: domain \u00270000\u0027, bus \u002741\u0027, device \u002700\u0027, function \u00270\u0027. Also state explicitly that attach_handle_info bus/device are hexadecimal strings matching the BDF of the parent PCI device.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35c6e3c33ae13b71174019378e4d084adb9f2e81","unresolved":false,"context_lines":[{"line_number":210,"context_line":"the refactor, the existing methods for creating and deleting mdevs will be"},{"line_number":211,"context_line":"removed, since that functionality will be delegated completely to Nova."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"MdevBusManager class design"},{"line_number":214,"context_line":"----------------------------"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"b748d552_6ab891df","line":213,"updated":"2026-06-30 18:05:45.000000000","message":"The \u0027MdevBusManager class design\u0027 heading underline is one char longer than the 27-char title, and is followed by two blank lines before the body. While docutils tolerates this, it is inconsistent with every other heading in the spec, which matches the underline length exactly.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Minor RST hygiene inconsistency; does not break the build but stands out against an otherwise clean document and risks a Sphinx warning under stricter builders.\n\n**Suggestion**:\nTrim the underline under \u0027MdevBusManager class design\u0027 to match the 27-character title length, and collapse the double blank line after the heading to a single blank line for consistency with the rest of the spec.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35c6e3c33ae13b71174019378e4d084adb9f2e81","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"The class exposes two methods:"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"* ``discover_parent_devices(pci_filter\u003dNone)`` -- Scans"},{"line_number":228,"context_line":"  ``/sys/class/mdev_bus/`` and returns a list of PCI addresses of"},{"line_number":229,"context_line":"  mdev-capable parent devices. The parameter ``pci_filter`` controls"},{"line_number":230,"context_line":"  which devices should be discovered by Cyborg, the default is ``None`` which"}],"source_content_type":"text/x-rst","patch_set":12,"id":"c40b8df2_05d3d3bd","line":227,"updated":"2026-06-30 18:05:45.000000000","message":"discover_parent_devices defaults pci_filter to None, which silently reports zero devices; the special value [\u0027*\u0027] is required to discover everything. A deployer who enables the driver but forgets or misconfigures the filter gets no devices and no obvious error.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Operators enabling the generic mdev driver will commonly see an empty discovery result and be unable to distinguish \u0027no hardware present\u0027 from \u0027filter too restrictive\u0027, leading to support burden during first deployment.\n\n**Suggestion**:\nDocument the expected logging behaviour: when discovery returns no devices because pci_filter is None/empty, the driver should emit a clear log message explaining that [mdev] device_spec must list addresses or use [\u0027*\u0027]. Consider making the empty-result case a warning rather than silent.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35c6e3c33ae13b71174019378e4d084adb9f2e81","unresolved":false,"context_lines":[{"line_number":337,"context_line":"  (e.g. ``nvidia-319``)."},{"line_number":338,"context_line":"* ``max_instances`` *(optional)* -- maximum number of mdev"},{"line_number":339,"context_line":"  instances the driver may report for this parent/type"},{"line_number":340,"context_line":"  combination.  Defaults value is `None`, which means that the value advertised"},{"line_number":341,"context_line":"  by the kernel in ``available_instances`` will be used (no limit is placed)."},{"line_number":342,"context_line":"* ``resource_class`` *(optional)* -- custom Placement resource"},{"line_number":343,"context_line":"  class.  Defaults to ``None``, which means that the standard"}],"source_content_type":"text/x-rst","patch_set":12,"id":"be5c9a77_7a1afe4e","line":340,"updated":"2026-06-30 18:05:45.000000000","message":"Minor grammar and punctuation issues: \u0027Defaults value is None\u0027 (line 340) reads awkwardly, and \u0027mdev device profile(accel:...\u0027 on line 479 is missing a space before the parenthesis.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: Cleaner prose improves readability for reviewers and operators reading the published spec.\n\n**Recommendation**:\nChange \u0027Defaults value is\u0027 to \u0027The default value is\u0027; add a space before \u0027(accel:device-profile\u003d...)\u0027 on line 479; and hyphenate \u0027cyborg-owned\u0027 as a compound adjective.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35c6e3c33ae13b71174019378e4d084adb9f2e81","unresolved":false,"context_lines":[{"line_number":346,"context_line":"  to set on the resource provider"},{"line_number":347,"context_line":"  (e.g. ``[\"CUSTOM_GPU\", \"HW_GPU_API_VULKAN\"]``)."},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"Example ``cyborg.conf`` snippet::"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    [mdev]"},{"line_number":352,"context_line":"    device_spec \u003d { \"address\": \"0000:41:00.0\", \"mdev_type\": \"nvidia-319\", \"max_instances\": 8, \"resource_class\": \"VGPU\", \"traits\": [\"CUSTOM_NVIDIA_V100\", \"VULKAN\"] },"}],"source_content_type":"text/x-rst","patch_set":12,"id":"589b751e_2dfb4975","line":349,"updated":"2026-06-30 18:05:45.000000000","message":"The device_spec config example sets resource_class to \u0027VGPU\u0027 and a trait \u0027CUSTOM_NVIDIA_V100\u0027, both contradicting the spec\u0027s own rules. \u0027VGPU\u0027 is a standard class, not the CUSTOM_MDEV_\u003cTYPE\u003e default; \u0027CUSTOM_NVIDIA_V100\u0027 is a malformed custom trait; \u0027VULKAN\u0027 is not a real trait name.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: An operator copying the example verbatim would register a malformed custom trait and an inconsistent resource class, producing Placement errors or confusing scheduling behaviour that contradicts the rest of the spec.\n\n**Suggestion**:\nMake the example consistent with the rules defined earlier: use a valid CUSTOM_MDEV_* resource_class (or document VGPU as an allowed exception and why), use a well-formed custom trait such as CUSTOM_NVIDIA_V100_GPU, and use a real standard trait such as HW_GPU_API_VULKAN for the Vulkan capability.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35c6e3c33ae13b71174019378e4d084adb9f2e81","unresolved":false,"context_lines":[{"line_number":385,"context_line":"non-GPU devices. Overloading the GPU driver would conflate unrelated"},{"line_number":386,"context_line":"concerns and make the code harder to maintain."},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"Data model impact"},{"line_number":389,"context_line":"-----------------"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"The ``device_type`` column in the ``Device`` table is"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9a622052_90bf7368","line":388,"updated":"2026-06-30 18:05:45.000000000","message":"The spec adds both \u0027MDEV\u0027 and \u0027PCI\u0027 to the informal device-type enum, but only justifies \u0027MDEV\u0027 against the new driver. The \u0027PCI\u0027 addition is described as \u0027for completeness\u0027 without explaining which existing behaviour it corrects or why it must land in the same change.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Either scoping the enum change to MDEV only, or adding one sentence on why PCI is needed now, keeps the data-model change focused and easy to review.\n\n**Recommendation**:\nEither drop the PCI enum addition from this spec (handle it in the generic PCI driver\u0027s own change) or add a brief justification for why PCI must be added in the same release.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c91d10e62da5ca1a5e962bd58fa4c8184f3845af","unresolved":true,"context_lines":[{"line_number":400,"context_line":"No new database tables or schema migrations are required; the"},{"line_number":401,"context_line":"``type`` field is an opaque string in the API, so the new value"},{"line_number":402,"context_line":"does not require a microversion."},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"REST API impact"},{"line_number":405,"context_line":"---------------"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"614ddcb9_9540191f","line":403,"updated":"2026-07-01 00:59:07.000000000","message":"Take this comment with a grain of salt since I have low familiarity with this ...\n\nWhile there is not a technical requirement for a new microversion sometimes there is a discovery or signaling reason to add a new one. I don\u0027t know whether the new generic mdev driver and/or MdevBusManager are things that could benefit from such signaling, so I mention it just in case.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"81aeb401cbac0ec9811a5c4862885b309e9c3067","unresolved":true,"context_lines":[{"line_number":400,"context_line":"No new database tables or schema migrations are required; the"},{"line_number":401,"context_line":"``type`` field is an opaque string in the API, so the new value"},{"line_number":402,"context_line":"does not require a microversion."},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"REST API impact"},{"line_number":405,"context_line":"---------------"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"6bbcae05_f25c0624","line":403,"in_reply_to":"614ddcb9_9540191f","updated":"2026-07-01 08:45:05.000000000","message":"I would say no since it the MdevBusManager will be an internal class that will not be exposed to the API in any way. We currently already have this functionality in the nvidia driver, the goal is to encapsulate the logic for reuse across different drivers, we discussed during PTG to do the same for PCI and any other bus that might be used, whether this cycle or the next","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"59d8f01c0fe9db0e0cf54ae376a9f0a75af7f8e5","unresolved":true,"context_lines":[{"line_number":400,"context_line":"No new database tables or schema migrations are required; the"},{"line_number":401,"context_line":"``type`` field is an opaque string in the API, so the new value"},{"line_number":402,"context_line":"does not require a microversion."},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"REST API impact"},{"line_number":405,"context_line":"---------------"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"c5d8840f_50f6945d","line":403,"in_reply_to":"614ddcb9_9540191f","updated":"2026-07-02 11:10:12.000000000","message":"MdevBusManager is a purely internal ting so if nova ever knwo about that i would be sad\n\nsignaling is intersting but i dont think that is the optimal approch in this case.\njust because a cloud could have nvme devices ro mdev capablie device does tno mean it has them so i think a list call is the better way to ask that question.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"e45ede86c9a4ebf043024559e4c475be4fe74c8f","unresolved":false,"context_lines":[{"line_number":400,"context_line":"No new database tables or schema migrations are required; the"},{"line_number":401,"context_line":"``type`` field is an opaque string in the API, so the new value"},{"line_number":402,"context_line":"does not require a microversion."},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"REST API impact"},{"line_number":405,"context_line":"---------------"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"7e893273_9f6e5e32","line":403,"in_reply_to":"6bbcae05_f25c0624","updated":"2026-07-01 19:12:08.000000000","message":"Right ... yeah I wasn\u0027t sure if this work would enable new possibilities for API end users basically. If so, then there might be a reason to advertise a new microversion that essentially means \"these abilities are now available\" so that there is some end-user-visible way a person can know, \"I have this ability available to me\" without having to know the OpenStack (Cyborg) version underneath which they can\u0027t see.\n\nIt sounds like while this work would enable cloud operators to provide more variety of accelerators to end users, it is no different than an operator adding any other new hardware -- it\u0027s just a matter of how that hardware makes it into the view of the end user.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35c6e3c33ae13b71174019378e4d084adb9f2e81","unresolved":false,"context_lines":[{"line_number":435,"context_line":"agent update cycle, the same cadence as existing drivers, and does"},{"line_number":436,"context_line":"not introduce additional database or conductor calls."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"Other deployer impact"},{"line_number":439,"context_line":"---------------------"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"Deployers who wish to use the generic mdev driver must:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5e4b9d8d_f9ae97fd","line":438,"updated":"2026-06-30 18:05:45.000000000","message":"The spec uses the new [mdev] device_spec option but does not confirm whether existing [gpu_devices]/enabled_vgpu_types config still takes effect after the GPU driver is refactored to use MdevBusManager. Existing NVIDIA vGPU deployers need that reassurance.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Explicitly stating that [gpu_devices] configuration is unchanged by the refactor reassures existing vGPU deployers that the refactor is behaviour-preserving.\n\n**Recommendation**:\nAdd one sentence to Other deployer impact confirming that existing [gpu_devices]/enabled_vgpu_types and [vgpu_*] sections remain valid and unchanged for the NVIDIA GPU driver after the refactor, since only raw sysfs introspection is delegated to MdevBusManager.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35c6e3c33ae13b71174019378e4d084adb9f2e81","unresolved":false,"context_lines":[{"line_number":466,"context_line":"``discover_parent_devices()`` and ``get_mdev_types()`` methods instead"},{"line_number":467,"context_line":"of implementing their own sysfs parsing."},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"Upgrade impact"},{"line_number":470,"context_line":"--------------"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"This functionality requires a version of Nova that implements [1]_. Upgrading"}],"source_content_type":"text/x-rst","patch_set":12,"id":"158118c1_21bcd817","line":469,"updated":"2026-06-30 18:05:45.000000000","message":"The spec relies on a single external reference ([1], the companion Nova spec review URL) for the core Nova dependency, upgrade path, and testing story. The template warns the spec should still make sense when references are unavailable, but several sections defer almost entirely to [1].\n\n**Severity**: WARNING | **Confidence**: 0.7\n\n**Impact**: If the Nova review becomes unavailable or is substantially revised, a reader cannot reconstruct what Cyborg requires of Nova (mdev ARQ consumption, allocation semantics) from this spec alone.\n\n**Suggestion**:\nAdd a short self-contained summary of the Nova-side contract Cyborg depends on (how Nova consumes mdev ARQs, creates/deletes the mdevs, and the required allocation behaviour), so the spec remains intelligible without the external link. Keep [1] as the authoritative detail.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35c6e3c33ae13b71174019378e4d084adb9f2e81","unresolved":false,"context_lines":[{"line_number":466,"context_line":"``discover_parent_devices()`` and ``get_mdev_types()`` methods instead"},{"line_number":467,"context_line":"of implementing their own sysfs parsing."},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"Upgrade impact"},{"line_number":470,"context_line":"--------------"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"This functionality requires a version of Nova that implements [1]_. Upgrading"}],"source_content_type":"text/x-rst","patch_set":12,"id":"12db2d9f_ca25e03b","line":469,"updated":"2026-06-30 18:05:45.000000000","message":"The spec removes mdev create/delete from the existing NVIDIA GPU driver and delegates it entirely to Nova, but the downgrade/rollback and mixed-version-rollout story is underspecified for a production vGPU deployment change.\n\n**Severity**: HIGH | **Confidence**: 0.8\n\n**Risk**: Operators upgrading Cyborg ahead of Nova, or rolling back after a failed upgrade, could end up with vGPU devices that Nova cannot create/delete, leaving managed mdevs orphaned or unmanageable until both services are realigned.\n\n**Priority**: Before merge\n**Why This Matters**: Cyborg and Nova upgrade independently. This spec deletes create/delete from the GPU driver and hard-couples usability to the new Nova behaviour, so it must define the minimum Nova version, mixed-version behaviour, and rollback procedure so reviewers can assess upgrade safety.\n\n**Recommendation**:\nAdd explicit upgrade/downgrade guidance: (1) state the minimum Nova version and that it must be deployed before or with the new Cyborg; (2) describe behaviour when new Cyborg runs against old Nova (mdevs discovered but ARQs ignored) and recommend the conductor warn; (3) note whether create/delete removal can be gated behind a config flag for one cycle to allow staged rollouts.","commit_id":"df87af4eff374bfe36a297b9d03b339f18311076"}]}
