本文整理汇总了C++中SharedMemBufferPtr::GetAlignment方法的典型用法代码示例。如果您正苦于以下问题:C++ SharedMemBufferPtr::GetAlignment方法的具体用法?C++ SharedMemBufferPtr::GetAlignment怎么用?C++ SharedMemBufferPtr::GetAlignment使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SharedMemBufferPtr
的用法示例。
在下文中一共展示了SharedMemBufferPtr::GetAlignment方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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
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);
}