Commit bc6b3490 authored by Antoine Kaufmann's avatar Antoine Kaufmann
Browse files

i40e: properly handle disabled queues

parent e26c1219
......@@ -267,6 +267,9 @@ void queue_admin_tx::cmd_run(void *desc, uint32_t idx, void *data)
void queue_admin_tx::desc_fetched(void *desc, uint32_t idx)
{
if (!enabled)
return;
struct i40e_aq_desc *d = reinterpret_cast<struct i40e_aq_desc *>(desc);
if ((d->flags & I40E_AQ_FLAG_RD)) {
uint64_t addr = d->params.external.addr_low |
......@@ -281,6 +284,9 @@ void queue_admin_tx::desc_fetched(void *desc, uint32_t idx)
void queue_admin_tx::data_fetched(void *desc, uint32_t idx, void *data)
{
if (!enabled)
return;
cmd_run(desc, idx, data);
}
......
......@@ -89,7 +89,7 @@ class queue_base {
public:
queue_base(uint32_t &reg_head_, uint32_t &reg_tail_);
void reg_updated();
bool is_enabled();
};
class queue_admin_tx : public queue_base {
......
......@@ -19,7 +19,7 @@ queue_base::queue_base(uint32_t &reg_head_, uint32_t &reg_tail_)
void queue_base::trigger_fetch()
{
if (fetch_head == reg_tail)
if (!enabled || fetch_head == reg_tail)
return;
......@@ -58,6 +58,11 @@ void queue_base::reg_updated()
trigger_fetch();
}
bool queue_base::is_enabled()
{
return enabled;
}
void queue_base::desc_writeback(const void *desc, uint32_t idx)
{
dma_wb *dma = new dma_wb(*this, desc_len);
......@@ -92,6 +97,9 @@ void queue_base::desc_writeback_indirect(const void *desc, uint32_t idx,
void queue_base::desc_written_back(uint32_t idx)
{
if (!enabled)
return;
std::cerr << "descriptor " << idx << " written back" << std::endl;
reg_head = (idx + 1) % len;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment