Fragen zu AVM FCDSL2 Freeze (speziell an Karsten Keil)
Hallo, ich betreibe jetzt schon seit laengerem eine AVM FCDSL2 Karte die mir Kopfzerbrechen bereitet. Nach einigen Tagen ist kein Zugang zum Internet mehr moeglich. Das Modul neuzuladen endet in Kernel Traces, es hilft nur ein kompletter Neustart. Zunaechst habe ich gedacht es liegt am entsprechenden Rechner, der ist vor ein paar Wochen allerdings komplett ausgetauscht worden. Da der Treiber von AVM nicht mehr weiter entwickelt wird, braeuchte ich den Rat von Leuten die sich damit auskennen. Ich benutze die SuSE 10 Version fuer 64bit (3.11.07). Um den Treiber ueberhaupt unter neuen Kerneln zum laufen zu bekommen (aktuell 2.6.25.11) waren eine Reihe der bekannten Patches noetig (wenn das hier von Belang ist kann ich das Patch-File gerne nachliefern). Fakt ist, nach einigen Tagen Verbindungszeit ist keine Einwahl mehr moeglich: Jul 27 06:48:01 r01 pppd[16367]: capiplugin: leased line (adslpppoe) Jul 27 06:48:05 r01 kernel: kcapi: appl 2 ncci 0x10402 down Jul 27 06:48:05 r01 pppd[16367]: capiplugin: disconnect(remote): "" -> "" outgoing 0x0000 (0x3312) - No additional information Jul 27 06:48:10 r01 pppd[16367]: capiplugin: leased line (adslpppoe) Jul 27 06:48:14 r01 kernel: kcapi: appl 2 ncci 0x10502 down Jul 27 06:48:14 r01 pppd[16367]: capiplugin: disconnect(remote): "" -> "" outgoing 0x0000 (0x3312) - No additional information Jul 27 06:48:19 r01 pppd[16367]: capiplugin: leased line (adslpppoe) Jul 27 06:48:22 r01 kernel: kcapi: appl 2 ncci 0x10602 down Jul 27 06:48:22 r01 pppd[16367]: capiplugin: disconnect(remote): "" -> "" outgoing 0x0000 (0x3312) - No additional information Jul 27 06:48:27 r01 pppd[16367]: capiplugin: leased line (adslpppoe) Jul 27 06:48:31 r01 kernel: kcapi: appl 2 ncci 0x10702 down Jul 27 06:48:31 r01 pppd[16367]: capiplugin: disconnect(remote): "" -> "" outgoing 0x0000 (0x3312) - No additional information Jul 27 06:48:32 r01 pppd[16367]: capiplugin: exit Jul 27 06:48:32 r01 pppd[16367]: Exit. Das Modul neu zuladen oder selbst der Aufruf von capiinfo endet in verschiedenen Traces: Jul 21 10:13:10 r01 kernel: BUG: unable to handle kernel NULL pointer dereference at 0000000000000292 Jul 21 10:13:10 r01 kernel: IP: [<ffffffff804e996b>] capi_ctr_handle_message+0x1c1/0x293 Jul 21 10:13:10 r01 kernel: PGD 0 Jul 21 10:13:10 r01 kernel: Oops: 0000 [1] SMP Jul 21 10:13:10 r01 kernel: CPU 0 Jul 21 10:13:10 r01 kernel: Modules linked in: capidrv isdn fcdsl2 nls_iso8859_1 xt_multiport xt_TCPMSS xt_tcpudp ipt_REJECT xt_state iptable_mangle iptable_nat iptabl e_filter ip_tables x_tables ppp_synctty nf_nat_ftp nf_nat nf_conntrack_ipv4 nf_conntrack_ftp nf_conntrack [last unloaded: isdn] Jul 21 10:13:10 r01 kernel: Pid: 12307, comm: fcdsl2_s Not tainted 2.6.25.10-ufn #2 Jul 21 10:13:10 r01 kernel: RIP: 0010:[<ffffffff804e996b>] [<ffffffff804e996b>] capi_ctr_handle_message+0x1c1/0x293 Jul 21 10:13:10 r01 kernel: RSP: 0018:ffff81012f48fb00 EFLAGS: 00010002 Jul 21 10:13:10 r01 kernel: RAX: ffffffff80825a60 RBX: 0000000000000202 RCX: 00000000ffffffff Jul 21 10:13:10 r01 kernel: RDX: 0000000000000000 RSI: ffffffff806fcb80 RDI: ffffffff806fcb80 Jul 21 10:13:10 r01 kernel: RBP: 0000000000000246 R08: ffff81013a4f8a10 R09: ffff81007ca8d480 Jul 21 10:13:10 r01 kernel: R10: 0000000000000286 R11: ffff81007ca8d480 R12: ffff81007ca8d480 Jul 21 10:13:10 r01 kernel: R13: 0000000000000000 R14: 0000000000000000 R15: ffff81012f48fbe0 Jul 21 10:13:10 r01 kernel: FS: 00007f154c7526d0(0000) GS:ffffffff8070b000(0000) knlGS:0000000000000000 Jul 21 10:13:10 r01 kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b Jul 21 10:13:10 r01 kernel: CR2: 0000000000000292 CR3: 0000000000201000 CR4: 00000000000006e0 Jul 21 10:13:10 r01 kernel: DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 Jul 21 10:13:10 r01 kernel: DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Jul 21 10:13:10 r01 kernel: Process fcdsl2_s (pid: 12307, threadinfo ffff81012f48e000, task ffff81009c823220) Jul 21 10:13:10 r01 kernel: Stack: 0000000000000000 0000000000000002 0000000000008001 0000000000000000 Jul 21 10:13:10 r01 kernel: 0000000000000000 ffffffff8800042e 0000000000000000 ffffffff88001f69 Jul 21 10:13:10 r01 kernel: 0000000000000000 ffffffff88009ac3 0000000000000000 0000000000000001 Jul 21 10:13:10 r01 kernel: Call Trace: Jul 21 10:13:10 r01 kernel: [<ffffffff8800042e>] ? :fcdsl2:CA_PUT_MESSAGE+0xe/0x20 Jul 21 10:13:10 r01 kernel: [<ffffffff88001f69>] ? :fcdsl2:CAPI_PUT_CMSG_INTERNAL+0x9/0x10 Jul 21 10:13:10 r01 kernel: [<ffffffff88009ac3>] ? :fcdsl2:CAPI_Handler+0x2b3/0x900 Jul 21 10:13:10 r01 kernel: [<ffffffff8804b81f>] ? :fcdsl2:BLK_ATMTxIrqHandler+0x1f/0x30 Jul 21 10:13:10 r01 kernel: [<ffffffff8802b143>] ? :fcdsl2:DSLpc_TxIrqHandler+0xa3/0x580 Jul 21 10:13:10 r01 kernel: [<ffffffff88000351>] ? :fcdsl2:EnterCritical+0x11/0x20 Jul 21 10:13:10 r01 kernel: [<ffffffff8800f0e0>] ? :fcdsl2:ri_init_dma+0x0/0x30 Jul 21 10:13:10 r01 kernel: [<ffffffff88000fb9>] ? :fcdsl2:_CM_Schedule+0x99/0x150 Jul 21 10:13:10 r01 kernel: [<ffffffff88001099>] ? :fcdsl2:CM_Schedule+0x29/0x40 Jul 21 10:13:10 r01 kernel: [<ffffffff8806d704>] ? :fcdsl2:sched_thread+0x22a/0x262 Jul 21 10:13:10 r01 kernel: [<ffffffff802480ac>] ? autoremove_wake_function+0x0/0x2e Jul 21 10:13:10 r01 kernel: [<ffffffff8020ce08>] ? child_rip+0xa/0x12 Jul 21 10:13:10 r01 kernel: [<ffffffff8800f0e0>] ? :fcdsl2:ri_init_dma+0x0/0x30 Jul 21 10:13:10 r01 kernel: [<ffffffff8804ba95>] ? :fcdsl2:Block_TxSend+0x65/0x70 Jul 21 10:13:10 r01 kernel: [<ffffffff8806d4da>] ? :fcdsl2:sched_thread+0x0/0x262 Jul 21 10:13:10 r01 kernel: [<ffffffff8020cdfe>] ? child_rip+0x0/0x12 Jul 21 10:13:10 r01 kernel: Jul 21 10:13:10 r01 kernel: Jul 21 10:13:10 r01 kernel: Code: 0f b6 50 02 0f b6 40 03 c1 e0 08 09 c2 0f b7 c2 3d f0 00 00 00 7f 21 48 63 d0 48 c7 c0 60 5a 82 80 48 8b 5c d0 f8 48 85 db 74 0d <83> bb 90 00 00 00 00 0f 84 89 00 00 00 48 89 ee 48 c7 c7 80 cb Jul 21 10:13:10 r01 kernel: RIP [<ffffffff804e996b>] capi_ctr_handle_message+0x1c1/0x293 Jul 21 10:13:10 r01 kernel: RSP <ffff81012f48fb00> Jul 21 10:13:10 r01 kernel: CR2: 0000000000000292 Jul 21 10:13:10 r01 kernel: ---[ end trace bf677374453ae113 ]--- oder: Jul 25 04:09:09 r01 kernel: kcapi: appl 2 ncci 0x10802 down Jul 25 04:09:09 r01 kernel: fcdsl2: Removing registered applications! Jul 25 04:09:09 r01 kernel: kcapi: appl 2 ncci 0x10802 down Jul 25 04:09:09 r01 kernel: BUG: unable to handle kernel paging request at 0000000900000009 Jul 25 04:09:09 r01 kernel: IP: [<ffffffff804eb5a5>] capilib_free_ncci+0x31/0x6c Jul 25 04:09:09 r01 kernel: PGD 3e531067 PUD 0 Jul 25 04:09:09 r01 kernel: Oops: 0002 [1] SMP Jul 25 04:09:09 r01 kernel: CPU 0 Jul 25 04:09:09 r01 kernel: Modules linked in: capidrv isdn fcdsl2 nls_iso8859_1 xt_multiport xt_TCPMSS xt_tcpudp ipt_REJECT xt_state iptable_mangle iptable_nat iptabl e_filter ip_tables x_tables ppp_synctty nf_nat_ftp nf_nat nf_conntrack_ipv4 nf_conntrack_ftp nf_conntrack [last unloaded: isdn] Jul 25 04:09:09 r01 kernel: Pid: 26026, comm: fcdsl2_s Not tainted 2.6.25.10-ufn #2 Jul 25 04:09:09 r01 kernel: RIP: 0010:[<ffffffff804eb5a5>] [<ffffffff804eb5a5>] capilib_free_ncci+0x31/0x6c Jul 25 04:09:09 r01 kernel: RSP: 0000:ffff810135b65cd0 EFLAGS: 00010282 Jul 25 04:09:09 r01 kernel: RAX: 0000000000000000 RBX: ffff8100936b8540 RCX: ffffffff806cdb08 Jul 25 04:09:09 r01 kernel: RDX: 0000000900000001 RSI: 0000000000000086 RDI: ffff8100936b8540 Jul 25 04:09:09 r01 kernel: RBP: 0000000000000000 R08: ffffffff806cdaf0 R09: ffff810001013148 Jul 25 04:09:09 r01 kernel: R10: 0000000000000046 R11: 0000000000000000 R12: ffff810132baf344 Jul 25 04:09:09 r01 kernel: R13: ffff81013a11f3c4 R14: ffff810139fba624 R15: ffff810139fba61c Jul 25 04:09:09 r01 kernel: FS: 00007f3ac61796d0(0000) GS:ffffffff8070b000(0000) knlGS:0000000000000000 Jul 25 04:09:09 r01 kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b Jul 25 04:09:09 r01 kernel: CR2: 0000000900000009 CR3: 000000003e501000 CR4: 00000000000006e0 Jul 25 04:09:09 r01 kernel: DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 Jul 25 04:09:09 r01 kernel: DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Jul 25 04:09:09 r01 kernel: Process fcdsl2_s (pid: 26026, threadinfo ffff810135b64000, task ffff81012fc66600) Jul 25 04:09:09 r01 kernel: Stack: ffff8100916b2ec4 ffffffff8806ee2c 0000000000010802 0000000000000000 Jul 25 04:09:09 r01 kernel: ffff810091516384 0000000000000000 ffffffff8800f0e0 ffffffff880004ae Jul 25 04:09:09 r01 kernel: ffffffff8800f0e0 ffffffff8800966d ffff810139fba61c 0000000000000000 Jul 25 04:09:09 r01 kernel: Call Trace: Jul 25 04:09:09 r01 kernel: [<ffffffff8806ee2c>] :fcdsl2:remove_ncci+0x2c/0xab Jul 25 04:09:09 r01 kernel: [<ffffffff8800f0e0>] :fcdsl2:ri_init_dma+0x0/0x30 Jul 25 04:09:09 r01 kernel: [<ffffffff880004ae>] :fcdsl2:CA_FREE_NCCI+0xe/0x20 Jul 25 04:09:09 r01 kernel: [<ffffffff8800f0e0>] :fcdsl2:ri_init_dma+0x0/0x30 Jul 25 04:09:09 r01 kernel: [<ffffffff8800966d>] :fcdsl2:CAP_BDoDisconnectB3Resp+0x2d/0x70 Jul 25 04:09:09 r01 kernel: [<ffffffff88002688>] :fcdsl2:__CAPI_RELEASE+0xb8/0x230 Jul 25 04:09:09 r01 kernel: [<ffffffff8800f0e0>] :fcdsl2:ri_init_dma+0x0/0x30 Jul 25 04:09:09 r01 kernel: [<ffffffff880019e3>] :fcdsl2:CA_MAP_GET_CMSG+0x33/0x80 Jul 25 04:09:09 r01 kernel: [<ffffffff88000fca>] :fcdsl2:_CM_Schedule+0xaa/0x150 Jul 25 04:09:09 r01 kernel: [<ffffffff8024a9a5>] hrtimer_start+0xfd/0x11f Jul 25 04:09:09 r01 kernel: [<ffffffff80230d58>] hrtick_set+0x9e/0xf7 Jul 25 04:09:09 r01 kernel: [<ffffffff8057bfe0>] thread_return+0x6b/0xac Jul 25 04:09:09 r01 kernel: [<ffffffff8021267b>] read_tsc+0x5/0x7 Jul 25 04:09:09 r01 kernel: [<ffffffff80255033>] getnstimeofday+0x2f/0x83 Jul 25 04:09:09 r01 kernel: [<ffffffff80255097>] do_gettimeofday+0x10/0x32 Jul 25 04:09:09 r01 kernel: [<ffffffff8806f9d9>] :fcdsl2:os_gettimeofday+0xe/0x12 Jul 25 04:09:09 r01 kernel: [<ffffffff88000711>] :fcdsl2:CA_GET_TIME+0x11/0x20 Jul 25 04:09:09 r01 kernel: [<ffffffff88000351>] :fcdsl2:EnterCritical+0x11/0x20 Jul 25 04:09:09 r01 kernel: [<ffffffff8800e4a3>] :fcdsl2:B2Co_SelectChanInfo+0x13/0x90 Jul 25 04:09:09 r01 kernel: [<ffffffff88000371>] :fcdsl2:LeaveCritical+0x11/0x20 Jul 25 04:09:09 r01 kernel: [<ffffffff8801e0f7>] :fcdsl2:B2_PPPoETimerPolling+0x17/0x50 Jul 25 04:09:09 r01 kernel: [<ffffffff8800f0e0>] :fcdsl2:ri_init_dma+0x0/0x30 Jul 25 04:09:09 r01 kernel: [<ffffffff88001099>] :fcdsl2:CM_Schedule+0x29/0x40 Jul 25 04:09:09 r01 kernel: [<ffffffff8806d704>] :fcdsl2:sched_thread+0x22a/0x262 Jul 25 04:09:09 r01 kernel: [<ffffffff802480ac>] autoremove_wake_function+0x0/0x2e Jul 25 04:09:09 r01 kernel: [<ffffffff8020ce08>] child_rip+0xa/0x12 Jul 25 04:09:09 r01 kernel: [<ffffffff8800f0e0>] :fcdsl2:ri_init_dma+0x0/0x30 Jul 25 04:09:09 r01 kernel: [<ffffffff8804ba95>] :fcdsl2:Block_TxSend+0x65/0x70 Jul 25 04:09:09 r01 kernel: [<ffffffff8806d4da>] :fcdsl2:sched_thread+0x0/0x262 Jul 25 04:09:09 r01 kernel: [<ffffffff8020cdfe>] child_rip+0x0/0x12 Jul 25 04:09:09 r01 kernel: Jul 25 04:09:09 r01 kernel: Jul 25 04:09:09 r01 kernel: Code: f9 89 f0 eb 45 66 39 43 10 75 3c 39 53 14 75 37 0f b7 f0 48 c7 c7 35 e1 68 80 31 c0 e8 43 b3 d4 ff 48 8b 13 48 8b 43 08 48 89 df <48> 89 42 08 48 89 10 48 c7 43 08 00 02 20 00 48 c7 03 00 01 10 Jul 25 04:09:09 r01 kernel: RIP [<ffffffff804eb5a5>] capilib_free_ncci+0x31/0x6c Jul 25 04:09:09 r01 kernel: RSP <ffff810135b65cd0> Jul 25 04:09:09 r01 kernel: CR2: 0000000900000009 Jul 25 04:09:09 r01 kernel: ---[ end trace 472c1183f94efeeb ]--- Weiterhin treten waehrend des normalen Betriebs diverse Meldungen der folgenden Art auf: ... kcapi: msgid 10748 ncci 0x10202 not on queue kcapi: msgid 10750 ncci 0x10202 not on queue kcapi: msgid 11023 ncci 0x10202 not on queue kcapi: msgid 50400 ncci 0x10202 not on queue kcapi: msgid 50401 ncci 0x10202 not on queue kcapi: msgid 50946 ncci 0x10202 not on queue ... Nach etlichen Stunden Recherche bin ich auf einiges Patches von Karsten Keil zum Thema "Fix random hard freeze with ..." gestossen. Diese adressieren zumindest mal das letzte Problem mit den "not in queue" Messages. Jetzt stellt sich mir die Frage ob die Freezes bei mir auch aus dem selben Grund (Locking Probleme) entstehen [1]. Ich habe versucht die Patches in einer geeigneten Form auf den Source der FCDSL2 zu portieren, bin allerdings mangels Erfahrung in dem Bereich gescheitert. Daher die Frage: Kennt sich jemand damit hinreichend aus um mir behilflich zu sein die Fehlerursache und ggf. eine Loesung zu finden? Aber auch konkret die Frage an Karsten Keil (ich hoffe er liesst mit): Sind meine Vermutungen richtig und gibt es eine Chance den Patch [1] auf den FCDSL2 Treiber zu portieren? Danke & Gruss, Fabian [1] http://linux.derkeiler.com/Mailing-Lists/Kernel/2007-10/msg05736.html --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-isdn-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-isdn-de+help@opensuse.org
Hallo Fabian, Am Montag, 28. Juli 2008 10:24:05 schrieb Fabian Urhausen:
Hallo,
ich betreibe jetzt schon seit laengerem eine AVM FCDSL2 Karte die mir Kopfzerbrechen bereitet. Nach einigen Tagen ist kein Zugang zum Internet mehr moeglich. Das Modul neuzuladen endet in Kernel Traces, es hilft nur ein kompletter Neustart. Zunaechst habe ich gedacht es liegt am entsprechenden Rechner, der ist vor ein paar Wochen allerdings komplett ausgetauscht worden. Da der Treiber von AVM nicht mehr weiter entwickelt wird, braeuchte ich den Rat von Leuten die sich damit auskennen.
Ich benutze die SuSE 10 Version fuer 64bit (3.11.07). Um den Treiber ueberhaupt unter neuen Kerneln zum laufen zu bekommen (aktuell 2.6.25.11) waren eine Reihe der bekannten Patches noetig (wenn das hier von Belang ist kann ich das Patch-File gerne nachliefern). Du hast bestimmt den Treiber für die 9.3 genommen und gepatched? Damit bin ich auch (kläglich) gescheitert, habe dann aber diese Seite empfohlen bekommen, wo der Treiber fertig zum Download angeboten wird, hier der Link: http://opensuse.foehr-it.de/ Vielleicht hilft Dir die Seite weiter, evtl kannst Du dort auch Kontakt zum (wie sagt man das noch?) Ersteller der Treiber bekommen. Hoffe, das hilft Dir weiter, ich denke schon, das Du dort weiterkommst... ;-) Gruß und Tschüss Thomas
-- Ehe ist die Kurzform für lateinisch "errare humanum est" ("Irren ist menschlich"). --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-isdn-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-isdn-de+help@opensuse.org
Hallo Thomas, 2008/7/28 Thomas Becker <1510-911@onlinehome.de>:
Hallo Fabian, Am Montag, 28. Juli 2008 10:24:05 schrieb Fabian Urhausen:
Hallo,
ich betreibe jetzt schon seit laengerem eine AVM FCDSL2 Karte die mir Kopfzerbrechen bereitet. Nach einigen Tagen ist kein Zugang zum Internet mehr moeglich. Das Modul neuzuladen endet in Kernel Traces, es hilft nur ein kompletter Neustart. Zunaechst habe ich gedacht es liegt am entsprechenden Rechner, der ist vor ein paar Wochen allerdings komplett ausgetauscht worden. Da der Treiber von AVM nicht mehr weiter entwickelt wird, braeuchte ich den Rat von Leuten die sich damit auskennen.
Ich benutze die SuSE 10 Version fuer 64bit (3.11.07). Um den Treiber ueberhaupt unter neuen Kerneln zum laufen zu bekommen (aktuell 2.6.25.11) waren eine Reihe der bekannten Patches noetig (wenn das hier von Belang ist kann ich das Patch-File gerne nachliefern). Du hast bestimmt den Treiber für die 9.3 genommen und gepatched? Damit bin ich auch (kläglich) gescheitert, habe dann aber diese Seite empfohlen bekommen, wo der Treiber fertig zum Download angeboten wird, hier der Link: http://opensuse.foehr-it.de/ Vielleicht hilft Dir die Seite weiter, evtl kannst Du dort auch Kontakt zum (wie sagt man das noch?) Ersteller der Treiber bekommen. Hoffe, das hilft Dir weiter, ich denke schon, das Du dort weiterkommst... ;-) Gruß und Tschüss Thomas
Ich benutze das Treiberpaket fcdsl2-suse10.0-64bit-3.11-07.tar.gz mit den schon angesprochenen Patches um die Treiber ueberhaupt unter Kernel > 2.6.x lauffaehig zu bekommen. Das funktioniert ja auch alles wunderbar, das Modul laeuft ohne Probleme, bis auf die Freezes nach ein paar Tagen. Daher denke ich liegt das Problem tiefer im Treiber-Code. Eventuell das schon hier angesprochene Locking-Problem. Gruss, Fabian --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-isdn-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-isdn-de+help@opensuse.org
Fabian Urhausen schrieb: [...]
Ich benutze das Treiberpaket fcdsl2-suse10.0-64bit-3.11-07.tar.gz mit den schon angesprochenen Patches um die Treiber ueberhaupt unter Kernel > 2.6.x lauffaehig zu bekommen. Das funktioniert ja auch alles wunderbar, das Modul laeuft ohne Probleme, bis auf die Freezes nach ein paar Tagen. Daher denke ich liegt das Problem tiefer im Treiber-Code. Eventuell das schon hier angesprochene Locking-Problem.
...ich kann Dir leider auch nicht weiter helfen und nur das Problem bestätigen - meine Lösung war einfach die Karte gegen ein externes DSL-Modem zu tauschen. Grüße Eric --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-isdn-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-isdn-de+help@opensuse.org
Danke fuer deine Bestaetigung. Habe das Problem mittlerweile jetzt schon von mehreren Personen bestaetigt bekommen. Es wundert mich nur das es (scheinbar) bislang keinen gestoehrt hat und man auch sonst zu dem Thema nichts findet. Bitte lasst die Betroffenen nicht dumm sterben. Keiner eine Idee oder einen Hinweis? Gruss, Fabian 2008/7/28 Eric Scheen <Dr-Frank-N-Furter@gmx.de>:
Fabian Urhausen schrieb: [...]
Ich benutze das Treiberpaket fcdsl2-suse10.0-64bit-3.11-07.tar.gz mit den schon angesprochenen Patches um die Treiber ueberhaupt unter Kernel > 2.6.x lauffaehig zu bekommen. Das funktioniert ja auch alles wunderbar, das Modul laeuft ohne Probleme, bis auf die Freezes nach ein paar Tagen. Daher denke ich liegt das Problem tiefer im Treiber-Code. Eventuell das schon hier angesprochene Locking-Problem.
...ich kann Dir leider auch nicht weiter helfen und nur das Problem bestätigen - meine Lösung war einfach die Karte gegen ein externes DSL-Modem zu tauschen.
Grüße Eric
--------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-isdn-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-isdn-de+help@opensuse.org
On Wed, Jul 30, 2008 at 09:57:39AM +0200, Fabian Urhausen wrote:
Danke fuer deine Bestaetigung. Habe das Problem mittlerweile jetzt schon von mehreren Personen bestaetigt bekommen. Es wundert mich nur das es (scheinbar) bislang keinen gestoehrt hat und man auch sonst zu dem Thema nichts findet.
Das Problem ist, das der core des Treibers nur binary only vorliegt, damit kann man leider solche Sachen schlecht untersuchen und fixen.
Bitte lasst die Betroffenen nicht dumm sterben. Keiner eine Idee oder einen Hinweis?
Eventuell bringt eine Portierung der erwähnten Patches etwas, aber sicher ist das nicht, die Sachen die das zusaetzliche locking brauchen, sind im open source Teil. -- Karsten Keil SuSE Labs ISDN and VOIP development SUSE LINUX Products GmbH, Maxfeldstr.5 90409 Nuernberg, GF: Markus Rex, HRB 16746 (AG Nuernberg) --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-isdn-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-isdn-de+help@opensuse.org
Ich habe mich jetzt nochmal an den Source gewagt - und wie es scheint mit Erfolg. Habe jetzt seit ein paar Tagen keine "not on queue" Messages mehr und ein Hang ist bislang auch noch nicht aufgetreten. Allerdings bin ich mir nicht sicher ob die Loesung so optimal ist. Ich haenge den Patch mal an, vielleicht hat ja jemand Lust/Zeit/Knowhow um drueberzuschauen bzw. ihn zu testen. Gerade an Karsten haette ich da noch eine Frage zum Codeteil: #if defined (DRIVER_TYPE_DSL) - if (ctrl->cnr != card->ctrl2) { + if (ctrl->cnr == card->ctrl2) { return; } was auch hier (http://osdir.com/ml/isdn.i4l.user/2005-11/msg00025.html) besprochen wurde. Ich habe das bei beiden Auftreten im Code entsprechend gaendert. Allerdings ist mir nicht klar was es bewirkt. Waere da eine kurze Erklaerung moeglich was die Aenderung bewirkt und ob das in beiden Faellen sinnvoll ist? Danke Karsten Keil schrieb:
On Wed, Jul 30, 2008 at 09:57:39AM +0200, Fabian Urhausen wrote:
Danke fuer deine Bestaetigung. Habe das Problem mittlerweile jetzt schon von mehreren Personen bestaetigt bekommen. Es wundert mich nur das es (scheinbar) bislang keinen gestoehrt hat und man auch sonst zu dem Thema nichts findet.
Das Problem ist, das der core des Treibers nur binary only vorliegt, damit kann man leider solche Sachen schlecht untersuchen und fixen.
Bitte lasst die Betroffenen nicht dumm sterben. Keiner eine Idee oder einen Hinweis?
Eventuell bringt eine Portierung der erwähnten Patches etwas, aber sicher ist das nicht, die Sachen die das zusaetzliche locking brauchen, sind im open source Teil.
diff -NurpP --minimal fritz/src/common.h fritz.patched/src/common.h --- fritz/src/common.h 2006-01-05 00:00:00.000000000 +0100 +++ fritz.patched/src/common.h 2008-08-07 11:12:32.332267907 +0200 @@ -44,7 +44,6 @@ typedef unsigned (__attr * xfer_func_t) /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ typedef long intptr_t; -typedef unsigned long uintptr_t; /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ diff -NurpP --minimal fritz/src/devif.c fritz.patched/src/devif.c --- fritz/src/devif.c 2006-01-05 00:00:00.000000000 +0100 +++ fritz.patched/src/devif.c 2008-08-07 11:12:32.336268487 +0200 @@ -233,7 +233,7 @@ int dma_setup (dma_struct_p pdma, unsign assert (buf_size > 0); assert (pdma != NULL); assert (pdma->virt_addr == 0UL); - if (NULL == (buf1 = kmalloc (buf_size + DMA_ALIGNMENT, GFP_ATOMIC))) { + if (NULL == (buf1 = kmalloc (buf_size + DMA_ALIGNMENT, GFP_DMA | GFP_ATOMIC))) { pdma->virt_addr = 0UL; return FALSE; } @@ -748,12 +748,11 @@ static void xfer_task (unsigned long dat /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -irqreturn_t device_interrupt (int irq, void * args, struct pt_regs * regs) { +irqreturn_t device_interrupt (int irq, void * args) { unsigned long intpins; card_p cp = (card_p) args; UNUSED_ARG (irq); - UNUSED_ARG (regs); assert (capi_card == cp); intpins = PINL (cp->mmio_base + C6205_PCI_HSR_OFFSET); diff -NurpP --minimal fritz/src/devif.h fritz.patched/src/devif.h --- fritz/src/devif.h 2006-01-05 00:00:00.000000000 +0100 +++ fritz.patched/src/devif.h 2008-08-07 11:12:32.336268487 +0200 @@ -80,7 +80,7 @@ extern __attr void dif_xfer_requirements extern void set_interrupt_callback (irq_callback_t, void *); extern void clear_interrupt_callback (void); -extern irqreturn_t device_interrupt (int, void *, struct pt_regs *); +extern irqreturn_t device_interrupt (int, void *); /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ diff -NurpP --minimal fritz/src/driver.c fritz.patched/src/driver.c --- fritz/src/driver.c 2006-01-05 00:00:00.000000000 +0100 +++ fritz.patched/src/driver.c 2008-08-07 11:12:32.336268487 +0200 @@ -18,6 +18,10 @@ * http://www.opensource.org/licenses/lgpl-license.html * * Contact: AVM GmbH, Alt-Moabit 95, 10559 Berlin, Germany, email: info@avm.de + * + * Thu Aug 7 11:08:10 2008 + * Modified by Fabian Urhausen to fix freezes and improve locking + * For more questions contact me at fabian@hostbone.eu */ #include <asm/io.h> @@ -56,6 +60,8 @@ #include "devif.h" #include "driver.h" +#undef SINGLE_LOCK + #define KILOBYTE 1024 #define MEGABYTE (1024*KILOBYTE) #define _2_MEGS_ (2*MEGABYTE) @@ -117,7 +123,7 @@ static DECLARE_WAIT_QUEUE_HEAD(wait); static DECLARE_WAIT_QUEUE_HEAD(capi_wait); static DECLARE_WAIT_QUEUE_HEAD(dbg_wait); -static DECLARE_MUTEX_LOCKED(thread_sync); +static DECLARE_COMPLETION(thread_sync); #define SCHED_WAKEUP_CAPI { atomic_set (&thread_capi_flag, 1); wake_up_interruptible (&capi_wait); } #define SCHED_WAKEUP { atomic_set (&got_kicked, 1); wake_up_interruptible (&wait); } @@ -488,7 +494,7 @@ int start (card_p cp) { res = request_irq ( cp->irq, &device_interrupt, - SA_INTERRUPT | SA_SHIRQ, + IRQF_DISABLED | IRQF_SHARED, TARGET, cp ); @@ -1023,8 +1029,9 @@ static void __kcapi reset_ctrl (struct c if (cp->appls != NULL) { appp = first_appl (cp->appls); while (appp != NULL) { + appl_t *next_appp = next_appl (cp->appls, appp); free_ncci (appp->id, (unsigned) -1); - appp = next_appl (cp->appls, appp); + appp = next_appp; } } } @@ -1270,7 +1277,6 @@ int msg2stack (unsigned char * msg) { queue_park (capi_card->queue, skb, appl, ncci, hand); } else { lib_memcpy (msg, mptr, mlen); - assert (skb->list == NULL); kfree_skb (skb); } } @@ -1361,6 +1367,7 @@ void msg2capi (unsigned char * msg) { /*-S-------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ static int sched_thread (void * arg) { + unsigned long flags; UNUSED_ARG (arg); daemonize (TARGET); @@ -1396,6 +1403,7 @@ static int sched_thread (void * arg) { } /* Body of thread, invoke scheduler */ + local_irq_save(flags); if (!test_and_set_bit (0, &stack_lock)) { os_timer_poll (); assert (capi_lib->cm_schedule); @@ -1404,9 +1412,10 @@ static int sched_thread (void * arg) { } clear_bit (0, &stack_lock); } + local_irq_restore(flags); } LOG("Scheduler thread stopped.\n"); - up (&thread_sync); + complete(&thread_sync); return 0; } /* sched_thread */ @@ -1440,7 +1449,7 @@ static void kill_thread (void) { SCHED_WAKEUP; } LOG("Thread signalled, waiting for termination...\n"); - down (&thread_sync); + wait_for_completion(&thread_sync); LOG("Thread[%d] terminated.\n", thread_pid); } thread_pid = -1; @@ -1564,19 +1573,19 @@ void __stack init (unsigned len, void (_ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -int driver_init (void) { +int avm_driver_init (void) { return (NULL != (capi_lib = link_library (&capi_card))); -} /* driver_init */ +} /* avm_driver_init */ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -void driver_exit (void) { +void avm_driver_exit (void) { assert (capi_lib); free_library (); capi_lib = NULL; -} /* driver_exit */ +} /* avm_driver_exit */ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ diff -NurpP --minimal fritz/src/driver.h fritz.patched/src/driver.h --- fritz/src/driver.h 2006-01-05 00:00:00.000000000 +0100 +++ fritz.patched/src/driver.h 2008-08-07 11:12:32.336268487 +0200 @@ -24,7 +24,7 @@ #define __have_driver_h__ #include <asm/atomic.h> -#include <linux/config.h> +#include <linux/autoconf.h> #include <linux/skbuff.h> #include <linux/pci.h> #include <linux/spinlock.h> @@ -161,8 +161,8 @@ extern void init (unsigned, void (__attr /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -extern int driver_init (void); -extern void driver_exit (void); +extern int avm_driver_init (void); +extern void avm_driver_exit (void); #endif diff -NurpP --minimal fritz/src/main.c fritz.patched/src/main.c --- fritz/src/main.c 2006-01-05 00:00:00.000000000 +0100 +++ fritz.patched/src/main.c 2008-08-07 11:12:32.336268487 +0200 @@ -23,7 +23,7 @@ #include <stdarg.h> #include <asm/uaccess.h> #include <linux/pci.h> -#include <linux/config.h> +#include <linux/autoconf.h> #include <linux/version.h> #include <linux/kernel.h> #include <linux/module.h> @@ -116,14 +116,14 @@ static int __devinit fcdsl2_probe ( return -ENODEV; } NOTE("Loading...\n"); - if (!driver_init ()) { + if (!avm_driver_init ()) { ERROR("Error: Driver library not available.\n"); NOTE("Not loaded.\n"); return -ENOSYS; } if (0 != (res = add_card (dev))) { NOTE("Not loaded.\n"); - driver_exit (); + avm_driver_exit (); return res; } NOTE("Loaded.\n"); @@ -144,7 +144,7 @@ static void __devexit fcdsl2_remove (str NOTE("Removing...\n"); remove_ctrls (cp); NOTE("Removed.\n"); - driver_exit (); + avm_driver_exit (); #ifndef NDEBUG if (hallocated() != 0) { ERROR("%u bytes leaked.\n", hallocated()); @@ -195,7 +195,7 @@ static int __init fcdsl2_init (void) { NOTE("-- 32 bit CAPI driver --\n"); #endif - if (0 == (err = pci_module_init (&fcdsl2_driver))) { + if (0 == (err = pci_register_driver (&fcdsl2_driver))) { LOG("PCI driver registered.\n"); register_capi_driver (&fcdsl2_capi_driver); LOG("CAPI driver registered.\n"); diff -NurpP --minimal fritz/src/Makefile fritz.patched/src/Makefile --- fritz/src/Makefile 2006-01-05 00:00:00.000000000 +0100 +++ fritz.patched/src/Makefile 2008-08-07 11:12:32.336268487 +0200 @@ -12,7 +12,7 @@ EXTRA_CFLAGS += -D__$(CARD)__ -DTARGET=\ ifndef DEBUG EXTRA_CFLAGS += -DNDEBUG endif -EXTRA_LDFLAGS += $(LIBDIR)/$(CARD)-lib.o +EXTRA_LDFLAGS += $(LIBDIR)/$(CARD)-lib.o -d obj-m := $(CARD).o $(CARD)-objs := $(OBJECTS) diff -NurpP --minimal fritz/src/queue.c fritz.patched/src/queue.c --- fritz/src/queue.c 2006-01-05 00:00:00.000000000 +0100 +++ fritz.patched/src/queue.c 2008-08-07 11:12:32.336268487 +0200 @@ -30,7 +30,7 @@ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -#define MAKE_KEY(a,n,h) (((tag_t)(a)<<48)+((tag_t)(n)<<16)+((tag_t)(h))) +#define MAKE_KEY(a,n,h) (((avm_tag_t)(a)<<48)+((avm_tag_t)(n)<<16)+((avm_tag_t)(h))) #define IS_EMPTY(q) ((q)->get==NULL) /*---------------------------------------------------------------------------*\ @@ -79,14 +79,12 @@ void queue_exit (queue_t ** q) { assert (*q != NULL); while ((*q)->get != NULL) { item = (*q)->get->succ; - assert ((*q)->get->msg->list == NULL); kfree_skb ((*q)->get->msg); hfree ((*q)->get); (*q)->get = item; } while ((*q)->noconf != NULL) { item = (*q)->noconf->succ; - assert ((*q)->noconf->msg->list == NULL); kfree_skb ((*q)->noconf->msg); hfree ((*q)->noconf); (*q)->noconf = item; @@ -108,7 +106,6 @@ static int enqueue (queue_t * q, struct assert (q != NULL); assert (msg != NULL); - assert (msg->list == NULL); if (NULL == (item = alloc_item ())) { ERROR("Not enough memory for queue item.\n"); ERROR("Message lost.\n"); @@ -141,7 +138,6 @@ static struct sk_buff * dequeue (queue_t tmp = q->get; q->get = item; free_item (tmp); - assert (res->list == NULL); return res; } /* dequeue */ @@ -215,7 +211,7 @@ void queue_park ( \*---------------------------------------------------------------------------*/ void queue_conf (queue_t * q, unsigned appl, NCCI_t ncci, unsigned hand) { qitem_t * item; - tag_t key = MAKE_KEY (appl, ncci, hand); + avm_tag_t key = MAKE_KEY (appl, ncci, hand); struct sk_buff * tmp = NULL; assert (q != NULL); @@ -241,7 +237,6 @@ void queue_conf (queue_t * q, unsigned a } unlock (q->lock); if (tmp != NULL) { - assert (tmp->list == NULL); kfree_skb (tmp); } } /* queue_conf */ diff -NurpP --minimal fritz/src/queue.h fritz.patched/src/queue.h --- fritz/src/queue.h 2006-01-05 00:00:00.000000000 +0100 +++ fritz.patched/src/queue.h 2008-08-07 11:12:32.336268487 +0200 @@ -29,14 +29,14 @@ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ -typedef long long tag_t; +typedef long long avm_tag_t; typedef __u32 NCCI_t; /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ typedef struct __qitem { - tag_t key; + avm_tag_t key; struct sk_buff * msg; struct __qitem * succ; struct __qitem * pred; diff -NurpP --minimal fritz/src/tables.c fritz.patched/src/tables.c --- fritz/src/tables.c 2006-01-05 00:00:00.000000000 +0100 +++ fritz.patched/src/tables.c 2008-08-07 16:35:03.240267776 +0200 @@ -96,7 +96,9 @@ static void remove_appl (appltab_t * tab remove_ncci (tab, appp, nccip); nccip = tmp; } + lock (capi_card->appls->lock); capilib_release_appl (&tab->ncci_head, appp->id); + unlock (capi_card->appls->lock); hfree (appp); } /* remove_appl */ @@ -234,6 +236,7 @@ static capiinfo_t handle_message ( ci = CAPI_ILLAPPNR; goto done; } + lock (capi_card->appls->lock); switch (CAPIMSG_CMD(msg->data)) { case CAPI_DATA_B3_REQ: @@ -258,6 +261,7 @@ static capiinfo_t handle_message ( } } done: + unlock (capi_card->appls->lock); return ci; } /* handle_message */ @@ -267,6 +271,7 @@ capiinfo_t handle_data_conf (appltab_t * unsigned appl, hand; NCCI_t ncci; + lock (capi_card->appls->lock); assert (tab != NULL); assert (q != NULL); assert (m != NULL); @@ -276,6 +281,7 @@ capiinfo_t handle_data_conf (appltab_t * hand = CAPIMSG_U16(m, 12); queue_conf (q, appl, ncci, hand); capilib_data_b3_conf (&tab->ncci_head, appl, ncci, CAPIMSG_MSGID(m)); + unlock (capi_card->appls->lock); return CAPI_NOERROR; } /* handle_data_conf */ @@ -303,7 +309,9 @@ static ncci_t * create_ncci ( return NULL; } LOG("New NCCI(%x), window size %u...\n", ncci, wsize); + lock (capi_card->appls->lock); capilib_new_ncci (&tab->ncci_head, appp->id, ncci, wsize); + unlock (capi_card->appls->lock); tmp->ncci = ncci; tmp->appl = appp->id; tmp->win_size = wsize; @@ -330,7 +338,9 @@ void remove_ncci (appltab_t * tab, appl_ assert (nccip); if (nccip != NULL) { LOG("Remove NCCI(%x), appl %u...\n", nccip->ncci, appp->id); + lock (capi_card->appls->lock); capilib_free_ncci (&tab->ncci_head, appp->id, nccip->ncci); + unlock (capi_card->appls->lock); lock (tab->lock); for (i = 0; i < appp->blk_count; i++) { if (nccip->data[i] != NULL) { @@ -554,7 +564,7 @@ void __kcapi release_appl (struct capi_c assert (ctrl != NULL); card = GET_CARD(ctrl); #if defined (DRIVER_TYPE_DSL) - if (ctrl->cnr != card->ctrl2) { + if (ctrl->cnr == card->ctrl2) { return; } #endif @@ -580,7 +590,6 @@ u16 __kcapi send_msg (struct capi_ctr * assert (ctrl != NULL); assert (skb != NULL); - assert (skb->list == NULL); card = GET_CARD(ctrl); ci = handle_message (card->appls, card->queue, skb); kick_scheduler (); @@ -605,7 +614,7 @@ void __kcapi register_appl ( assert (args != NULL); card = GET_CARD(ctrl); #if defined (DRIVER_TYPE_DSL) - if (ctrl->cnr != card->ctrl2) { + if (ctrl->cnr == card->ctrl2) { return; } #endif diff -NurpP --minimal fritz/src/tools.c fritz.patched/src/tools.c --- fritz/src/tools.c 2006-01-05 00:00:00.000000000 +0100 +++ fritz.patched/src/tools.c 2008-08-07 11:12:32.336268487 +0200 @@ -110,7 +110,11 @@ static unsigned lib_heap_size = 0; #define FENCE2_OK(h,m) (*(unsigned *)(((char *) m)+(h)->size)==FENCE_TAG) static unsigned alloc_count = 0; +#if defined (SINGLE_LOCK) +# define track_lock qt_lock +#else static spinlock_t track_lock = SPIN_LOCK_UNLOCKED; +#endif #if !defined (NDEBUG) && defined (LOG_TIMER) static struct timeval zero_time;
On Mon, Aug 11, 2008 at 09:52:54AM +0200, Fabian Urhausen wrote:
Ich habe mich jetzt nochmal an den Source gewagt - und wie es scheint mit Erfolg. Habe jetzt seit ein paar Tagen keine "not on queue" Messages mehr und ein Hang ist bislang auch noch nicht aufgetreten. Allerdings bin ich mir nicht sicher ob die Loesung so optimal ist. Ich haenge den Patch mal an, vielleicht hat ja jemand Lust/Zeit/Knowhow um drueberzuschauen bzw. ihn zu testen.
Gerade an Karsten haette ich da noch eine Frage zum Codeteil:
#if defined (DRIVER_TYPE_DSL) - if (ctrl->cnr != card->ctrl2) { + if (ctrl->cnr == card->ctrl2) { return; }
was auch hier (http://osdir.com/ml/isdn.i4l.user/2005-11/msg00025.html) besprochen wurde. Ich habe das bei beiden Auftreten im Code entsprechend gaendert. Allerdings ist mir nicht klar was es bewirkt. Waere da eine kurze Erklaerung moeglich was die Aenderung bewirkt und ob das in beiden Faellen sinnvoll ist?
Wenn ich das noch sogenau wüsste. IMHO gab es einen race bei der initialisierung der Karte, die COMBO Karten melden beim kernel 2 controller an, einen für ISDN, einen für DSL, der DSL controller ist der 2. Da die Karte aber nur einmal initialisiert werden muss, wird die Initialisierung einmal übersprungen. Der Patch sorgt dafür, das das beim DSL controller passiert, also das bei der Anmeldung des ISDN controllers die Initialisierung erfolgt. Die Patches sehen soweit OK aus. -- Karsten Keil SuSE Labs ISDN and VOIP development SUSE LINUX Products GmbH, Maxfeldstr.5 90409 Nuernberg, GF: Markus Rex, HRB 16746 (AG Nuernberg) --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-isdn-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-isdn-de+help@opensuse.org
participants (4)
-
Eric Scheen
-
Fabian Urhausen
-
Karsten Keil
-
Thomas Becker