helenos-nicf team mailing list archive
-
helenos-nicf team
-
Mailing list archive
-
Message #00116
Re: uvolnovani paketu po zavolani write_packet
Ahoj,
co si myslite o tom, ze bychom uvolnovani paketu ve funkci
nic_send_message_impl nechali na funkci write_packet?
data->write_packet(data, packet);
log_debug("Packet %d sent.", pid);
-pq_release_remote(data->net_phone, pid);
packet = next;
Ja totiz paket nechci uvonit hned, ale az za nakou dobu, az si ho
precte sitovka.
Myslim, ze to neni uplne dobry napad, a to proto, ze - jestli jsem
pochopil Deckeho spravne - v budoucim
networking stacku nebudou packety alokovany pomoci DMA frameworku
(myslim, ze konkretne rikal, ze
o existenci DMA ma vedet jen driver a ne aplikace alokujici packety; ze
v konecne fazi nebude
packet server rikal urcite). Tudiz se stejne nebude nikdo moci
spolehnout, ze muze primo adresu, na ktere jsou data
packetu ulozena, predat karte (adresa se nemusi vejit do registru,
jde-li o 32 bit kartu v 64 bit systemu, jestli bude
zarucena spojitost packetu si nejsem jist - ale bude-li zacinat na
zacatku stranky, tak zarucena bude)
a driver bude muset chte nechte data kopirovat do svych internich bufferu.
Pro vraceni paketu by slo udelat nejakou obalovaci funkci, aby porad
driver nemusel nic vedet o phonech.
Takova funkce uz tam je: nic_driver_release_packet
Muzu si samozrejme napsat vlastni funkci misto nic_send_message_impl,
ale prijde mi to pitome, kdyz by se lisila jen v jednom radku.
Druha moznost reseni je podminit to podle navratu write_packet:
log_debug("Sending packet %d.", pid);
-data->write_packet(data, packet);
+int rc = data->write_packet(data, packet);
log_debug("Packet %d sent.", pid);
+if (rc == E_RELEASE_PACKET) {
+ pq_release_remote(data->net_phone, pid);
+}
-pq_release_remote(data->net_phone, pid);
packet = next;
Kdyz uz, tak IMO naopak - packet bude uvolnen, nebude-li receno jinak.
Ale prilis
se mi to nezamlouva - v podstate to dost znecitelni, ze funkce dopadla
spravne (misto EOK
tam bude nejaky divny kod).
Michy
Follow ups
References