[magma] APIv3: add flags to semaphore import
This allows for one-shot semaphores, which are not reset after wait.
Change-Id: I53cbdaae4304a16e8c3b64fdd721f5640970bb67
diff --git a/sdk/fidl/fuchsia.gpu.magma/fuchsia.gpu.magma.api b/sdk/fidl/fuchsia.gpu.magma/fuchsia.gpu.magma.api
index 7e6646ea..7916a06 100644
--- a/sdk/fidl/fuchsia.gpu.magma/fuchsia.gpu.magma.api
+++ b/sdk/fidl/fuchsia.gpu.magma/fuchsia.gpu.magma.api
@@ -1,3 +1,3 @@
{
- "fidl/fuchsia.gpu.magma": "3daa900dc08dc5a9944e62ff1fc92b65"
+ "fidl/fuchsia.gpu.magma": "97295598ebe9890fba8d633abf389496"
}
\ No newline at end of file
diff --git a/sdk/fidl/fuchsia.gpu.magma/magma.fidl b/sdk/fidl/fuchsia.gpu.magma/magma.fidl
index 6834245..25675e1 100644
--- a/sdk/fidl/fuchsia.gpu.magma/magma.fidl
+++ b/sdk/fidl/fuchsia.gpu.magma/magma.fidl
@@ -131,6 +131,11 @@
BUFFER = 11;
};
+@available(added=13)
+type ImportFlags = flexible bits : uint64 {
+ EVENT_ONE_SHOT = 0x1;
+};
+
type BufferOp = flexible enum : uint32 {
/// Populate the hardware page tables with the pages mapped in this range, committing pages
/// as needed. This is not needed for allocations mapped GROWABLE, since the page tables will
@@ -202,13 +207,22 @@
/// If a system driver error occurs, or if the client sends a message that the client should have
/// known is invalid, the connection will be closed and a zx.Status sent via epitaph.
protocol Primary {
- /// Imports an object for use in the system driver.
+ /// DEPRECATED: use ImportObject.
ImportObject2(resource struct {
object zx.Handle;
object_type ObjectType;
object_id ObjectId;
});
+ /// Imports an object for use in the system driver.
+ @available(added=13)
+ ImportObject(resource struct {
+ object zx.Handle;
+ flags ImportFlags;
+ object_type ObjectType;
+ object_id ObjectId;
+ });
+
/// Destroys the object with `object_id` within this connection.
ReleaseObject(struct {
object_id ObjectId;
diff --git a/sdk/lib/magma_client/include/lib/magma/magma.h b/sdk/lib/magma_client/include/lib/magma/magma.h
index 5079852..af11daf 100644
--- a/sdk/lib/magma_client/include/lib/magma/magma.h
+++ b/sdk/lib/magma_client/include/lib/magma/magma.h
@@ -193,6 +193,22 @@
magma_semaphore_id_t* id_out);
///
+/// \brief Imports and takes ownership of the semaphore referred to by the given handle. Takes
+/// ownership of |semaphore_handle| on both success and failure.
+/// \param connection An open connection.
+/// \param semaphore_handle A valid semaphore handle.
+/// \param flags Pass MAGMA_IMPORT_SEMAPHORE_ONESHOT to prevent auto-reset after wait.
+/// \param semaphore_out The returned semaphore.
+/// \param id_out The id of the semaphore.
+///
+MAGMA_EXPORT magma_status_t magma_connection_import_semaphore2(
+ magma_connection_t connection,
+ magma_handle_t semaphore_handle,
+ uint64_t flags,
+ magma_semaphore_t* semaphore_out,
+ magma_semaphore_id_t* id_out);
+
+///
/// \brief Perform an operation on a range of a buffer
/// \param connection An open connection.
/// \param buffer A valid buffer.
diff --git a/sdk/lib/magma_client/include/lib/magma/magma_common_defs.h b/sdk/lib/magma_client/include/lib/magma/magma_common_defs.h
index 423502a..523af83 100644
--- a/sdk/lib/magma_client/include/lib/magma/magma_common_defs.h
+++ b/sdk/lib/magma_client/include/lib/magma/magma_common_defs.h
@@ -16,7 +16,7 @@
// LINT.IfChange(version)
// This version should be incremented whenever the Magma API changes.
-#define MAGMA_API_VERSION 2
+#define MAGMA_API_VERSION 3
// LINT.ThenChange()
// LINT.IfChange
@@ -88,6 +88,8 @@
#define MAGMA_PERF_COUNTER_RESULT_DISCONTINUITY ((uint32_t)(1 << 0))
+#define MAGMA_IMPORT_SEMAPHORE_ONE_SHOT ((uint64_t)(1 << 0))
+
typedef uint32_t magma_format_t;
// Values must match fuchsia.sysmem.PixelFormatType
diff --git a/sdk/lib/magma_client/magma_client.api b/sdk/lib/magma_client/magma_client.api
index df4e599..6c08220 100644
--- a/sdk/lib/magma_client/magma_client.api
+++ b/sdk/lib/magma_client/magma_client.api
@@ -1,5 +1,5 @@
{
- "pkg/magma_client/include/lib/magma/magma.h": "aaf2e1b98394e4ae247d74d7b1aec67b",
- "pkg/magma_client/include/lib/magma/magma_common_defs.h": "7153a36e07fcff5e632865fb0b5bb059",
+ "pkg/magma_client/include/lib/magma/magma.h": "6ea9bd882e4b6314213b85a01f85c8b1",
+ "pkg/magma_client/include/lib/magma/magma_common_defs.h": "dcaaaae4a2b8f5f6ba3a6bfb6aac2c71",
"pkg/magma_client/include/lib/magma/magma_sysmem.h": "0e8f200a0a39629e98e5dab572570c68"
}
\ No newline at end of file
diff --git a/src/graphics/drivers/msd-arm-mali/tests/unit_tests/non_hardware_test_device.cc b/src/graphics/drivers/msd-arm-mali/tests/unit_tests/non_hardware_test_device.cc
index 59b3202..7bbfbaa 100644
--- a/src/graphics/drivers/msd-arm-mali/tests/unit_tests/non_hardware_test_device.cc
+++ b/src/graphics/drivers/msd-arm-mali/tests/unit_tests/non_hardware_test_device.cc
@@ -292,6 +292,7 @@
uint64_t id() const override { return real_semaphore_->id(); }
uint64_t global_id() const override { return real_semaphore_->global_id(); }
+ void SetOneShot() override {}
bool duplicate_handle(uint32_t* handle_out) const override {
return real_semaphore_->duplicate_handle(handle_out);
diff --git a/src/graphics/drivers/msd-arm-mali/tests/unit_tests/test_command_buffer.cc b/src/graphics/drivers/msd-arm-mali/tests/unit_tests/test_command_buffer.cc
index 760c66d..944c1a5 100644
--- a/src/graphics/drivers/msd-arm-mali/tests/unit_tests/test_command_buffer.cc
+++ b/src/graphics/drivers/msd-arm-mali/tests/unit_tests/test_command_buffer.cc
@@ -201,7 +201,8 @@
auto platform_semaphore = magma::PlatformSemaphore::Create();
zx::handle handle;
platform_semaphore->duplicate_handle(&handle);
- connection_->ImportObject(std::move(handle), fuchsia_gpu_magma::wire::ObjectType::kEvent,
+ connection_->ImportObject(std::move(handle), /*flags=*/0,
+ fuchsia_gpu_magma::wire::ObjectType::kEvent,
platform_semaphore->id());
magma_arm_mali_atom atom;
diff --git a/src/graphics/drivers/msd-intel-gen/tests/unit_tests/test_hw_device.cc b/src/graphics/drivers/msd-intel-gen/tests/unit_tests/test_hw_device.cc
index bd74429..9eb9493 100644
--- a/src/graphics/drivers/msd-intel-gen/tests/unit_tests/test_hw_device.cc
+++ b/src/graphics/drivers/msd-intel-gen/tests/unit_tests/test_hw_device.cc
@@ -518,6 +518,8 @@
bool WaitAsync(magma::PlatformPort* port, uint64_t key) override { return false; }
+ void SetOneShot() override {}
+
std::unique_ptr<magma::PlatformSemaphore> sem_ = magma::PlatformSemaphore::Create();
std::unique_ptr<magma::PlatformSemaphore> signal_sem_ = magma::PlatformSemaphore::Create();
std::unique_ptr<magma::PlatformSemaphore> wait_sem_ = magma::PlatformSemaphore::Create();
diff --git a/src/graphics/lib/magma/include/magma/magma.json b/src/graphics/lib/magma/include/magma/magma.json
index 1ae88f5..f3348c0b 100644
--- a/src/graphics/lib/magma/include/magma/magma.json
+++ b/src/graphics/lib/magma/include/magma/magma.json
@@ -1,6 +1,6 @@
{
"magma-interface": {
- "next-free-ordinal": 91,
+ "next-free-ordinal": 92,
"exports": [
{
"ordinal": 46,
@@ -295,6 +295,39 @@
]
},
{
+ "ordinal": 91,
+ "name": "magma_connection_import_semaphore2",
+ "type": "magma_status_t",
+ "description": "Imports and takes ownership of the semaphore referred to by the given handle. Takes ownership of |semaphore_handle| on both success and failure.",
+ "arguments": [
+ {
+ "name": "connection",
+ "type": "magma_connection_t",
+ "description": "An open connection."
+ },
+ {
+ "name": "semaphore_handle",
+ "type": "magma_handle_t",
+ "description": "A valid semaphore handle."
+ },
+ {
+ "name": "flags",
+ "type": "uint64_t",
+ "description": "Pass MAGMA_IMPORT_SEMAPHORE_ONESHOT to prevent auto-reset after wait."
+ },
+ {
+ "name": "semaphore_out",
+ "type": "magma_semaphore_t*",
+ "description": "The returned semaphore."
+ },
+ {
+ "name": "id_out",
+ "type": "magma_semaphore_id_t*",
+ "description": "The id of the semaphore."
+ }
+ ]
+ },
+ {
"ordinal": 65,
"name": "magma_connection_perform_buffer_op",
"type": "magma_status_t",
diff --git a/src/graphics/lib/magma/src/libmagma/magma.cc b/src/graphics/lib/magma/src/libmagma/magma.cc
index c8e87cb..7b62b1c 100644
--- a/src/graphics/lib/magma/src/libmagma/magma.cc
+++ b/src/graphics/lib/magma/src/libmagma/magma.cc
@@ -112,7 +112,7 @@
magma_status_t result =
magma::PlatformConnectionClient::cast(connection)
- ->ImportObject(handle, magma::PlatformObject::BUFFER, platform_buffer->id());
+ ->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER, platform_buffer->id());
if (result != MAGMA_STATUS_OK)
return DRET_MSG(result, "ImportObject failed");
@@ -181,7 +181,7 @@
magma_status_t result =
magma::PlatformConnectionClient::cast(connection)
- ->ImportObject(handle, magma::PlatformObject::BUFFER, platform_buffer->id());
+ ->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER, platform_buffer->id());
if (result != MAGMA_STATUS_OK)
return DRET_MSG(result, "ImportObject failed");
@@ -306,7 +306,7 @@
magma_status_t result =
magma::PlatformConnectionClient::cast(connection)
- ->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id());
+ ->ImportObject(handle, /*flags=*/0, magma::PlatformObject::SEMAPHORE, semaphore->id());
if (result != MAGMA_STATUS_OK)
return DRET_MSG(result, "failed to ImportObject");
@@ -439,21 +439,33 @@
uint32_t semaphore_handle,
magma_semaphore_t* semaphore_out,
magma_semaphore_id_t* id_out) {
+ return magma_connection_import_semaphore2(connection, semaphore_handle, /*flags=*/0,
+ semaphore_out, id_out);
+}
+
+magma_status_t magma_connection_import_semaphore2(magma_connection_t connection,
+ uint32_t semaphore_handle, uint64_t flags,
+ magma_semaphore_t* semaphore_out,
+ magma_semaphore_id_t* id_out) {
auto platform_semaphore = magma::PlatformSemaphore::Import(semaphore_handle);
if (!platform_semaphore)
return DRET_MSG(MAGMA_STATUS_INVALID_ARGS, "PlatformSemaphore::Import failed");
platform_semaphore->set_local_id(s_semaphore_id_generator.get());
+ if (flags & MAGMA_IMPORT_SEMAPHORE_ONE_SHOT) {
+ platform_semaphore->SetOneShot();
+ }
+
uint32_t handle;
if (!platform_semaphore->duplicate_handle(&handle))
return DRET_MSG(MAGMA_STATUS_ACCESS_DENIED, "failed to duplicate handle");
magma_status_t result =
magma::PlatformConnectionClient::cast(connection)
- ->ImportObject(handle, magma::PlatformObject::SEMAPHORE, platform_semaphore->id());
+ ->ImportObject(handle, flags, magma::PlatformObject::SEMAPHORE, platform_semaphore->id());
if (result != MAGMA_STATUS_OK)
- return DRET_MSG(result, "ImportObject failed: %d", result);
+ return DRET_MSG(result, "ImportObject2 failed: %d", result);
*id_out = platform_semaphore->id();
*semaphore_out = reinterpret_cast<magma_semaphore_t>(platform_semaphore.release());
diff --git a/src/graphics/lib/magma/src/libmagma/magma.ifs b/src/graphics/lib/magma/src/libmagma/magma.ifs
index 4fbc6b6..0eb9fe8 100644
--- a/src/graphics/lib/magma/src/libmagma/magma.ifs
+++ b/src/graphics/lib/magma/src/libmagma/magma.ifs
@@ -41,6 +41,7 @@
- { Name: magma_connection_get_notification_channel_handle, Type: Func }
- { Name: magma_connection_import_buffer, Type: Func }
- { Name: magma_connection_import_semaphore, Type: Func }
+ - { Name: magma_connection_import_semaphore2, Type: Func }
- { Name: magma_connection_map_buffer, Type: Func }
- { Name: magma_connection_perform_buffer_op, Type: Func }
- { Name: magma_connection_read_notification_channel, Type: Func }
diff --git a/src/graphics/lib/magma/src/magma_util/platform/platform_connection.h b/src/graphics/lib/magma/src/magma_util/platform/platform_connection.h
index 25c3539..1ebfa3a 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/platform_connection.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/platform_connection.h
@@ -44,8 +44,8 @@
class Delegate {
public:
virtual ~Delegate() {}
- virtual magma::Status ImportObject(uint32_t handle, PlatformObject::Type object_type,
- uint64_t client_id) = 0;
+ virtual magma::Status ImportObject(uint32_t handle, uint64_t flags,
+ PlatformObject::Type object_type, uint64_t client_id) = 0;
virtual magma::Status ReleaseObject(uint64_t object_id, PlatformObject::Type object_type) = 0;
virtual magma::Status CreateContext(uint32_t context_id) = 0;
diff --git a/src/graphics/lib/magma/src/magma_util/platform/platform_connection_client.h b/src/graphics/lib/magma/src/magma_util/platform/platform_connection_client.h
index 29e24d3..340db56 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/platform_connection_client.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/platform_connection_client.h
@@ -39,8 +39,8 @@
uint64_t max_inflight_messages,
uint64_t max_inflight_bytes);
// Imports an object for use in the system driver
- virtual magma_status_t ImportObject(uint32_t handle, PlatformObject::Type object_type,
- uint64_t object_id) = 0;
+ virtual magma_status_t ImportObject(uint32_t handle, uint64_t flags,
+ PlatformObject::Type object_type, uint64_t object_id) = 0;
// Releases the connection's reference to the given object.
virtual magma_status_t ReleaseObject(uint64_t object_id, PlatformObject::Type object_type) = 0;
diff --git a/src/graphics/lib/magma/src/magma_util/platform/platform_semaphore.h b/src/graphics/lib/magma/src/magma_util/platform/platform_semaphore.h
index af5ce80..24fe834 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/platform_semaphore.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/platform_semaphore.h
@@ -66,9 +66,9 @@
// Returns MAGMA_STATUS_OK if the event is signaled before the timeout expires.
virtual magma::Status WaitNoReset(uint64_t timeout_ms) = 0;
- // If the event is signaled before the timeout expires resets the state to
- // unsignalled and returns MAGMA_STATUS_OK. Only one thread should ever wait on
- // a given semaphore.
+ // If the event is signaled before the timeout expires, resets the state to
+ // unsignalled (if not one shot) and returns MAGMA_STATUS_OK. Only one thread
+ // should ever wait on a given semaphore.
virtual magma::Status Wait(uint64_t timeout_ms) = 0;
magma::Status Wait() { return Wait(UINT64_MAX); }
@@ -77,6 +77,9 @@
// Note that a port wait completion will not autoreset the semaphore.
// On success returns true.
virtual bool WaitAsync(PlatformPort* port, uint64_t key) = 0;
+
+ // Set one shot to prevent reset of the semaphore.
+ virtual void SetOneShot() = 0;
};
} // namespace magma
diff --git a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.cc b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.cc
index 0a87289..8d249208 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.cc
+++ b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.cc
@@ -286,7 +286,36 @@
}
FlowControl(size);
- if (!delegate_->ImportObject(request->object.release(), *object_type, request->object_id))
+ if (!delegate_->ImportObject(request->object.release(), /*flags=*/0, *object_type,
+ request->object_id))
+ SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+}
+
+void ZirconPlatformConnection::ImportObject(ImportObjectRequestView request,
+ ImportObjectCompleter::Sync& completer) {
+ DLOG("ZirconPlatformConnection: ImportObject");
+
+ auto object_type = GetObjectType(request->object_type);
+ if (!object_type) {
+ SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+ return;
+ }
+
+ auto flags = static_cast<uint64_t>(request->flags);
+
+ uint64_t size = 0;
+
+ if (object_type == magma::PlatformObject::BUFFER) {
+ zx::unowned_vmo vmo(request->object.get());
+ zx_status_t status = vmo->get_size(&size);
+ if (status != ZX_OK) {
+ SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+ return;
+ }
+ }
+ FlowControl(size);
+
+ if (!delegate_->ImportObject(request->object.release(), flags, *object_type, request->object_id))
SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
}
diff --git a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.h b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.h
index 0ec4e78..6bec440 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.h
@@ -142,6 +142,8 @@
void ImportObject2(ImportObject2RequestView request,
ImportObject2Completer::Sync& _completer) override;
+ void ImportObject(ImportObjectRequestView request,
+ ImportObjectCompleter::Sync& _completer) override;
void ReleaseObject(ReleaseObjectRequestView request,
ReleaseObjectCompleter::Sync& _completer) override;
void CreateContext(CreateContextRequestView request,
diff --git a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.cc b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.cc
index 3bbb32d..228e172 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.cc
+++ b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.cc
@@ -25,6 +25,8 @@
static_assert(static_cast<uint64_t>(MapFlags::kExecute) == MAGMA_MAP_FLAG_EXECUTE, "mismatch");
static_assert(static_cast<uint64_t>(MapFlags::kGrowable) == MAGMA_MAP_FLAG_GROWABLE, "mismatch");
static_assert(static_cast<uint64_t>(MapFlags::kVendorFlag0) == MAGMA_MAP_FLAG_VENDOR_0, "mismatch");
+using fuchsia_gpu_magma::wire::ImportFlags;
+static_assert(static_cast<uint64_t>(ImportFlags::kEventOneShot) == MAGMA_IMPORT_SEMAPHORE_ONE_SHOT, "mismatch");
// clang-format on
@@ -156,7 +158,7 @@
static_assert(static_cast<uint32_t>(magma::PlatformObject::BUFFER) ==
static_cast<uint32_t>(fuchsia_gpu_magma::wire::ObjectType::kBuffer));
-magma_status_t PrimaryWrapper::ImportObject(zx::handle handle,
+magma_status_t PrimaryWrapper::ImportObject(zx::handle handle, uint64_t flags,
magma::PlatformObject::Type object_type,
uint64_t object_id) {
uint64_t size = 0;
@@ -173,8 +175,10 @@
auto wire_object_type = static_cast<fuchsia_gpu_magma::wire::ObjectType>(object_type);
+ auto import_flags = static_cast<fuchsia_gpu_magma::wire::ImportFlags>(flags);
+
zx_status_t status =
- client_->ImportObject2(std::move(handle), wire_object_type, object_id).status();
+ client_->ImportObject(std::move(handle), import_flags, wire_object_type, object_id).status();
if (status == ZX_OK) {
UpdateFlowControl(size);
}
@@ -498,10 +502,10 @@
: client_(std::move(channel), max_inflight_messages, max_inflight_bytes),
notification_channel_(std::move(notification_channel)) {}
- magma_status_t ImportObject(uint32_t handle, PlatformObject::Type object_type,
+ magma_status_t ImportObject(uint32_t handle, uint64_t flags, PlatformObject::Type object_type,
uint64_t object_id) override {
DLOG("ZirconPlatformConnectionClient: ImportObject");
- magma_status_t result = client_.ImportObject(zx::handle(handle), object_type, object_id);
+ magma_status_t result = client_.ImportObject(zx::handle(handle), flags, object_type, object_id);
if (result != MAGMA_STATUS_OK)
return DRET_MSG(result, "failed to write to channel");
diff --git a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.h b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.h
index 67512d6..c002181 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.h
@@ -22,8 +22,8 @@
public:
PrimaryWrapper(zx::channel channel, uint64_t max_inflight_messages, uint64_t max_inflight_bytes);
- magma_status_t ImportObject(zx::handle handle, magma::PlatformObject::Type object_type,
- uint64_t object_id);
+ magma_status_t ImportObject(zx::handle handle, uint64_t flags,
+ magma::PlatformObject::Type object_type, uint64_t object_id);
magma_status_t ReleaseObject(uint64_t object_id, magma::PlatformObject::Type object_type);
magma_status_t CreateContext(uint32_t context_id);
magma_status_t DestroyContext(uint32_t context_id);
diff --git a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_semaphore.h b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_semaphore.h
index 9421fc4..61072a1 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_semaphore.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_semaphore.h
@@ -32,10 +32,12 @@
bool duplicate_handle(zx::handle* handle_out) const override;
void Reset() override {
- event_.signal(zx_signal(), 0);
- TRACE_DURATION("magma:sync", "semaphore reset", "id", koid_);
+ TRACE_DURATION("magma:sync", "semaphore reset", "id", koid_, "oneshot", is_one_shot_);
TRACE_FLOW_END("magma:sync", "semaphore signal", koid_);
TRACE_FLOW_END("magma:sync", "semaphore wait async", koid_);
+ if (!is_one_shot_) {
+ event_.signal(zx_signal(), 0);
+ }
}
void Signal() override {
@@ -51,6 +53,8 @@
bool WaitAsync(PlatformPort* port, uint64_t key) override;
+ void SetOneShot() override { is_one_shot_ = true; }
+
zx_handle_t zx_handle() const { return event_.get(); }
zx_signals_t zx_signal() const { return ZX_EVENT_SIGNALED; }
@@ -59,6 +63,7 @@
zx::event event_;
uint64_t koid_;
uint64_t local_id_ = 0;
+ bool is_one_shot_ = false;
};
} // namespace magma
diff --git a/src/graphics/lib/magma/src/sys_driver/magma_system_connection.cc b/src/graphics/lib/magma/src/sys_driver/magma_system_connection.cc
index 88d7e45..0ba9d71 100644
--- a/src/graphics/lib/magma/src/sys_driver/magma_system_connection.cc
+++ b/src/graphics/lib/magma/src/sys_driver/magma_system_connection.cc
@@ -253,7 +253,7 @@
}
}
-magma::Status MagmaSystemConnection::ImportObject(uint32_t handle,
+magma::Status MagmaSystemConnection::ImportObject(uint32_t handle, uint64_t flags,
magma::PlatformObject::Type object_type,
uint64_t client_id) {
if (!client_id)
@@ -274,6 +274,9 @@
return MAGMA_DRET_MSG(MAGMA_STATUS_INVALID_ARGS, "failed to import platform semaphore");
platform_sem->set_local_id(client_id);
+ if (flags & MAGMA_IMPORT_SEMAPHORE_ONE_SHOT) {
+ platform_sem->SetOneShot();
+ }
auto iter = semaphore_map_.find(client_id);
if (iter != semaphore_map_.end())
diff --git a/src/graphics/lib/magma/src/sys_driver/magma_system_connection.h b/src/graphics/lib/magma/src/sys_driver/magma_system_connection.h
index f943565d4..49c5050 100644
--- a/src/graphics/lib/magma/src/sys_driver/magma_system_connection.h
+++ b/src/graphics/lib/magma/src/sys_driver/magma_system_connection.h
@@ -33,8 +33,8 @@
~MagmaSystemConnection() override;
- magma::Status ImportObject(uint32_t handle, magma::PlatformObject::Type object_type,
- uint64_t client_id) override;
+ magma::Status ImportObject(uint32_t handle, uint64_t flags,
+ magma::PlatformObject::Type object_type, uint64_t client_id) override;
magma::Status ReleaseObject(uint64_t object_id, magma::PlatformObject::Type object_type) override;
magma::Status CreateContext(uint32_t context_id) override;
magma::Status DestroyContext(uint32_t context_id) override;
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.cc b/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.cc
index 3c158bf..699242c 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.cc
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.cc
@@ -264,7 +264,7 @@
return notification_handler_->GetAsyncDispatcher();
}
-magma::Status MagmaSystemConnection::ImportObject(zx::handle handle,
+magma::Status MagmaSystemConnection::ImportObject(zx::handle handle, uint64_t flags,
fuchsia_gpu_magma::wire::ObjectType object_type,
uint64_t client_id) {
if (!client_id)
@@ -284,6 +284,9 @@
return MAGMA_DRET_MSG(MAGMA_STATUS_INVALID_ARGS, "failed to import platform semaphore");
platform_sem->set_local_id(client_id);
+ if (flags & MAGMA_IMPORT_SEMAPHORE_ONE_SHOT) {
+ platform_sem->SetOneShot();
+ }
auto iter = semaphore_map_.find(client_id);
if (iter != semaphore_map_.end())
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.h b/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.h
index 78d0dbb..2bca144 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.h
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.h
@@ -28,7 +28,8 @@
~MagmaSystemConnection() override;
- magma::Status ImportObject(zx::handle handle, fuchsia_gpu_magma::wire::ObjectType object_type,
+ magma::Status ImportObject(zx::handle handle, uint64_t flags,
+ fuchsia_gpu_magma::wire::ObjectType object_type,
uint64_t client_id) override;
magma::Status ReleaseObject(uint64_t object_id,
fuchsia_gpu_magma::wire::ObjectType object_type) override;
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_magma_system_connection.cc b/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_magma_system_connection.cc
index e067de5..c5180ca 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_magma_system_connection.cc
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_magma_system_connection.cc
@@ -148,8 +148,9 @@
zx::handle duplicate_handle1;
ASSERT_TRUE(semaphore->duplicate_handle(&duplicate_handle1));
- EXPECT_TRUE(connection.ImportObject(
- std::move(duplicate_handle1), fuchsia_gpu_magma::wire::ObjectType::kEvent, semaphore->id()));
+ EXPECT_TRUE(connection.ImportObject(std::move(duplicate_handle1), /*flags=*/0,
+ fuchsia_gpu_magma::wire::ObjectType::kEvent,
+ semaphore->id()));
auto system_semaphore = connection.LookupSemaphore(semaphore->id());
EXPECT_TRUE(system_semaphore);
@@ -160,8 +161,9 @@
ASSERT_TRUE(semaphore->duplicate_handle(&duplicate_handle2));
// Can't import the same id twice
- EXPECT_FALSE(connection.ImportObject(
- std::move(duplicate_handle2), fuchsia_gpu_magma::wire::ObjectType::kEvent, semaphore->id()));
+ EXPECT_FALSE(connection.ImportObject(std::move(duplicate_handle2), /*flags=*/0,
+ fuchsia_gpu_magma::wire::ObjectType::kEvent,
+ semaphore->id()));
EXPECT_TRUE(
connection.ReleaseObject(semaphore->id(), fuchsia_gpu_magma::wire::ObjectType::kEvent));
@@ -184,7 +186,7 @@
MagmaSystemConnection connection(dev, std::move(msd_connection));
constexpr uint32_t kBogusHandle = 0xabcd1234;
- EXPECT_FALSE(connection.ImportObject(zx::handle(kBogusHandle),
+ EXPECT_FALSE(connection.ImportObject(zx::handle(kBogusHandle), /*flags=*/0,
fuchsia_gpu_magma::wire::ObjectType::kEvent, 0));
auto buffer = magma::PlatformBuffer::Create(4096, "test");
@@ -193,7 +195,7 @@
zx::handle buffer_handle;
ASSERT_TRUE(buffer->duplicate_handle(&buffer_handle));
- EXPECT_FALSE(connection.ImportObject(std::move(buffer_handle),
+ EXPECT_FALSE(connection.ImportObject(std::move(buffer_handle), /*flags=*/0,
fuchsia_gpu_magma::wire::ObjectType::kEvent, buffer->id()));
}
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_zircon_connection.cc b/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_zircon_connection.cc
index c7f70ca..092b4d9 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_zircon_connection.cc
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_zircon_connection.cc
@@ -166,7 +166,8 @@
uint32_t handle;
EXPECT_TRUE(buf->duplicate_handle(&handle));
- EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+ buf->id()),
MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
FlowControlCheck(1, buf->size());
@@ -179,7 +180,8 @@
uint32_t handle;
EXPECT_TRUE(buf->duplicate_handle(&handle));
- EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+ buf->id()),
MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
FlowControlCheck(1, buf->size());
@@ -192,7 +194,8 @@
uint32_t handle;
EXPECT_TRUE(buf->duplicate_handle(&handle));
- EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+ buf->id()),
MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->ReleaseObject(shared_data_->test_buffer_id,
magma::PlatformObject::BUFFER),
@@ -209,9 +212,9 @@
uint32_t handle;
EXPECT_TRUE(semaphore->duplicate_handle(&handle));
- EXPECT_EQ(
- client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
- MAGMA_STATUS_OK);
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+ magma::PlatformObject::SEMAPHORE, semaphore->id()),
+ MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
FlowControlCheckOneMessage();
}
@@ -224,9 +227,9 @@
uint32_t handle;
EXPECT_TRUE(semaphore->duplicate_handle(&handle));
- EXPECT_EQ(
- client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
- MAGMA_STATUS_OK);
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+ magma::PlatformObject::SEMAPHORE, semaphore->id()),
+ MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
FlowControlCheckOneMessage();
}
@@ -239,9 +242,9 @@
uint32_t handle;
EXPECT_TRUE(semaphore->duplicate_handle(&handle));
- EXPECT_EQ(
- client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
- MAGMA_STATUS_OK);
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+ magma::PlatformObject::SEMAPHORE, semaphore->id()),
+ MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->ReleaseObject(shared_data_->test_semaphore_id,
magma::PlatformObject::SEMAPHORE),
MAGMA_STATUS_OK);
@@ -289,7 +292,8 @@
uint32_t handle;
EXPECT_TRUE(buf->duplicate_handle(&handle));
- EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+ buf->id()),
MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->MapBuffer(buf->id(), /*address=*/page_size() * 1000,
/*offset=*/1u * page_size(),
@@ -487,7 +491,8 @@
public:
TestDelegate(std::shared_ptr<SharedData> shared_data) : shared_data_(shared_data) {}
- magma::Status ImportObject(zx::handle handle, fuchsia_gpu_magma::wire::ObjectType object_type,
+ magma::Status ImportObject(zx::handle handle, uint64_t flags,
+ fuchsia_gpu_magma::wire::ObjectType object_type,
uint64_t object_id) override {
std::unique_lock<std::mutex> lock(shared_data_->mutex);
switch (object_type) {
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.cc b/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.cc
index 92f0405..1be5d01 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.cc
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.cc
@@ -200,7 +200,38 @@
}
FlowControl(size);
- if (!delegate_->ImportObject(std::move(request->object), *object_type, request->object_id))
+ if (!delegate_->ImportObject(std::move(request->object), /*flags=*/0, *object_type,
+ request->object_id))
+ SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+}
+
+void ZirconConnection::ImportObject(ImportObjectRequestView request,
+ ImportObjectCompleter::Sync& completer) {
+ TRACE_DURATION("magma", "ZirconConnection::ImportObject", "type",
+ static_cast<uint32_t>(request->object_type));
+ MAGMA_DLOG("ZirconConnection: ImportObject");
+
+ auto object_type = ValidateObjectType(request->object_type);
+ if (!object_type) {
+ SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+ return;
+ }
+
+ auto flags = static_cast<uint64_t>(request->flags);
+
+ uint64_t size = 0;
+
+ if (object_type == fuchsia_gpu_magma::wire::ObjectType::kBuffer) {
+ zx::unowned_vmo vmo(request->object.get());
+ zx_status_t status = vmo->get_size(&size);
+ if (status != ZX_OK) {
+ SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+ return;
+ }
+ }
+ FlowControl(size);
+
+ if (!delegate_->ImportObject(std::move(request->object), flags, *object_type, request->object_id))
SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
}
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.h b/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.h
index 0446ac3..dc43316 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.h
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.h
@@ -42,7 +42,7 @@
class Delegate {
public:
virtual ~Delegate() {}
- virtual magma::Status ImportObject(zx::handle handle,
+ virtual magma::Status ImportObject(zx::handle handle, uint64_t flags,
fuchsia_gpu_magma::wire::ObjectType object_type,
uint64_t client_id) = 0;
virtual magma::Status ReleaseObject(uint64_t object_id,
@@ -136,6 +136,8 @@
private:
void ImportObject2(ImportObject2RequestView request,
ImportObject2Completer::Sync& _completer) override;
+ void ImportObject(ImportObjectRequestView request,
+ ImportObjectCompleter::Sync& _completer) override;
void ReleaseObject(ReleaseObjectRequestView request,
ReleaseObjectCompleter::Sync& _completer) override;
void CreateContext(CreateContextRequestView request,
diff --git a/src/graphics/lib/magma/tests/helper/command_buffer_helper.h b/src/graphics/lib/magma/tests/helper/command_buffer_helper.h
index a4376df..0d0f457 100644
--- a/src/graphics/lib/magma/tests/helper/command_buffer_helper.h
+++ b/src/graphics/lib/magma/tests/helper/command_buffer_helper.h
@@ -228,10 +228,10 @@
success = semaphore->duplicate_handle(&duplicate_handle);
MAGMA_DASSERT(success);
wait_semaphores_.push_back(semaphore);
- success =
- connection_
- ->ImportObject(duplicate_handle, magma::PlatformObject::SEMAPHORE, semaphore->id())
- .ok();
+ success = connection_
+ ->ImportObject(duplicate_handle, /*flags=*/0, magma::PlatformObject::SEMAPHORE,
+ semaphore->id())
+ .ok();
MAGMA_DASSERT(success);
abi_wait_semaphore_ids()[i] = semaphore->id();
msd_wait_semaphores_.push_back(
@@ -247,10 +247,10 @@
success = semaphore->duplicate_handle(&duplicate_handle);
MAGMA_DASSERT(success);
signal_semaphores_.push_back(semaphore);
- success =
- connection_
- ->ImportObject(duplicate_handle, magma::PlatformObject::SEMAPHORE, semaphore->id())
- .ok();
+ success = connection_
+ ->ImportObject(duplicate_handle, /*flags=*/0, magma::PlatformObject::SEMAPHORE,
+ semaphore->id())
+ .ok();
MAGMA_DASSERT(success);
abi_signal_semaphore_ids()[i] = semaphore->id();
msd_signal_semaphores_.push_back(
diff --git a/src/graphics/lib/magma/tests/helper/command_buffer_helper_cpp.h b/src/graphics/lib/magma/tests/helper/command_buffer_helper_cpp.h
index b4caf9a..10fe5fa 100644
--- a/src/graphics/lib/magma/tests/helper/command_buffer_helper_cpp.h
+++ b/src/graphics/lib/magma/tests/helper/command_buffer_helper_cpp.h
@@ -202,7 +202,7 @@
MAGMA_DASSERT(success);
wait_semaphores_.push_back(semaphore);
success = connection_
- ->ImportObject(zx::event(std::move(duplicate_handle)),
+ ->ImportObject(zx::event(std::move(duplicate_handle)), /*flags=*/0,
fuchsia_gpu_magma::wire::ObjectType::kEvent, semaphore->id())
.ok();
MAGMA_DASSERT(success);
@@ -221,7 +221,7 @@
MAGMA_DASSERT(success);
signal_semaphores_.push_back(semaphore);
success = connection_
- ->ImportObject(zx::event(std::move(duplicate_handle)),
+ ->ImportObject(zx::event(std::move(duplicate_handle)), /*flags=*/0,
fuchsia_gpu_magma::wire::ObjectType::kEvent, semaphore->id())
.ok();
MAGMA_DASSERT(success);
diff --git a/src/graphics/lib/magma/tests/unit_tests/test_magma_system_connection.cc b/src/graphics/lib/magma/tests/unit_tests/test_magma_system_connection.cc
index 420fde8..4ccc4d5 100644
--- a/src/graphics/lib/magma/tests/unit_tests/test_magma_system_connection.cc
+++ b/src/graphics/lib/magma/tests/unit_tests/test_magma_system_connection.cc
@@ -144,8 +144,8 @@
uint32_t duplicate_handle1;
ASSERT_TRUE(semaphore->duplicate_handle(&duplicate_handle1));
- EXPECT_TRUE(connection.ImportObject(duplicate_handle1, magma::PlatformObject::SEMAPHORE,
- semaphore->id()));
+ EXPECT_TRUE(connection.ImportObject(duplicate_handle1, /*flags=*/0,
+ magma::PlatformObject::SEMAPHORE, semaphore->id()));
auto system_semaphore = connection.LookupSemaphore(semaphore->id());
EXPECT_TRUE(system_semaphore);
@@ -155,8 +155,8 @@
ASSERT_TRUE(semaphore->duplicate_handle(&duplicate_handle2));
// Can't import the same id twice
- EXPECT_FALSE(connection.ImportObject(duplicate_handle2, magma::PlatformObject::SEMAPHORE,
- semaphore->id()));
+ EXPECT_FALSE(connection.ImportObject(duplicate_handle2, /*flags=*/0,
+ magma::PlatformObject::SEMAPHORE, semaphore->id()));
EXPECT_TRUE(connection.ReleaseObject(semaphore->id(), magma::PlatformObject::SEMAPHORE));
@@ -178,7 +178,8 @@
MagmaSystemConnection connection(dev, MsdConnectionUniquePtr(msd_connection));
constexpr uint32_t kBogusHandle = 0xabcd1234;
- EXPECT_FALSE(connection.ImportObject(kBogusHandle, magma::PlatformObject::SEMAPHORE, 0));
+ EXPECT_FALSE(
+ connection.ImportObject(kBogusHandle, /*flags=*/0, magma::PlatformObject::SEMAPHORE, 0));
auto buffer = magma::PlatformBuffer::Create(4096, "test");
ASSERT_TRUE(buffer);
@@ -186,8 +187,8 @@
uint32_t buffer_handle;
ASSERT_TRUE(buffer->duplicate_handle(&buffer_handle));
- EXPECT_FALSE(
- connection.ImportObject(buffer_handle, magma::PlatformObject::SEMAPHORE, buffer->id()));
+ EXPECT_FALSE(connection.ImportObject(buffer_handle, /*flags=*/0, magma::PlatformObject::SEMAPHORE,
+ buffer->id()));
}
TEST(MagmaSystemConnection, BufferSharing) {
diff --git a/src/graphics/lib/magma/tests/unit_tests/test_platform_connection.cc b/src/graphics/lib/magma/tests/unit_tests/test_platform_connection.cc
index 602031b..c49e15e 100644
--- a/src/graphics/lib/magma/tests/unit_tests/test_platform_connection.cc
+++ b/src/graphics/lib/magma/tests/unit_tests/test_platform_connection.cc
@@ -165,7 +165,8 @@
uint32_t handle;
EXPECT_TRUE(buf->duplicate_handle(&handle));
- EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+ buf->id()),
MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
FlowControlCheck(1, buf->size());
@@ -178,7 +179,8 @@
uint32_t handle;
EXPECT_TRUE(buf->duplicate_handle(&handle));
- EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+ buf->id()),
MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
FlowControlCheck(1, buf->size());
@@ -191,7 +193,8 @@
uint32_t handle;
EXPECT_TRUE(buf->duplicate_handle(&handle));
- EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+ buf->id()),
MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->ReleaseObject(shared_data_->test_buffer_id,
magma::PlatformObject::BUFFER),
@@ -208,9 +211,9 @@
uint32_t handle;
EXPECT_TRUE(semaphore->duplicate_handle(&handle));
- EXPECT_EQ(
- client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
- MAGMA_STATUS_OK);
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+ magma::PlatformObject::SEMAPHORE, semaphore->id()),
+ MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
FlowControlCheckOneMessage();
}
@@ -223,9 +226,9 @@
uint32_t handle;
EXPECT_TRUE(semaphore->duplicate_handle(&handle));
- EXPECT_EQ(
- client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
- MAGMA_STATUS_OK);
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+ magma::PlatformObject::SEMAPHORE, semaphore->id()),
+ MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
FlowControlCheckOneMessage();
}
@@ -238,9 +241,9 @@
uint32_t handle;
EXPECT_TRUE(semaphore->duplicate_handle(&handle));
- EXPECT_EQ(
- client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
- MAGMA_STATUS_OK);
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+ magma::PlatformObject::SEMAPHORE, semaphore->id()),
+ MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->ReleaseObject(shared_data_->test_semaphore_id,
magma::PlatformObject::SEMAPHORE),
MAGMA_STATUS_OK);
@@ -288,7 +291,8 @@
uint32_t handle;
EXPECT_TRUE(buf->duplicate_handle(&handle));
- EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+ EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+ buf->id()),
MAGMA_STATUS_OK);
EXPECT_EQ(client_connection_->MapBuffer(buf->id(), /*address=*/page_size() * 1000,
/*offset=*/1u * page_size(),
@@ -483,8 +487,8 @@
public:
TestDelegate(std::shared_ptr<SharedData> shared_data) : shared_data_(shared_data) {}
- magma::Status ImportObject(uint32_t handle, magma::PlatformObject::Type object_type,
- uint64_t object_id) override {
+ magma::Status ImportObject(uint32_t handle, uint64_t flags,
+ magma::PlatformObject::Type object_type, uint64_t object_id) override {
std::unique_lock<std::mutex> lock(shared_data_->mutex);
switch (object_type) {
case magma::PlatformObject::SEMAPHORE: {