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

i40e: fix descriptor writeback

parent 0ceb071a
...@@ -77,8 +77,8 @@ class queue_base { ...@@ -77,8 +77,8 @@ class queue_base {
size_t data_len; size_t data_len;
size_t data_capacity; size_t data_capacity;
void prepared(); virtual void prepared();
void processed(); virtual void processed();
protected: protected:
void data_fetch(uint64_t addr, size_t len); void data_fetch(uint64_t addr, size_t len);
...@@ -133,7 +133,9 @@ class queue_base { ...@@ -133,7 +133,9 @@ class queue_base {
virtual void done(); virtual void done();
}; };
public:
std::string qname; std::string qname;
protected:
desc_ctx *desc_ctxs[MAX_ACTIVE_DESCS]; desc_ctx *desc_ctxs[MAX_ACTIVE_DESCS];
uint32_t active_first_pos; uint32_t active_first_pos;
uint32_t active_first_idx; uint32_t active_first_idx;
...@@ -298,6 +300,7 @@ class lan_queue_tx : public lan_queue_base { ...@@ -298,6 +300,7 @@ class lan_queue_tx : public lan_queue_base {
virtual void prepare(); virtual void prepare();
virtual void process(); virtual void process();
virtual void processed();
}; };
......
...@@ -498,6 +498,13 @@ void lan_queue_tx::tx_desc_ctx::process() ...@@ -498,6 +498,13 @@ void lan_queue_tx::tx_desc_ctx::process()
tq.trigger_tx(); tq.trigger_tx();
} }
void lan_queue_tx::tx_desc_ctx::processed()
{
d->cmd_type_offset_bsz = I40E_TX_DESC_DTYPE_DESC_DONE <<
I40E_TXD_QW1_DTYPE_SHIFT;
desc_ctx::processed();
}
lan_queue_tx::dma_hwb::dma_hwb(lan_queue_tx &queue_, uint32_t pos_, lan_queue_tx::dma_hwb::dma_hwb(lan_queue_tx &queue_, uint32_t pos_,
uint32_t cnt_, uint32_t nh_) uint32_t cnt_, uint32_t nh_)
: queue(queue_), pos(pos_), cnt(cnt_), next_head(nh_) : queue(queue_), pos(pos_), cnt(cnt_), next_head(nh_)
......
...@@ -118,8 +118,8 @@ void queue_base::trigger_writeback() ...@@ -118,8 +118,8 @@ void queue_base::trigger_writeback()
break; break;
uint32_t cnt = std::min(avail, max_writeback_capacity()); uint32_t cnt = std::min(avail, max_writeback_capacity());
if (active_first_pos + cnt > len) if (active_first_idx + cnt > len)
cnt = len - active_first_pos; cnt = len - active_first_idx;
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << qname << ": writing back avail=" << avail << " cnt=" << cnt << std::cerr << qname << ": writing back avail=" << avail << " cnt=" << cnt <<
......
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