Pokud jsem ten commit dobře pochopil, mají ty VIA čipy bug při čtení jednoho z registrů. Commit pouze zabrání tomu čtení, přičemž přestane fungovat funkcionalita zajišťovaná tím registrem (zjištění přesného času na FW lince).
Jak vlastně může bug v PCI periférii způsobit reboot celého systému? To je tvrdý HW reset, nebo se zblázní následný kód v kernelu a ten vyvolá reset softwarově (což by teoreticky mohlo jít opravit pořádně)?
V tomhle případě jde o hardware nebo firmware bug, který dost možná bude opraven v nějaké další verzi AGESA balíku od AMD.
Commit tu opravu zavádí přes linux quirks, což je framework právě pro tyhle ad-hoc opravy špatného HW/FW. Early return z funkce to zapne právě tehdy, když detekuje, že běží na ryzenu s patřičným VIA čipem.
Lidem s jiným hardwarem tak žádná funkcionalita nezmizí, jen zaplatí malou runtime cenu za další "if" v driveru. Lidem s postiženým hardwarem se přestane resetovat počítač :-)
V případě, že by cena za if byla moc velká (např. v nějaké vnitřní smyčce), tak se to dá dělat i live-patchingem, kdy quirks kód po detekci hardwaru příslušnou problematickou funkci nahradí no-opem přímo v kódu Linuxu v paměti.
Pokud to dobře chápu, quirk dělá to, že místo přečtení konkrétní hodnoty v registru vrací natvrdo nulu. Přímo v popis commitu je:
====
This commit suppresses the unexpected system reboot in the combination of
hardware. It avoids the access itself. As a result, the software stack can
not provide the hardware time anymore to unit drivers, userspace
applications, and nodes in the same IEEE 1394 bus. It brings apparent
disadvantage since time-aware application programs require it, while
time-unaware applications are available again; e.g. sbp2.
===
Takže to dopad má a očividně ne úplně nepodstatný.
Pořád ale nerozumím tomu, jakým mechanizmem bug v PCI zařízení resetuje celý systém.
Jak už tu bylo řečeno, workaround je jen pro postižené systémy. Na nich je na výběr jen reset, nebo funkčnost aspoň zařízení, které tu časovou funkčnost nepotřebují. Kdo chce plně pracovat s FireWire, tak si pořídí jiný počítač (AMD vždycky mělo různé problémy s rozhraními, např dlouho nepodpora Thunderboltu a v dávných dobách pamatuju o dost nižší rychlost na USB 2.0, např kopírování z disku).
A jak dojde k resetu systému? Ten FireWire řadič je čip na desce, který může dělat cokoli. Může sáhnout někam do RAM, do registrů CPU nebo nějakého jiného čipu.
Princip "opravy" samozřejmě chápu, quirky se v driverech používají všude. Ale zajímá mě, jakým konkrétním mechanizmem PCI zařízení (i čip natvrdo na desce je pořád "jen" PCI zařízení) shodí systém. Do RAM se dostane jen přes DMA řadič čipsetu (jehož přístupy musí nakonfigurovat driver), opravdu má PCI zařízení RW přístup přímo k registrům CPU? Jaký jiný čip by mohl ovlivnit, jakým mechanizmem?
Opravdu mě to technicky zajímá, domníval jsem se, že PCI zařízení jsou od systému poměrně odstíněná, navíc tady to jde ještě přes další PCI-e -> PCI bridge.
To udělá firmware, prostě mu nějaká komponenta hodí výjimku a exception handler to vyřeší resetem. Nebo tam pro tuto konkrétní výjimku handler není, takže to spadne do default handleru, kterým je reset. Jistě by to šlo řešit méně destruktivně, např. resetem PCIe root hubu, ale musel by to někdo udělat (zaplatit, otestovat) :)
Děkuji, už se dostáváme ke konkrétnímu mechanizmu. Výjimkou komponenty myslíš error packet vrácený daným PCI/e zařízením, jak je popisované v https://www.design-reuse.com/articles/38374/pcie-error-logging-and-handling-on-a-typical-soc.html ? Handling těchto stavů je ještě pod kernelem, ve firmwaru čipsetu, který pak třeba některé některé pošle dál kernelu přes nějaký IRQ a některé vyřeší sám, třeba tím resetem celého systému? Díky moc.
"AMD vždycky mělo různé problémy s rozhraními, např dlouho nepodpora Thunderboltu"
Kopete hezky ale na špatnou stranu.
Za průtahy kolem TB může intel.
"Rychlost USB"
Reálná Rychlost USB kolísá od 20MB/s po 30MB/s
Největší vliv má OS a driver. Opět kopete na špatnou stranu. A navíc děláte velblouda z komára. Rozdíly jsou většinou kolem 10%.
Za prvé, Thunderbolt byl už dlouho otevřený, ale AMD čekalo s předěláním I/O části SoC na nové paměti. Bylo to o levnější udělat najednou.
Za druhé, já v té době žil a problém s rychlostí kopírování souborů jsem zažil u sebe, přátel a dokonce v té době brácha notebooky i recenzoval. Na Intelu to jelo plnou rychlostí a na AMD ty 2/3.