+    /* Map the shared memory region */
+    mapped_addr = mmap(NULL, len, prot_flags, MAP_SHARED, fd, fd_offset);
+    if (mapped_addr == MAP_FAILED) {
+        error_report("Failed to map shared memory region: %s", 
strerror(errno));
+        return NULL;
+    }
+
+    /* Create the VhostUserShmemObject */
+    shmem_obj = VHOST_USER_SHMEM_OBJECT(
+        object_new(TYPE_VHOST_USER_SHMEM_OBJECT));
+
+    /* Set up object properties */
+    shmem_obj->shmid = shmid;
+    shmem_obj->fd = fd;
+    shmem_obj->fd_offset = fd_offset;
+    shmem_obj->shm_offset = shm_offset;
+    shmem_obj->len = len;
+    shmem_obj->flags = flags;
+    shmem_obj->mapped_addr = mapped_addr;
+
+    /* Create MemoryRegion as a child of this object */
+    mr = g_new0(MemoryRegion, 1);
+    g_string_printf(mr_name, "vhost-user-shmem-%d-%" PRIx64, shmid, 
shm_offset);
+
+    /* Initialize MemoryRegion with the mapped memory */
+    memory_region_init_ram_device_ptr(mr, OBJECT(shmem_obj), mr_name->str,
+                                      len, mapped_addr);

Oh, why did we go from memory_region_init_ram_from_fd() back to memory_region_init_ram_device_ptr() in this series?

I thought having a wrapper object around the memory region would have been sufficient to handle the race?

--
Cheers

David / dhildenb


Reply via email to