@@ -64,60 +64,82 @@ We also anticipate a few more:
6464Changes since v1 (virtio-msg-patch1):
6565
6666First, thank you for the detailed comments and broad interest on v1.
67- We tried to address most review feedback in this revision.
68-
69- Spec Functional / Behavioral:
70- * Finalized the common header, addressing, and forwarding model:
71- * Keep a 16-byte common header
72- * Use 64-bit device numbers
73- * Use 16-bit msg_size plus 16-bit reserved
74- * Bus messages are identified by the type field and MUST carry dev_num = 0
75- * Device number 0 is not reserved for transport messages
76- * Bus implementations MUST validate transport-message device numbers before
77- forwarding
78- Rationale: support larger device-number spaces, remove ambiguity in bus-vs-
79- transport addressing, and keep forwarding behavior well-defined.
80- * Clarified device-number lifecycle guidance so bus implementations should avoid
81- immediate reuse of removed device numbers.
82- Rationale: reduce races with delayed messages when devices are removed and
83- added again.
84- * Added explicit configuration semantics profiles (baseline vs strict), tied to
85- VIRTIO_MSG_F_STRICT_CONFIG_GENERATION, and gated generation-mismatch refusal
86- to strict-profile negotiation.
87- Rationale: preserve compatibility in baseline mode while allowing stricter
88- behavior when both sides opt in, and make the controlling feature
89- negotiation explicit in message semantics.
90- * Clarified SET_CONFIG rejection behavior: rejected responses return
91- length = 0 with no payload.
92- Rationale: remove ambiguity for parser/validation behavior.
93- * Clarified ordering and response-association baseline:
94- * Request/response ordering is per-device in-order
95- * Bus implementations own token-based request/response correlation and any
96- reordering compensation
97- * Repeated request parameters in responses may be used for validation but do
98- not define response association
99- * Events remain asynchronous and may arrive at any time relative to
100- request/response traffic
101- Rationale: keep baseline semantics clear while making bus responsibilities
102- for correlation and ordering explicit.
103- * Clarified virtqueue state transitions and reconfiguration rules around
104- enabled/disabled/reset states.
105- Rationale: align with transport expectations and avoid ambiguous queue-state
106- behavior.
107- * Clarified GET_DEVICE_INFO semantics using number of 32-bit feature blocks,
108- and added UUID guidance referencing RFC4122 nil-UUID semantics while
109- recommending version 4 UUIDs for non-nil device_uuid values.
110- Rationale: improve consistency and implementation clarity for both feature
111- discovery and device identification.
112- * Clarified GET_DEVICES semantics using direct slot/byte units; responders must
113- not return count values larger than requested; smaller (including zero) count
114- is valid when appropriate.
115- Rationale: make enumeration behavior precise while allowing efficient sparse
116- windows.
117- * Added an informative known bus implementation examples section, including the
118- FF-A bus specification reference and current implementation examples.
119- Rationale: provide concrete context without constraining architecture choices.
120- * Tightened conformance text to match the clarified normative behavior.
67+ This revision incorporates review feedback from Peter Hilber, Demi Marie
68+ Obenour, Parav Pandit, Andrei Homescu, Manos Pitsidianakis, Michael S.
69+ Tsirkin, Bill Mills, and HVAC group discussion.
70+
71+ Highlights of the changes since v1:
72+
73+ * Finalized the common transport message model:
74+ * keep a 16-byte common header
75+ * use 64-bit device numbers and keep a 16-bit msg_size field
76+ * clarify common message-ID encoding and validation boundaries
77+ * define request completion more precisely: a valid supported request
78+ completes with exactly one protocol response or a transport-visible failure
79+ * clarify request/response correlation and token handling, including the
80+ rule that devices echo the request token while the bus may rewrite tokens
81+ internally for correlation
82+ * preserve per driver/device request ordering while still allowing
83+ bus-correlated out-of-order responses and events
84+
85+ * Clarified bus versus transport responsibilities and enumeration:
86+ * keep GET_DEVICE_INFO as a driver-issued transport message, and GET_DEVICES,
87+ PING, and EVENT_DEVICE as optional bus messages
88+ * require bus messages to use dev_num = 0
89+ * bus implementations must expose only validated device numbers, may expose
90+ zero devices, and should delay device-number reuse to reduce races
91+ * EVENT_DEVICE is defined as a bus-originated ADDED/REMOVED hotplug event
92+ * tighten GET_DEVICES enumeration semantics, including empty-bitmap cases and
93+ guaranteed forward progress
94+
95+ * Tightened initialization and feature negotiation:
96+ * use transport revision terminology consistently
97+ * keep GET_DEVICE_INFO as the only transport message used for early discovery
98+ * align the rest of initialization with the core virtio flow through reset,
99+ status progression, feature negotiation, FEATURES_OK verification, and
100+ DRIVER_OK
101+ * separate transport-level and device-level feature negotiation semantics
102+ * require GET_DEVICE_INFO to report enough feature blocks to cover all
103+ offered feature bits and bound max_virtqueues to 65536
104+ * define SET_DRIVER_FEATURES as addressed-block updates that may be built up
105+ across multiple requests before FEATURES_OK
106+ * make GET_SHM mandatory for devices to implement while keeping driver use
107+ optional, and align the shared-memory identifier semantics with core virtio
108+
109+ * Aligned configuration, status, and notification behavior with core virtio:
110+ * align GET_CONFIG, SET_CONFIG, EVENT_CONFIG, and device status handling more
111+ closely with the core virtio model
112+ * keep VIRTIO_MSG_F_STRICT_CONFIG_GENERATION only as optional strict-profile
113+ SET_CONFIG mismatch enforcement
114+ * define nonzero SET_CONFIG writes as all-or-nothing and rejected writes as
115+ length = 0 with no payload
116+ * limit EVENT_CONFIG status notifications to device-originated asynchronous
117+ status changes
118+ * make polling-only operation explicit, with EVENT_AVAIL and EVENT_USED used
119+ only when the endpoints choose event-driven notification
120+ * keep bus-side forwarding, polling, or synthesized notification delivery
121+ transparent to the transport-visible model
122+
123+ * Refined virtqueue and reset semantics:
124+ * clarify queue-state transitions, SET_VQUEUE update behavior, and invalid
125+ reconfiguration cases
126+ * make SET_VQUEUE and RESET_VQUEUE reject cases deterministic no-op empty
127+ responses
128+ * define deterministic GET_VQUEUE zero-sentinel responses for unavailable,
129+ unimplemented, and out-of-range queues
130+ * define local admin virtqueue field semantics and the EVENT_AVAIL
131+ notification-data encoding more precisely
132+ * clarify reset-completion checks without duplicating the core virtio reset
133+ rules
134+
135+ * Improved document quality:
136+ * reworked the chapter to better match existing virtio specification style
137+ * removed duplicated or ambiguous requirements
138+ * fixed label paths, direct field references, punctuation, and ambiguous
139+ wording
140+ * added informative known bus implementation examples
141+ * completed conformance coverage for driver, device, and bus clauses
142+ * normalized punctuation and wording for consistency with the rest of the spec
121143
122144Open topics and ongoing discussion:
123145* Out-of-order/performance extensions:
0 commit comments