• Michal Soltys's avatar
    net/sched/sch_hfsc.c: handle corner cases where head may change invalidating calculated deadline · 12d0ad3b
    Michal Soltys authored
    Realtime scheduling implemented in HFSC uses head of the queue to make
    the decision about which packet to schedule next. But in case of any
    head drop, the deadline calculated for the previous head is not
    necessarily correct for the next head (unless both packets have the same
    length).
    
    Thanks to peek() function used during dequeue - which internally is a
    dequeue operation - hfsc is almost safe from this issue, as peek()
    dequeues and isolates the head storing it temporarily until the real
    dequeue happens.
    
    But there is one exception: if after the class activation a drop happens
    before the first dequeue operation, there's never a chance to do the
    peek().
    
    Adding peek() call in enqueue - if this is the first packet in a new
    backlog period AND the scheduler has realtime curve defined - fixes that
    one corner case. The 1st hfsc_dequeue() will use that peeked packet,
    similarly as every subsequent hfsc_dequeue() call uses packet peeked by
    the previous call.
    Signed-off-by: default avatarMichal Soltys <soltys@ziu.info>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    12d0ad3b
sch_hfsc.c 40.5 KB