🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #72375

Re: Problem w sterowniku 8250 - printk pomaga, brak sekcji krytycznej

#72375
From: elonica.pl
Date: Fri, 04 Nov 2011 13:53
71 lines
4128 bytes
On 28 Paź, 00:19, Krzysztof Halasa <k...@pm.waw.pl> wrote:
> "elonica.pl" <bartlomiej.grzeskow...@gmail.com> writes:
> > Mam napisaną własną część sterownika 8250. Dodatkowe kości 16C550
> > podłączone są przez GPIO. Problem jest taki, ze sterownik gubi mi
> > część znaków przesyłanych na /dev/ttySX (pojawia sie tylko jakies
> > 20%). Podczas deboggowania wyszło, ze kiedy wstawię printk na początku
> > w funkcji write_byte(...). Problem znika.
>
> A co to za scalak?
> Teoretycznie jest szansa, ze samo opoznienie cos powoduje (np.
> w przypadku wadliwych operacji I/O), ale bardziej prawdopodobne jest, ze
> udelay() tworzy bariery, ktore zapobiegaja "wyoptymalizowaniu" rzekomo
> zbednego kodu, albo np. zmianie kolejnosci kodu. Domyslam sie ze
> SoCreg() to jakis *(volatile *)... co to za kompilator? Przyjrzalbym sie
> wersji assemblerowej w obu przypadkach. Np. gcc 2.6.x jest znany z tego,
> ze potrafi wyoptymalizowac niektore rzeczy tak, jakby nie byly volatile.
>

Witam,

Scalak to architektura mips-el (Mips little endian).
SoCreg: #define SoCreg(n)		(*((volatile u32 *)(n)))
kompilator: buildroot-gcc342/bin/mipsel-linux-uclibc-gcc

Jak wspominałem udelay nie pomaga, pomaga za to printk wstawiony w
kod.

> > Próbowałem już kilkanaście razy zmieniać delaye, ale nic. Jedyne co mi
> > jeszcze przychodzi do głowy to fakt, ze funkcje read i write nie sa
> > sekcjami krytycznymi. Czy to dobry trop ?
>
> Mam delikatne wrazenie, ze driver 8250 wykonuje tylko jedna operacje
> w danej chwili (sam uzywa spinlocka), co by sugerowalo, ze te funkcje
> nie musza byc "atomic". Ale oczywiscie tak jest tylko pod warunkiem, ze
> zaden inny kod (np. inny driver) ich nie uzywa.
>
> Plik .s (a wlasciwie dwa pliki) powinny rozjasnic sprawe.
> --
> Krzysztof Halasa

Rozumiem, ze chodzi o porównanie plików s "przed" i "po" zmianie.
Mozna je uzyskać stosując -save-temps w wywołaniu kompilatora.
Hmmm... Jak dla mnie zmiany wyglądają niegroźnie. W dzialajacym pliku
(z wywoalniem printk) Doszły dodatkowe wstawki:

Na początku - deklaracja stringa:

	.section	.rodata.str1.4
	.align	2
$LC20:
	.ascii	"+write_byte 0x%x <- %x \n\000"
	.text

I w funkcji write byte:

	.loc 1 404 0
	lui	$4,%hi($LC20)
	move	$5,$16
	move	$6,$17
	.set	noreorder
	.set	nomacro
	jal	printk
	addiu	$4,$4,%lo($LC20)
	.set	macro
	.set	reorder

Dla ścisłości poprzesuwały się tez indeksy $LCXX większe od 20 o jeden
do góry, ale to logiczne.

--
Bartlomiej Grzeskowiak
Technical Details
Message-ID: <c8118b10-8548-4410-8607-6dcfc718eecc@o14g2000yqh.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin.stu.neva.ru!xlned.com!feeder7.xlned.com!news2.euro.net!209.197.12.242.MISMATCH!nx01.iad01.newshosting.com!newshosting.com!69.16.185.21.MISMATCH!npeer03.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!postnews.google.com!o14g2000yqh.googlegroups.com!not-for-mail
References: <0c34e073-bf61-43b8-820d-e5d1634b743f@r2g2000vbj.googlegroups.com> <m3vcra3tw0.fsf@intrepid.localdomain>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin.stu.neva.ru!xlned.com!feeder7.xlned.com!news2.euro.net!209.197.12.242.MISMATCH!nx01.iad01.newshosting.com!newshosting.com!69.16.185.21.MISMATCH!npeer03.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!postnews.google.com!o14g2000yqh.googlegroups.com!not-for-mail
From: "elonica.pl" <bartlomiej.grzeskowiak@gmail.com>
Newsgroups: pl.comp.os.linux.programowanie
Subject: Re: Problem w sterowniku 8250 - printk pomaga, brak sekcji krytycznej
Date: Fri, 4 Nov 2011 06:53:29 -0700 (PDT)
Organization: http://groups.google.com
Lines: 76
Message-ID: <c8118b10-8548-4410-8607-6dcfc718eecc@o14g2000yqh.googlegroups.com>
References: <0c34e073-bf61-43b8-820d-e5d1634b743f@r2g2000vbj.googlegroups.com> <m3vcra3tw0.fsf@intrepid.localdomain>
NNTP-Posting-Host: 193.101.167.170
Mime-Version: 1.0
X-Trace: posting.google.com 1320414809 7171 127.0.0.1 (4 Nov 2011 13:53:29 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Fri, 4 Nov 2011 13:53:29 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: o14g2000yqh.googlegroups.com; posting-host=193.101.167.170; posting-account=8XX-bwoAAAB8TXULBSxONI_rrl5C-PTv
User-Agent: G2/1.0
X-Google-Web-Client: true
X-Google-Header-Order: HUALESNKRC
X-HTTP-UserAgent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110921 Ubuntu/10.04 (lucid) Firefox/3.6.23,gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit