On 30/07/20(Thu) 21:13, YASUOKA Masahiko wrote:
> sys/net/if_ethersubr.c:
> 372 void
> 373 ether_input(struct ifnet *ifp, struct mbuf *m)
> (snip)
> 519 #if NPPPOE > 0 || defined(PIPEX)
> 520         case ETHERTYPE_PPPOEDISC:
> 521         case ETHERTYPE_PPPOE:
> 522                 if (m->m_flags & (M_MCAST | M_BCAST))
> 523                         goto dropanyway;
> 524 #ifdef PIPEX
> 525                 if (pipex_enable) {
> 526                         struct pipex_session *session;
> 527 
> 528                         if ((session = pipex_pppoe_lookup_session(m)) != 
> NULL) {
> 529                                 pipex_pppoe_input(m, session);
> 530                                 return;
> 531                         }
> 532                 }
> 533 #endif
> 
> previously a packet which branchces to #529 is enqueued.
> 
> If the diff removes the queue, then the pipex input routine is
> executed by the NIC's interrupt handler.
>
> The queues had been made to avoid that kind of situations.

Since many releases there's a generic queue between every NIC interrupt
handler and the softnet thread.

With this diff the pipex routine is still executed in a task.  Previously
it was the `if_input_task_locked' which correspond to all netisr, now it
is `ifiq_task' which calls if_input_process().

Reply via email to