On Thu, Oct 29, 2026 at 12:23:57AM +0100, Kevin Wolf wrote:
+static uint8_t get_id_request(QVirtioDevice *dev, QVirtQueue *vq, + char *buf, size_t buf_len, + QGuestAllocator *t_alloc) +{ + QTestState *qts = global_qtest; + uint64_t req_addr; + uint32_t free_head; + uint8_t status; + + QVirtioBlkReq req = { + .type = VIRTIO_BLK_T_GET_ID, + .data = buf, + }; + + req_addr = virtio_blk_request(t_alloc, dev, &req, buf_len); + + memset(req.data, 0xa5, buf_len); + memwrite(req_addr + 16, req.data, buf_len); + + free_head = qvirtqueue_add(qts, vq, req_addr, 16, false, true); + qvirtqueue_add(qts, vq, req_addr + 16, buf_len, true, true); + qvirtqueue_add(qts, vq, req_addr + 16 + buf_len, 1, true, false); + + qvirtqueue_kick(qts, dev, vq, free_head); + + qvirtio_wait_used_elem(qts, dev, vq, free_head, NULL, + QVIRTIO_BLK_TIMEOUT_US); + status = readb(req_addr + 16 + buf_len); + memread(req_addr + 16, buf, buf_len);
Missing guest_free(t_alloc, req_addr);
+ return status; +}