[so2] [IXIA Challange] Initializare transfer

Adrian Stanciu adrian.stanciu.pub at gmail.com
Mon Mar 20 08:49:48 EET 2017


2017-03-19 14:38 GMT+02:00 Stefan Alexandru Aldoiu via so2
<so2 at cursuri.cs.pub.ro>:
> Salut,
>
> Am probleme cu intializarea CU-ului, si anume reusesc sa il pornesc(intrucat
> CU-status devine Active-lpq) dar nu resesc sa transmit nici un pachet.
>
> Fazele de initializare abordate:
> (Dupa ce am intializat netdevice,am  alocat csr in spatiul io , am alocat
> spatiu consistent
> pentru toate tcb -pasul 1 si 2 din checker functioneaza):
> 1. load_cu_base
> 2. cu_start
> 3. creare tcb pentru config(un pachet gol cu comanda config)
> (la toate am initializat genereal pointer conform manual developer)
>
> Dupa ceva teste observ ca CU-ul nu reuseste sa citeasca comanda din tcb,
> intrucat am plasat bitul de suspent in ea, dar CU-ul ramane Active multi
> timp dupa (>10 sec).
>
> Deci, intrebarile ar fi urmatoarele:

Cu siguranță sunt mai multe variante de implementare (mai multe
feature-uri implementate sau nu); voi răspunde în funcție de cum am
implementat eu.

> 1. Fazele de intializare sunt corecte?

Eu nu am folosit comandă de config. În primul rând am setat adresa mac
pe device (vezi secțiunea 6.4.2.2 din manual [1]) și apoi am pornit
CU-ul.

> 2. Am  nedumeriri in legatura cu structura unui TCB. Eu am abordat fix
> structura  descrisa in
> lab6 MIT. Am observat ca in manual developer se precizeaza ca sa se tina
> cont de aliniere.
> Alinierea este un element critic in implementarea noastra?

Nu am folosit aliniere.

> 3. Tot in legatura cu structura TCB din 100.c, observ folosirea unei
> structuri config,care este
> actualizata la plasarea un CB de configurare. Deasemenea, folosirea,si
> configurarea unei astfel de structuri este critica pentru CB-ul de tip
> config?. Trebuie obligatoriu trimis un astfel de CB inainte de  send-ul
> efectiv de pachete TCB?

Nu am folosit un struct config.

> 4. Pentru alocarea ring-ului DMA, am folosit pci_alloc_consistent si aloc
> liniar TCB la dimensiunea maxima(ethernet). Este o abordare ok, sau mai
> trebuie facut ceva ca CU/RU sa aiba access la acceasta zona de memorie ?
> (mentionez ca ma folosesc de spatiul de adresa intors de dma_handler -
> dma_addr).

Poți să folosești pci_pool_create() și pci_pool_alloc(), precum în [2].

> 5. Nu am inteles exact problemele de sincronizare la care ar trebui sa fim
> atenti.

Trebuie să faci sincronizare între contexte diferite care lucrează cu
date partajate. Trebuie să nu dai comenzi către device din locuri
diferite în același timp. Vezi [3][4].


[1] http://application-notes.digchip.com/027/27-45688.pdf
[2] http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c#L1904
[3] http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c#L841
[4] http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c#L872

Adrian


More information about the so2 mailing list