Code:
Unable to handle kernel paging request at virtual address 9fe42d78
vs.
Code:
Unable to handle kernel paging request at virtual address 02197c14
Und ja, der
swapper
-Prozess ist dafür zuständig, die passenden Seiten aus dem Swap-Space in den realen Hauptspeicher zu laden, wenn diese benötigt werden (oder auch für die Auslagerung, was aber m.W. auch bei der 7530ax gar nicht wirklich genutzt wird) - dazu müssen sie aber erst einmal überhaupt im Kernel-Adress-Space existieren (sprich: die MMU muß dafür auch Einträge enthalten) und die o.g. Fehlermeldung ist i.d.R. ein Zeichen dafür, daß ein Kernel-Prozess auf eine NICHT VORHANDENE Adresse zugreifen will, weil ihm von irgendwo eine ungültige solche untergeschoben wurde und da vor dem Zugriffsversuch keine Prüfung erfolgte.
Schaut man sich die restlichen Register an, liegen praktisch alle Adressen irgendwo oberhalb von 0xA0000000 - und auch ohne die exakte Struktur des Speichers bei diesem Modell zu kennen, würde ich behaupten, daß alles unterhalb dieser Adressen nicht gemappt ist.
Wer stürzt da ab und was sagt uns der Backtrace? Es ist tatsächlich zweimal der
swapper
-Prozess - aber im Trace sieht man eben auch, daß es sich in beiden Fällen um eine IRQ-Behandlung und innerhalb dieser dann wieder um das Aktualisieren irgendwelcher Counter bzw. Statistiken handelt, was VOR dem Zugriff auf so eine ungültige Adresse erfolgen sollte.
Was ist denn da jeweils zuletzt aktiv gewesen? Nun, auf CPU 0 und 2 praktisch nichts (ob das an einer Affinität liegt oder nicht, weiß ich aber auch nicht), jedoch auf CPU 1 ist IN BEIDEN FÄLLEN der Prozess
tdm_pcm
sehr aktiv und ich bin bereit, ein kleines Vermögen darauf zu verwetten (ich hätte noch einige 7390 in der Kiste), daß das TDM in dessen Namen für "Time Division Multiplexing" steht und das ist zufällig genau das Verfahren, mit dem beim DECT die Timeslots genutzt/geteilt werden. Die anderen beiden CPUs "idlen" so vor sich hin - das Problem MUSS also auch auf CPU 1 liegen und eine (eigentlich nicht unterbrechbare, aber aufgrund massiver Probleme dann eben doch nicht richtig serialisierte/serialisierbare) Interrupt-Behandlung erscheint dann doch die logischste Erklärung. Und es ist eben auffällig, daß das alles auch auf dem einen Core geschieht und innerhalb des einen (Kernel-)Treibers/Prozesses, was aber beim IRQ-Handling auch wieder "normal" wäre, weil das nun mal nicht parallelisierbar ist (zumindest nicht bei derselben Quelle eines IRQ).
Auch ohne zu wissen, woran das letztlich liegt mit den sichtbaren Problemen ... daß es irgendetwas mit IRQ-Behandlung zu tun hat (und nichts mit einem echten Speicherproblem), läßt sich ja nun ziemlich sicher aus den Fehlerdaten ablesen - auch ohne die exakte Bedeutung jedes Registers dazu kennen zu müssen. Zieht man dann noch den Namen des Prozesses in Betracht und die Tatsache, daß parallel dazu dann DECT-Probleme "berichtet" werden, sollte das auch die Zuordnung des (angenommenen) TDM zum DECT (und nicht zu anderen Technologien, die ggf. auch noch mit TDM arbeiten) einigermaßen plausibel erscheinen lassen. Die Meldungen im Kernel-Log müssen ja auch erst mal ausgegeben werden - die Tatsache, daß die dann erst hinter dem ersten Zugriff mit ungültiger Adresse protokolliert werden, sagt auch nicht zwingend etwas über die tatsächliche "Reihenfolge" der Aktionen.
Die
kprintf
's können sogar ihrerseits die Ursache für die ungültigen Speicherzugriffe sein, wenn diese erst bei ihrer Bearbeitung auftreten (und die sind ja offensichtlich in einer "regulären" IRQ-Behandlung eher selten, wenn sie nur bei ungültigen DECT-Frames ausgegeben werden) - und innerhalb einer IRQ-Behandlung ist mitunter generell schlecht swappen. Auch wenn ich nicht weiß, ob AVM bei diesem Modell (des SoC) auch auf die eigene Implementierung eines
Yield
-Mechanismus setzt (es gibt für die 7530ax bei AVM jedenfalls keine Kernel-Quellen), mit dem eine schnellere Behandlung von Interrupts erfolgt, weil dabei keine vollständigen Kontextwechsel im Kernel vollzogen werden.
Der Preis, den man bei Verwendung dieser Art der IRQ-Behandlung zahlt, ist Speicherplatz - innerhalb so einer IRQ-Behandlung darf dann nämlich genau keine Paging-Exception auftreten ... und um das zu verhindern, weist AVM den eigenen Kernel-Modulen jeweils fixen Speicher zu, der gar nicht ausgelagert werden DARF. Dazu nutzt man u.a. die Modul-Tabellen in den
avm_kernel_config
-Strukturen (ich wette, die hat auch dieses Modell) - da steht dann jeweils drin, wieviel von diesem "non-paging memory" so ein LKM braucht und die Speicherzuordnungsfunktionen im Kernel hat AVM so abgeändert, daß da jeweils der richtige "Speichertyp" zugewiesen wird.
Wie gesagt - die Quellen fehlen zwar, aber bei anderen Modellen geht AVM genau so vor, wie ich es oben beschrieben habe ... und schaut man auf die Adressen, die bei den beiden Abstürzen ausgegeben wurden (die liegen ja nun vollkommen verquer im Adressraum), dann sinkt die Wahrscheinlichkeit, daß das "echter Speicher" an dieser Stelle ist (der dann auch nur von einem Hardware-Fehler betroffen sein kann), gegen Null. Denn von irgendwelchen Versuchen, gerade Daten vom User- in den Kernel-Space zu kopieren (oder umgekehrt), ist in keinem Backtrace etwas zu sehen - und der Kernel-Space (in dem sich dann auch der Kernel-Code nur bewegt, wenn er nicht über definierte Schnittstellen mit seiner Umgebung kommuniziert), liegt ja nicht irgendwo über den gesamten Adressraum des Prozessors verstreut.
Ich habe mir mal erlaubt, die Kernel-Panics der beiden Abstürze hier zu editieren und diesen ganzen Müll mit den Leerzeilen zu entfernen - vielleicht kann man ja in "kondensierter Form" besser erkennen/nachvollziehen, wovon ich oben überhaupt schreibe.
EDIT: Was ich jetzt erst gesehen habe (weil's ganz am Ende steht) ist das "Fazit" für dieses Problem (in beiden Logs):
Code:
Kernel panic - not syncing: Fatal exception in interrupt
... schöner kann man fast nicht ausdrücken, daß im IRQ-Handling selbst ein (weiteres) Problem aufgetreten ist.
EDIT2:
Im zweiten Log sieht man gar nichts davon
DAS kann ich nun wieder gar nicht nachvollziehen:
Rich (BBCode):
peh@vidar:~> grep -ri DECT Downloads/panic1_condensed.txt
<4>[ 2005.590835][1]Modules linked in: eth_oam(P) nf_conntrack_ipv6 nf_defrag_ipv6 xt_connbytes ip6table_filter ulpcmlink(P) krtp(PO) userman_mod(PO) bcm_usb ohci_platform ohci_hcd ehci_platform ehci_hcd sch_fq_codel sch_llq nf_log_ipv4 nf_log_common xt_LOG xt_limit xt_state nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack xt_SKIPLOG xt_TCPMSS nfnetlink ip6table_mangle ip6_tables iptable_mangle iptable_filter ip_tables xt_blog xt_multiport xt_mark xt_u32 xt_flowlabel xt_mac_extend xt_mac xt_DSCP xt_dscp adsldd(PO) wl(PO) igs(PO) emf(PO) hnd(O) cfg80211 kdsldmod(PO) dect_io(P) avm_dect(P) capi_codec(P) cchardev(PO) cprocfsmod(PO) otp(P) bcm_thermal pwrmngtd(P) usbcore usb_common bcmmcast bcm_enet bcmxtmcfg(P) bcmxtmrtdrv archer(P) isdn_fbox_fon5(P) cmdlist(P) pktflow(P) bcm_license(P) pcmlink(P) bcm_ingqos(P) chipinfo(P) bcmvlan(P) rtc_avm bcmlibs(P) Piglet_noemif(P) bcm_pcie_hcd wlcsm(P) led_module(PO)
<3>[ 2005.769840][F1][DECTDRV_ERR] pcm count 105 != 101
<3>[ 2005.775790][F1][DECTDRV_ERR] pcm count 0 != 107
peh@vidar:~> grep -ri DECT Downloads/panic2_condensed.txt
<4>[ 2586.212046][1]Modules linked in: kspeedtest(O) eth_oam(P) nf_conntrack_ipv6 nf_defrag_ipv6 xt_connbytes ip6table_filter ulpcmlink(P) krtp(PO) bcm_usb userman_mod(PO) ohci_platform ohci_hcd ehci_platform ehci_hcd sch_fq_codel sch_llq nf_log_ipv4 nf_log_common xt_LOG xt_limit xt_state nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack xt_SKIPLOG xt_TCPMSS nfnetlink ip6table_mangle ip6_tables iptable_mangle iptable_filter ip_tables xt_blog xt_multiport xt_mark xt_u32 xt_flowlabel xt_mac_extend xt_mac xt_DSCP xt_dscp adsldd(PO) wl(PO) igs(PO) emf(PO) hnd(O) cfg80211 kdsldmod(PO) dect_io(P) avm_dect(P) capi_codec(P) cchardev(PO) cprocfsmod(PO) otp(P) bcm_thermal pwrmngtd(P) usbcore usb_common bcmmcast bcm_enet bcmxtmcfg(P) bcmxtmrtdrv archer(P) isdn_fbox_fon5(P) cmdlist(P) pktflow(P) bcm_license(P) bcm_ingqos(P) pcmlink(P) chipinfo(P) bcmvlan(P) bcmlibs(P) rtc_avm Piglet_noemif(P) bcm_pcie_hcd wlcsm(P) led_module(PO)
<3>[ 2586.407982][F1][DECTDRV_ERR] pcm count 0 != 116
<3>[ 2586.419985][F1][DECTDRV_ERR] PCM frame 424c NOK b5 00 c1 00 c3 00 c6 00 c4 00 c3 00 c3 00 b6 00 ab 00 a6 00 a1 00 a2 00 b2 00 ba 00 bf 00 c3 00 c2 00 c3 00 be 00 bc 00 c0 00 bc 00 b8 00 bb 00 b0 00 a3 00 a2 00 9e 00 a3 00 a0 00 a8 00 b4 00
<3>[ 2586.419990][F1][DECTDRV_ERR] checksum error(len=185): calculated: 0x424c != 0xbb00 (received)
<3>[ 2586.423979][F1][pcmlink]error: workarround: strange dect-ctrl-slot-value fefe -> resync
<3>[ 2586.423985][F1][DECTDRV_ERR] pcm count 0 != 1
<3>[ 2586.435972][F1][DECTDRV_ERR] PCM frame 3ab2 NOK a1 00 9f 00 a4 00 a4 00 a6 00 b2 00 c0 00 c5 00 c6 00 c5 00 c6 00 c3 00 c2 00 bf 00 b9 00 b3 00 ae 00 a0 00 9e 00 9b 00 a5 00 ad 00 bf 00 bf 00 c3 00 c4 00 c5 00 c4 00 bf 00 c2 00 b8 00 aa 00
<3>[ 2586.435976][F1][DECTDRV_ERR] checksum error(len=165): calculated: 0x3ab2 != 0x9b00 (received)
<3>[ 2586.435979][F1][DECTDRV_ERR] pcm count 0 != 1
<3>[ 2586.447971][F1][DECTDRV_ERR] PCM frame 3ab2 NOK a1 00 9f 00 a4 00 a4 00 a6 00 b2 00 c0 00 c5 00 c6 00 c5 00 c6 00 c3 00 c2 00 bf 00 b9 00 b3 00 ae 00 a0 00 9e 00 9b 00 a5 00 ad 00 bf 00 bf 00 c3 00 c4 00 c5 00 c4 00 bf 00 c2 00 b8 00 aa 00
<3>[ 2586.447975][F1][DECTDRV_ERR] checksum error(len=165): calculated: 0x3ab2 != 0x9b00 (received)
<3>[ 2586.603918][F1][DECTDRV_ERR] pcm count 0 != 1
<3>[ 2586.615910][F1][DECTDRV_ERR] PCM frame 3ab2 NOK a1 00 9f 00 a4 00 a4 00 a6 00 b2 00 c0 00 c5 00 c6 00 c5 00 c6 00 c3 00 c2 00 bf 00 b9 00 b3 00 ae 00 a0 00 9e 00 9b 00 a5 00 ad 00 bf 00 bf 00 c3 00 c4 00 c5 00 c4 00 bf 00 c2 00 b8 00 aa 00
<3>[ 2586.615914][F1][DECTDRV_ERR] checksum error(len=165): calculated: 0x3ab2 != 0x9b00 (received)
<3>[ 2586.615917][F1][DECTDRV_ERR] pcm count 0 != 1
<3>[ 2586.627922][F1][DECTDRV_ERR] PCM frame 6961 NOK a1 00 9f 00 a4 00 a4 00 a6 00 b2 00 c0 00 c5 00 c6 00 c5 00 c6 00 c3 00 c2 00 bf 00 b9 00 b3 00 ae 00 a0 00 9e 00 9b 00 a5 00 ad 00 bf 00 bf 00 c3 00 c4 00 c5 00 c4 00 bf 00 c2 00 b8 00 aa 00
<3>[ 2586.627926][F1][DECTDRV_ERR] checksum error(len=165): calculated: 0x6961 != 0xffff (received)
peh@vidar:~>
... ich sehe da in beiden Protokollen eine ausreichende Menge an Fehlermeldungen vom
DECTDRV, die überdies im Text auch noch ein
PCM (sicherlich für "Pulse Code Modulation") enthalten, was dann den zweiten Teil des "sprechenden Namens" von
tdm_pcm
(siehe Log) bildet.
PS: Ich habe mir beim Kopieren aus dem zweiten Beitrag in seinen Vorgänger die Freiheit genommen, in der Ausgabe für panic1_condensed.txt die Zeilen zu entfernen, die erkennbar lange vor dem Timestamp zum Fehlerzeitpunkt (Sekunde 2005 im Log) lagen - das macht den Punkt, den ich eigentlich meinte, deutlicher.