This patch adds putData function in HwmemImpl to munmap copied data.
Signed-off-by: Yelin Jeong <yelini.jeong@samsung.com>
status =
comm_.extractGenericBuffer (model_buf, model->getData (), nullptr, 0, NPUBIN_META_SIZE);
+ model->putData();
if (status != 0) {
logerr (TAG, "Failed to extract generic buffer: %d\n", status);
goto delete_exit;
status = comm_.extractGenericBuffer (model_buf, hwmem_prog->getData (), nullptr,
model->getMetadata ()->getMetaSize (),
model->getMetadata ()->getProgramSize ());
+ hwmem_prog->putData ();
if (status != 0) {
logerr (TAG, "Failed to extract generic buffer: %d\n", status);
goto delete_exit;
status = comm_.extractGenericBuffer (model_buf, hwmem_extended->getData (), nullptr,
NPUBIN_META_SIZE, extended_size);
+ hwmem_extended->putData();
if (status != 0) {
logerr (TAG, "Failed to extract generic buffer: %d\n", status);
goto delete_exit;
model_buf, hwmem_weight->getData (), nullptr,
model->getMetadata ()->getMetaSize () + model->getMetadata ()->getProgramSize (),
model->getMetadata ()->getWeightSize ());
+ hwmem_weight->putData();
if (status != 0) {
logerr (TAG, "Failed to extract generic buffer: %d\n", status);
goto delete_exit;
return impl_->getData (this);
}
+void
+HWmem::putData () {
+ if (impl_ == nullptr)
+ return;
+
+ return impl_->putData (this);
+}
+
/**
* @brief allocate the hwmem data
* @param[in] size size to allocate
if (hwmem->getDriverAPI () == nullptr)
return;
- if (hwmem->getBaseAddr () != nullptr) {
- hwmem->getDriverAPI ()->munmap (hwmem->getBaseAddr (), ALIGNED_SIZE (hwmem->getSize ()));
-
- hwmem->setBaseAddr (nullptr);
- }
-
- if (hwmem->getDmabuf () >= 0) {
- hwmem->getDriverAPI ()->dealloc (hwmem->getDmabuf (), hwmem->isContiguous ());
-
- hwmem->setDmabuf (-1);
- hwmem->setSize (0);
- }
+ hwmem->putData();
+ hwmem->dealloc();
}
/**
return static_cast<char *> (hwmem->getBaseAddr ()) + offset;
}
+void
+HWmemDevice::putData (HWmem *hwmem) const {
+ if (hwmem->getDriverAPI () == nullptr)
+ return;
+
+ if (hwmem->getBaseAddr () != nullptr) {
+ hwmem->getDriverAPI ()->munmap (hwmem->getBaseAddr (), ALIGNED_SIZE (hwmem->getSize ()));
+
+ hwmem->setBaseAddr (nullptr);
+ }
+}
+
/** Impl. of HWmemChunk */
/**
virtual int alloc (HWmem *hwmem, size_t size) const { return 0; }
virtual int dealloc (HWmem *hwmem) const { return 0; }
virtual char *getData (HWmem *hwmem) const { return nullptr; }
+ virtual void putData(HWmem *hwmem) const {}
};
/** HWmem allocated by device */
int alloc (HWmem *hwmem, size_t size) const;
int dealloc (HWmem *hwmem) const;
char *getData (HWmem *hwmem) const;
+ void putData(HWmem *hwmem) const;
};
/** HWmem served by another hwmem */
/** the below APIs require its HWmem impl. */
char *getData ();
+ void putData();
int alloc (size_t size);
int dealloc ();
EXPECT_EQ (hwmem->alloc (size), 0);
EXPECT_EQ (hwmem->getSize (), size);
EXPECT_NE (hwmem->getData (), nullptr);
+ hwmem->putData();
EXPECT_EQ (hwmem->dealloc (), 0);
delete hwmem;