|
@@ -742,36 +742,33 @@ static void prb_open_block(struct tpacket_kbdq_core *pkc1,
|
|
|
|
|
|
smp_rmb();
|
|
|
|
|
|
- if (likely(TP_STATUS_KERNEL == BLOCK_STATUS(pbd1))) {
|
|
|
+ /* We could have just memset this but we will lose the
|
|
|
+ * flexibility of making the priv area sticky
|
|
|
+ */
|
|
|
|
|
|
- /* We could have just memset this but we will lose the
|
|
|
- * flexibility of making the priv area sticky
|
|
|
- */
|
|
|
- BLOCK_SNUM(pbd1) = pkc1->knxt_seq_num++;
|
|
|
- BLOCK_NUM_PKTS(pbd1) = 0;
|
|
|
- BLOCK_LEN(pbd1) = BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
|
|
|
- getnstimeofday(&ts);
|
|
|
- h1->ts_first_pkt.ts_sec = ts.tv_sec;
|
|
|
- h1->ts_first_pkt.ts_nsec = ts.tv_nsec;
|
|
|
- pkc1->pkblk_start = (char *)pbd1;
|
|
|
- pkc1->nxt_offset = pkc1->pkblk_start + BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
|
|
|
- BLOCK_O2FP(pbd1) = (__u32)BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
|
|
|
- BLOCK_O2PRIV(pbd1) = BLK_HDR_LEN;
|
|
|
- pbd1->version = pkc1->version;
|
|
|
- pkc1->prev = pkc1->nxt_offset;
|
|
|
- pkc1->pkblk_end = pkc1->pkblk_start + pkc1->kblk_size;
|
|
|
- prb_thaw_queue(pkc1);
|
|
|
- _prb_refresh_rx_retire_blk_timer(pkc1);
|
|
|
+ BLOCK_SNUM(pbd1) = pkc1->knxt_seq_num++;
|
|
|
+ BLOCK_NUM_PKTS(pbd1) = 0;
|
|
|
+ BLOCK_LEN(pbd1) = BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
|
|
|
|
|
|
- smp_wmb();
|
|
|
+ getnstimeofday(&ts);
|
|
|
|
|
|
- return;
|
|
|
- }
|
|
|
+ h1->ts_first_pkt.ts_sec = ts.tv_sec;
|
|
|
+ h1->ts_first_pkt.ts_nsec = ts.tv_nsec;
|
|
|
|
|
|
- WARN(1, "ERROR block:%p is NOT FREE status:%d kactive_blk_num:%d\n",
|
|
|
- pbd1, BLOCK_STATUS(pbd1), pkc1->kactive_blk_num);
|
|
|
- dump_stack();
|
|
|
- BUG();
|
|
|
+ pkc1->pkblk_start = (char *)pbd1;
|
|
|
+ pkc1->nxt_offset = pkc1->pkblk_start + BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
|
|
|
+
|
|
|
+ BLOCK_O2FP(pbd1) = (__u32)BLK_PLUS_PRIV(pkc1->blk_sizeof_priv);
|
|
|
+ BLOCK_O2PRIV(pbd1) = BLK_HDR_LEN;
|
|
|
+
|
|
|
+ pbd1->version = pkc1->version;
|
|
|
+ pkc1->prev = pkc1->nxt_offset;
|
|
|
+ pkc1->pkblk_end = pkc1->pkblk_start + pkc1->kblk_size;
|
|
|
+
|
|
|
+ prb_thaw_queue(pkc1);
|
|
|
+ _prb_refresh_rx_retire_blk_timer(pkc1);
|
|
|
+
|
|
|
+ smp_wmb();
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -862,10 +859,6 @@ static void prb_retire_current_block(struct tpacket_kbdq_core *pkc,
|
|
|
prb_close_block(pkc, pbd, po, status);
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
- WARN(1, "ERROR-pbd[%d]:%p\n", pkc->kactive_blk_num, pbd);
|
|
|
- dump_stack();
|
|
|
- BUG();
|
|
|
}
|
|
|
|
|
|
static int prb_curr_blk_in_use(struct tpacket_kbdq_core *pkc,
|