MCPcopy Create free account
hub / github.com/NetSys/bess / Resize

Method Resize

core/modules/queue.cc:47–86  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

45 MODULE_CMD_FUNC(&Queue::CommandGetStatus), Command::THREAD_SAFE}};
46
47int Queue::Resize(int slots) {
48 struct llring *old_queue = queue_;
49 struct llring *new_queue;
50
51 int bytes = llring_bytes_with_slots(slots);
52
53 new_queue =
54 reinterpret_cast<llring *>(std::aligned_alloc(alignof(llring), bytes));
55 if (!new_queue) {
56 return -ENOMEM;
57 }
58
59 int ret = llring_init(new_queue, slots, 0, 1);
60 if (ret) {
61 std::free(new_queue);
62 return -EINVAL;
63 }
64
65 /* migrate packets from the old queue */
66 if (old_queue) {
67 bess::Packet *pkt;
68
69 while (llring_sc_dequeue(old_queue, (void **)&pkt) == 0) {
70 ret = llring_sp_enqueue(new_queue, pkt);
71 if (ret == -LLRING_ERR_NOBUF) {
72 bess::Packet::Free(pkt);
73 }
74 }
75
76 std::free(old_queue);
77 }
78
79 queue_ = new_queue;
80
81 if (backpressure_) {
82 AdjustWaterLevels();
83 }
84
85 return 0;
86}
87
88CommandResponse Queue::Init(const bess::pb::QueueArg &arg) {
89 task_id_t tid;

Callers 1

InitMethod · 0.45

Calls 4

llring_bytes_with_slotsFunction · 0.85
llring_initFunction · 0.85
llring_sc_dequeueFunction · 0.85
llring_sp_enqueueFunction · 0.85

Tested by

no test coverage detected