本文整理汇总了C++中SharedMemBufferPtr::GetBufSize方法的典型用法代码示例。如果您正苦于以下问题:C++ SharedMemBufferPtr::GetBufSize方法的具体用法?C++ SharedMemBufferPtr::GetBufSize怎么用?C++ SharedMemBufferPtr::GetBufSize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SharedMemBufferPtr
的用法示例。
在下文中一共展示了SharedMemBufferPtr::GetBufSize方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: exception
void
CQ::Init(uint16_t qId, uint16_t entrySize, uint16_t numEntries,
const SharedMemBufferPtr memBuffer, bool irqEnabled, uint16_t irqVec)
{
Queue::Init(qId, entrySize, numEntries);
mIrqEnabled = irqEnabled;
mIrqVec = irqVec;
LOG_NRM("Allocating discontiguous CQ memory in tnvme");
if (numEntries < 2)
LOG_WARN("Number elements breaches spec requirement");
if (memBuffer == MemBuffer::NullMemBufferPtr) {
LOG_DBG("Passing an uninitialized SharedMemBufferPtr");
throw exception();
} else if (GetIsAdmin()) {
// There are no appropriate methods for an NVME device to report ASC/ACQ
// creation errors, thus since ASC/ASQ may only be contiguous then don't
// allow these problems to be injected, at best they will only succeed
// to seg fault the app or crash the kernel.
LOG_DBG("Illegal memory alignment will corrupt");
throw exception();
} else if (memBuffer->GetBufSize() < GetQSize()) {
LOG_DBG("Q buffer memory ambiguous to passed size params");
LOG_DBG("Mem buffer size = %d, Q size = %d", memBuffer->GetBufSize(),
GetQSize());
throw exception();
} else if (memBuffer->GetAlignment() != sysconf(_SC_PAGESIZE)) {
// Nonconformance to page alignment will seg fault the app or crash
// the kernel. This state is not testable since no errors can be
// reported by hdw, thus disallow this attempt.
LOG_DBG("Q content memory shall be page aligned");
throw exception();
}
// Zero out the content memory so the P-bit correlates to a newly alloc'd Q.
// Also assuming life time ownership of this object if it wasn't created
// by the RsrcMngr.
mDiscontigBuf = memBuffer;
mDiscontigBuf->Zero();
// We are creating a discontiguous IOCQ
struct nvme_prep_cq q;
q.cq_id = GetQId();
q.elements = GetNumEntries();
q.contig = false;
CreateIOCQ(q);
LOG_NRM(
"Created CQ: (id, entrySize, numEntry, IRQEnable) = (%d, %d, %d, %s)",
GetQId(), GetEntrySize(), GetNumEntries(), GetIrqEnabled() ? "T" : "F");
}
示例2: FrmwkEx
bool
MemBuffer::Compare(const SharedMemBufferPtr compTo)
{
if (compTo->GetBufSize() != GetBufSize()) {
throw FrmwkEx(HERE, "Compare buffers not same size: %d != %d",
compTo->GetBufSize(), GetBufSize());
}
if (memcmp(compTo->GetBuffer(), GetBuffer(), GetBufSize()) != 0) {
LOG_ERR("Detected data miscompare");
return false;
}
return true;
}
示例3: exception
void
PrpData::SetPrpBuffer(send_64b_bitmask prpFields, SharedMemBufferPtr memBuffer)
{
if (prpFields & ~ALLOWED_BITS) {
LOG_DBG("Param prpFields only supports bits specific to PRP fields");
throw exception();
} else if (mBufRO != NULL) {
LOG_DBG("Buffer already setup as RO, cannot also setup RW buffer");
throw exception();
}
// Do allow associating a new buffer with an existing cmd, free the old 1st.
// These are just user space buffers and it will allow reusing an existing
// cmd over and over by simply changing its associated data buffer.
if (mBufRW != MemBuffer::NullMemBufferPtr)
mBufRW.reset();
mBufRW = memBuffer;
mBufSize = memBuffer->GetBufSize();
mPrpFields = prpFields;
}
示例4: FrmwkEx
void
SQ::Init(uint16_t qId, uint16_t entrySize, uint32_t numEntries,
const SharedMemBufferPtr memBuffer, uint16_t cqId)
{
uint64_t work;
mCqId = cqId;
Queue::Init(qId, entrySize, numEntries);
LOG_NRM("Create SQ: (id,cqid,entrySize,numEntries) = (%d,%d,%d,%d)",
GetQId(), GetCqId(), GetEntrySize(), GetNumEntries());
LOG_NRM("Allocating discontiguous SQ memory in tnvme");
if (numEntries < 2) {
throw FrmwkEx(HERE, "Number elements breaches spec requirement");
} else if (gRegisters->Read(CTLSPC_CAP, work) == false) {
throw FrmwkEx(HERE, "Unable to determine MQES");
}
// Detect if doing something that looks suspicious/incorrect/illegal
work &= CAP_MQES;
work += 1; // convert to 1-based
if (work < (uint64_t)numEntries) {
LOG_WARN("Creating Q with %d entries, but DUT only allows %d",
numEntries, (uint32_t)work);
}
if (memBuffer == MemBuffer::NullMemBufferPtr) {
throw FrmwkEx(HERE, "Passing an uninitialized SharedMemBufferPtr");
} else if (GetIsAdmin()) {
// There are no appropriate methods for an NVME device to report ASC/ACQ
// creation errors, thus since ASC/ASQ may only be contiguous then don't
// allow these problems to be injected, at best they will only succeed
// to seg fault the app or crash the kernel.
throw FrmwkEx(HERE, "Illegal memory alignment will corrupt");
} else if (memBuffer->GetBufSize() < GetQSize()) {
LOG_ERR("Q buffer memory ambiguous to passed size params");
throw FrmwkEx(HERE, "Mem buffer size = %d, Q size = %d",
memBuffer->GetBufSize(), GetQSize());
} else if (memBuffer->GetAlignment() != sysconf(_SC_PAGESIZE)) {
// Nonconformance to page alignment will seg fault the app or crash
// the kernel. This state is not testable since no errors can be
// reported by hdw, thus disallow this attempt.
throw FrmwkEx(HERE, "Q content memory shall be page aligned");
}
// Zero out the content memory so the P-bit correlates to a newly alloc'd Q.
// Also assuming life time ownership of this object if it wasn't created
// by the RsrcMngr.
mDiscontigBuf = memBuffer;
mDiscontigBuf->Zero();
// We are creating a discontiguous IOSQ
struct nvme_prep_sq q;
q.sq_id = GetQId();
q.cq_id = GetCqId();
q.elements = GetNumEntries();
q.contig = false;
CreateIOSQ(q);
}