Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 2269
b: refs/heads/master
c: f87a9c3
h: refs/heads/master
i:
  2267: 3b12bfb
v: v3
  • Loading branch information
Thomas Graf authored and David S. Miller committed Jun 19, 2005
1 parent a0ff117 commit 693cfe9
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 21 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 321090e7a468ab33917a0af839a3ae923b1c1bc5
refs/heads/master: f87a9c3ddf08c10d8427bcedf3f53098113136d0
34 changes: 14 additions & 20 deletions trunk/net/sched/sch_generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,15 +311,16 @@ static const u8 prio2band[TC_PRIO_MAX+1] =
generic prio+fifo combination.
*/

#define PFIFO_FAST_BANDS 3

static inline struct sk_buff_head *prio2list(struct sk_buff *skb,
struct Qdisc *qdisc)
{
struct sk_buff_head *list = qdisc_priv(qdisc);
return list + prio2band[skb->priority & TC_PRIO_MAX];
}

static int
pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc)
static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc)
{
struct sk_buff_head *list = prio2list(skb, qdisc);

Expand All @@ -331,36 +332,34 @@ pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc)
return qdisc_drop(skb, qdisc);
}

static struct sk_buff *
pfifo_fast_dequeue(struct Qdisc* qdisc)
static struct sk_buff *pfifo_fast_dequeue(struct Qdisc* qdisc)
{
int prio;
struct sk_buff_head *list = qdisc_priv(qdisc);

for (prio = 0; prio < 3; prio++, list++) {
for (prio = 0; prio < PFIFO_FAST_BANDS; prio++, list++) {
struct sk_buff *skb = __qdisc_dequeue_head(qdisc, list);
if (skb) {
qdisc->q.qlen--;
return skb;
}
}

return NULL;
}

static int
pfifo_fast_requeue(struct sk_buff *skb, struct Qdisc* qdisc)
static int pfifo_fast_requeue(struct sk_buff *skb, struct Qdisc* qdisc)
{
qdisc->q.qlen++;
return __qdisc_requeue(skb, qdisc, prio2list(skb, qdisc));
}

static void
pfifo_fast_reset(struct Qdisc* qdisc)
static void pfifo_fast_reset(struct Qdisc* qdisc)
{
int prio;
struct sk_buff_head *list = qdisc_priv(qdisc);

for (prio=0; prio < 3; prio++)
for (prio = 0; prio < PFIFO_FAST_BANDS; prio++)
__qdisc_reset_queue(qdisc, list + prio);

qdisc->qstats.backlog = 0;
Expand All @@ -369,35 +368,30 @@ pfifo_fast_reset(struct Qdisc* qdisc)

static int pfifo_fast_dump(struct Qdisc *qdisc, struct sk_buff *skb)
{
unsigned char *b = skb->tail;
struct tc_prio_qopt opt;
struct tc_prio_qopt opt = { .bands = PFIFO_FAST_BANDS };

opt.bands = 3;
memcpy(&opt.priomap, prio2band, TC_PRIO_MAX+1);
RTA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt);
return skb->len;

rtattr_failure:
skb_trim(skb, b - skb->data);
return -1;
}

static int pfifo_fast_init(struct Qdisc *qdisc, struct rtattr *opt)
{
int i;
int prio;
struct sk_buff_head *list = qdisc_priv(qdisc);

for (i=0; i<3; i++)
skb_queue_head_init(list+i);
for (prio = 0; prio < PFIFO_FAST_BANDS; prio++)
skb_queue_head_init(list + prio);

return 0;
}

static struct Qdisc_ops pfifo_fast_ops = {
.next = NULL,
.cl_ops = NULL,
.id = "pfifo_fast",
.priv_size = 3 * sizeof(struct sk_buff_head),
.priv_size = PFIFO_FAST_BANDS * sizeof(struct sk_buff_head),
.enqueue = pfifo_fast_enqueue,
.dequeue = pfifo_fast_dequeue,
.requeue = pfifo_fast_requeue,
Expand Down

0 comments on commit 693cfe9

Please sign in to comment.