[OSy] Dorder a meziproc. interrupty
Martin Suchan
martin.suchan at gmail.com
Mon Feb 16 16:33:30 CET 2009
Dobry den,
sice trochu pozde, ale prece bych se jeste rad zeptal:
jak presne funguji meziprocesorove interrupty pomoci dorder? Jak jsem
se docetl v dokumentaci:
Setting any bit causes an interrupt pending on the processor specified
by the bit index. Writing a command with the most significant bit set
causes to deassert all interrupt endings.
Chapu to, ze:
Zapsani hodnoty bez posledniho bitu vyvola interrupt na vsech
procesorech s bitem 1. Pokud zapisu do dorder 0x80000000, tak se zrusi
vsechny meziproc. interrupty.
V semestralce jsem zatim narazil na nutnost pouziti dorder interruptu
jen v pripade aktualizace ASIDu mezi procesosry pri mazani z virt.
pameti.
pokud ve funkci, ktera maze oblast ve virt pameti zavolam aktualizaci
na dalsi procesory:
*((volatile uint32_t *) DORDER_ADDRESS) = 0x7FFFFFFF;
a v obsluze preruseni vykonam aktualizaci a chci signalizovat hotovo
*((volatile uint32_t *) DORDER_ADDRESS) = 0x80000000;
tak se mi obsluha na danem procesoru zacykli a preruseni se nemohu zbavit...
Toto testuji zatim na simulatoru s 1 cpu a i tak se to cykli.
Prochazel jsem historii konference a zjistil jsem, ze podobne se
projevoval bug v msimu kolem verze 1.3. U sebe pouzivam nejnovejsi
verzi msimu, co je dostupna, tudiz bug by tam byt nemel.
Dale se v konferenci zminoval novy zpusob pouzivani dorder device
pomoci dvou registru. V dokumentaci na webu o tom neni nic zmineno,
jen v prispevcich. Co jsem z nich matne pochytil je, ze "pri zapisu na
registr DORDER_ADDRESS + 4 se pomoci bitove masky urci, kde vypnout
interrupty"
Zkousel jsem i toto, ale bez uspechu.
Zajimalo by me tedy, jak dorder doopravdy funguje.
Taktez me v teto souvislosti prekvapuje, ze toto tema pouziti dorder
zatim letos v konferenci nepadlo. Bud jsou vsechny tymy pracujici na
rozsirenem zadani 1 tak bystre, ze s tim nemaji problemy, a nebo zatim
nikdo meziprocesorove interrupty nepouziva... loni toto tema bylo
resene dobre ve dvaceti prispevcich.
Na zaver bych jeste mel dve drobne otazky, na ktere nevim presne
odpoved: kam se ukladaji parametry volani funkce, kdyz jich je vice
nez 4? Na parametry existuji registry a0 - a3... ale vice jich neni.
Narazili jsme treba na problem printf v user modu pri vice nez 4
parametrech printf.
A na konec, obcas se mi v pristupu na nezname misto v pameti stalo, ze
nastala vyjimka s neznamym parametrem v cause registru = hodnota 30,
ktera podle specifikace je reserved. Je to normalni chovani
simulatoru, popr. znamena to v pripade msimu neco, nebo je to jen
"border" bez vyznamu, co se nacetl na nahodnem miste v pameti?
S pozdravem Martin Suchan
More information about the NSWI004
mailing list