Date: Sat, 25 Mar 2006 05:00:46 GMT From: "Naram Qashat" <cyberbotx@cyberbotx.com> To: freebsd-ports-bugs@FreeBSD.org Subject: Re: ports/94894: multimedia/fxtv causes freeze and reboot on DGA failure on FreeBSD 6.1-PRERELEASES Message-ID: <200603250500.k2P50kTv046767@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR ports/94894; it has been noted by GNATS. From: "Naram Qashat" <cyberbotx@cyberbotx.com> To: <bug-followup@FreeBSD.org>, <cyberbotx@cyberbotx.com> Cc: Subject: Re: ports/94894: multimedia/fxtv causes freeze and reboot on DGA failure on FreeBSD 6.1-PRERELEASES Date: Fri, 24 Mar 2006 23:51:43 -0500 I did a bit of debugging on this to see where the problem was. I went into the multimedia/fxtv folder and told it to patch the source but not build it. I then did 'gmake DEBUG=YES' to get a debugging version of fxtv. Using this, I managed to find out where fxtv was freezing up my system. The output from gdb is below. Aparently it's getting held up at the ioctl of TVTUNER_SETCHNL. I'm not sure if that means it's a bktr issue or a fxtv issue, because I also installed xawtv and kbtv, and of those, xawtv can play the audio but not the video (although it does show something if I turn off overlay, but it never changes), and kbtv (using mplayer as it's base) can only show a messed up picture and plays the audio. If it is a bktr issue, which list would be the correct one to submit the problem report to? In any case, since I haven't been able to view TV properly with my card and am only using it to play on my GameCube using the video inputs, I edited the source to bypass that ioctl and a later function that was killing it. It now runs fine for video input. But since that won't help anyone wanting to watch TV, I don't have a patch. Just in case, here's the dmesg clip for my tuner: bktr0: <BrookTree 878> mem 0xdc000000-0xdc000fff irq 11 at device 9.0 on pci1 bktr0: [GIANT-LOCKED] smbus0: <System Management Bus> on bktr0 iicbb0: <I2C bit-banging driver> on bktr0 iicbus0: <Philips I2C bus> on iicbb0 master-only ic0 on iicbus0 iic0: <I2C generic I/O> on iicbus0 iicsmb0: <SMBus over I2C bridge> on iicbus0 smbus1: <System Management Bus> on iicsmb0 bktr0: Hauppauge Model 29440 @ % bktr0: Warning - Unknown Hauppauge Tuner 0xd5 bktr0: Hauppauge WinCast/TV. And the gdb clip: [kirby /usr/ports/multimedia/fxtv/work/fxtv-1.03]> gdb fxtv GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd"... (gdb) break TVSetInitialCaptureDefaults Breakpoint 1 at 0x8056c16: file tv.c, line 419. (gdb) run Starting program: /usr/ports/multimedia/fxtv/work/fxtv-1.03/fxtv Xlib: extension "XFree86-DGA" missing on display ":0.0". Xlib: extension "XFree86-VidModeExtension" missing on display ":0.0". Breakpoint 1, TVSetInitialCaptureDefaults (c=0x80af8a0, p=0x80afc30) at tv.c:419 419 TV_DISK *dsk = &G_glob.disk; (gdb) next 428 if ( !TVCAPTUREQueryDriverState( c, &s ) ) { (gdb) 434 if ( !App_res.driver_defaults ) { (gdb) 437 input_format = TV_INPUT_NTSCM; (gdb) 438 for ( i = 0; i < XtNumber(formats); i++ ) (gdb) 439 if ( strcasecmp( App_res.input_format, formats[i].str ) == 0 ) (gdb) 440 input_format = formats[i].mode; (gdb) 438 for ( i = 0; i < XtNumber(formats); i++ ) (gdb) 439 if ( strcasecmp( App_res.input_format, formats[i].str ) == 0 ) (gdb) 438 for ( i = 0; i < XtNumber(formats); i++ ) (gdb) 439 if ( strcasecmp( App_res.input_format, formats[i].str ) == 0 ) (gdb) 438 for ( i = 0; i < XtNumber(formats); i++ ) (gdb) 439 if ( strcasecmp( App_res.input_format, formats[i].str ) == 0 ) (gdb) 438 for ( i = 0; i < XtNumber(formats); i++ ) (gdb) 439 if ( strcasecmp( App_res.input_format, formats[i].str ) == 0 ) (gdb) 438 for ( i = 0; i < XtNumber(formats); i++ ) (gdb) 439 if ( strcasecmp( App_res.input_format, formats[i].str ) == 0 ) (gdb) 438 for ( i = 0; i < XtNumber(formats); i++ ) (gdb) 439 if ( strcasecmp( App_res.input_format, formats[i].str ) == 0 ) (gdb) 438 for ( i = 0; i < XtNumber(formats); i++ ) (gdb) 439 if ( strcasecmp( App_res.input_format, formats[i].str ) == 0 ) (gdb) 438 for ( i = 0; i < XtNumber(formats); i++ ) (gdb) 439 if ( strcasecmp( App_res.input_format, formats[i].str ) == 0 ) (gdb) 438 for ( i = 0; i < XtNumber(formats); i++ ) (gdb) 439 if ( strcasecmp( App_res.input_format, formats[i].str ) == 0 ) (gdb) 438 for ( i = 0; i < XtNumber(formats); i++ ) (gdb) 442 TVCAPTURESetInputFormat( c, input_format ); (gdb) 443 dsk->video.geom.w = c->width_max / 2; (gdb) 444 dsk->video.geom.h = c->height_max / 2; (gdb) 445 dsk->video.fps = c->fps_max; (gdb) 448 if ( App_res.display_fps < 0 ) (gdb) 449 App_res.display_fps = c->fps_max; (gdb) 450 App_res.display_fps = MAX( 1, MIN( c->fps_max, App_res.display_fps ) ); (gdb) 453 p->ant_freq_set = 1; (gdb) 454 p->cable_freq_set = 1; (gdb) 456 for ( i = 0; i < 2; i++ ) { (gdb) 457 TV_FREQ_SET *set = (i == 0) ? &p->ant_freq_set (gdb) 461 str[0] = '\0'; (gdb) 462 if ( i == 0 ) (gdb) 463 strncat( str, App_res.ant_freq_set , sizeof(str)-1 ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 469 for ( j = 1; ; j++ ) { (gdb) 470 if ( (p = TVCAPTUREGetTunerFreqSetName(c,j)) == NULL ) { (gdb) 475 if ( strstr( str, p ) != NULL ) { (gdb) 476 *set = j; (gdb) 477 break; (gdb) 456 for ( i = 0; i < 2; i++ ) { (gdb) 457 TV_FREQ_SET *set = (i == 0) ? &p->ant_freq_set (gdb) 461 str[0] = '\0'; (gdb) 462 if ( i == 0 ) (gdb) 465 strncat( str, App_res.cable_freq_set, sizeof(str)-1 ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 467 *p = tolower( *p ); (gdb) 466 for ( p = str; *p != '\0'; p++ ) (gdb) 469 for ( j = 1; ; j++ ) { (gdb) 470 if ( (p = TVCAPTUREGetTunerFreqSetName(c,j)) == NULL ) { (gdb) 475 if ( strstr( str, p ) != NULL ) { (gdb) 469 for ( j = 1; ; j++ ) { (gdb) 470 if ( (p = TVCAPTUREGetTunerFreqSetName(c,j)) == NULL ) { (gdb) 475 if ( strstr( str, p ) != NULL ) { (gdb) 476 *set = j; (gdb) 477 break; (gdb) 456 for ( i = 0; i < 2; i++ ) { (gdb) 483 p->tuner_mode = TV_TUNER_MODE_ANTENNA; (gdb) 484 if (( strstr( App_res.tuner_mode, "cable" ) != NULL ) || (gdb) 488 if ( p->tuner_mode == TV_TUNER_MODE_ANTENNA ) (gdb) 489 TVCAPTURESetTunerFreqSet( c, p->ant_freq_set ); (gdb) step TVCAPTURESetTunerFreqSet (c=0x80af8a0, set=1) at tvcapture.c:649 649 larg = set; (gdb) next 651 if ( ioctl( c->tfd, TVTUNER_SETTYPE, &larg ) < 0 ) { (gdb) 660 if ( !TVCAPTUREQueryDriverState( c, &s ) ) { (gdb) 664 TVCAPTURESetTunerChannel( c, s.tuner_chan ); (gdb) step TVCAPTURESetTunerChannel (c=0x80af8a0, chan_num=0) at tvcapture.c:599 599 TV_INT32 larg = chan_num; (gdb) 604 if ( ioctl( c->tfd, BT848_GAUDIO, &old_audio ) < 0 ) { (gdb) 609 if ( ioctl( c->tfd, TVTUNER_SETCHNL, &larg ) < 0 ) { The system freezes after that line and I couldn't even step into it.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200603250500.k2P50kTv046767>