Tak se to nakonec podarilo (snad ;-) ).
Ad reseni s 10 Mbity - funguje, procesor to v pohode stiha. Byl tu jisty pozadavek na to, ze by se to tak ale resit nemuselo. Samozrejme je to velice jednoduche a spolehlive reseni, takze bude take pouzito.
Ad upravy kernelu/ovladace - dev.c je spatne misto, to uz je vrstva nad ovladacem. Pomohla uprava ovladace, kde nebylo potreba delat nic moc sloziteho. Zjednodusene - staci monitorovat pakety za sekundu a kdyz je jich moc, tak na nejakou dobu zablokovat IRQ. Tedy presne to reseni, ktere zde nekdo uvadel.
Reseni trochu detailneji (mozna nepouziju uplne spravnou terminologii):
Ze sitovky prijde irq, to vyvola handler v ovladaci, ktery zamaskuje preruseni a informuje pres NAPI rozhrani vrstvu nad ovldacem o tom, ze si ma ze sitovky pollingem nacist pakety. To zavola metodu pro polling z driveru sitovky. V teto metode spocitam, kolik cca paketu prislo v poslednim merenem casovem useku. Pokud je to pod limit, pak po nacteni vsech dat ze sitovky se ihned povoli irq. Pokud je to nad limit, pak se irq nepovoli, ale jen se nastavi priznak, ze se tak ma pozdeji stat. Do driveru jsem pridal timer, ktery tika kazdych 100 ms (zkusmo zvolena hodnota) a ktery v pripade, ze je nastaven priznak povoleni irq, toto irq povoli. Povoleni irq je tak v pripade zahlceni nahodne zpozdeno o 0 - 100 ms.
Pro praci s timerem sem pouzit funkce setup_timer, mod_timer, del_timer, ktere jsem nasel jako vhodne pro pouziti v kernelu. Nema s nimi nekdo nejakou negativni zkusenost?
Nic sloziteho ani prevratneho.
V prvnim updatu sw pro tajmene zarizeni bude moznost zapnout 10 Mbit a pozdejsi vetsi update zrejme zahrne jadro s upravenym ovladacem.
Dekuji za rady a napady :-)