I try the two patches in an amd64 an it works well. Thanks Jose Alberto El Viernes, 28 de Enero de 2005 04:10, D. Hugh Redelmeier escribi�: > I've revised Jose Alberto Reguero's patch for ivtv-0.3.2b. > This is along the lines of my revision to his patch for > ivtv-0.2.0-rc3d. > > I have NOT tested this. I tried to use that ATrpms source RPM and > found that this is a very difficult poposition. Darn. Can anyone > else suggest an easy path to testing? > > I would very much like the fixes to go in. But without testing, there > ought to be some reluctance. I hope my explanations for the changes > would help overcome any reluctance. > > I am including two patches. The first is just Jose's, with one > important change and updated to ivtv-0.2.0-rc3d. I explained the > > important change in previous emails: > | All of these declarations of "then" should be of type unsigned long. > | The patch changes them to u64. So every place that the patch has > | "u64" should instead say "unsigned long". Simple to fix! > > The first patch should be correct: it is hardly different from Jose's > and Jose did testing. Jose's patch would probably break a 32-bit > system but my version should work on both 32-bit and 64-bit systems. > > > The second patch has further bug fixes. > > The second patch is what needs justification. Most of the changes > were described in my previous message, but not all. > > New: > > - in driver.h, the ts field of the struct ivtv_dec_dma was declared to > be u32. As far as I can make out, it is only used to store 0 or > values read from "jiffie". So I think that it should be of type > "unsigned long" > > I don't really understand how this field is used: please check my > work. > > - the formats used to format ts must be %lu, not %u. > > > Remember Axel's post in this thread? > http://sourceforge.net/mailarchive/message.php?msg_id=10630737 > I think that he was refering the the field "jiffies" in struct > api_cmd, not the global variable with the same name. He asked: > The current "u32 then" only interacts with jiffies which already is > (unconditionally) a u64. Is this a 64bits issue at all? > The field jiffies is declared u64. I find that a bit thought > provoking. Perhaps it too should be "unsigned long". On the other > hand, the name "api_cmd" suggests that this representation might be > shared with code outside the driver and therefore that the layout > cannot be unilaterally changed. Does anyone else know? > > > Old: > > - I removed redundant assignments to "then" (i.e. when it was obvious > that the value stored there would not be used). > > - several local variables "then" were not actually used so I deleted > them > > - in one segment of code, a pair of messages printing the duration of > a delay used an incorrect format and also calculated the value in a > way that is inaccurate on some systems (eg. those with HZ == 1024). > > How can we get this debugged and adopted? It would be great to > support x86_64. > > ================ patch 1 ================ > diff -Nur ivtv-0.3.2c.ORIG/driver/ivtv-dma.c > ivtv-0.3.2c.1st-update/driver/ivtv-dma.c --- > ivtv-0.3.2c.ORIG/driver/ivtv-dma.c 2004-09-24 09:50:40.000000000 -0400 +++ > ivtv-0.3.2c.1st-update/driver/ivtv-dma.c 2005-01-27 17:07:18.000000000 > -0500 @@ -101,7 +101,7 @@ > { > DECLARE_WAITQUEUE(wait, current); > int rc = 0; > - u32 then; > + unsigned long then; > > then = jiffies; > add_wait_queue(&itv->streams[type].waitq, &wait); > diff -Nur ivtv-0.3.2c.ORIG/driver/ivtv-fileops.c > ivtv-0.3.2c.1st-update/driver/ivtv-fileops.c --- > ivtv-0.3.2c.ORIG/driver/ivtv-fileops.c 2004-12-05 19:26:56.000000000 > -0500 > +++ ivtv-0.3.2c.1st-update/driver/ivtv-fileops.c 2005-01-27 > 17:07:18.000000000 -0500 @@ -276,7 +276,8 @@ > DECLARE_WAITQUEUE(wait, current); > int idx = itv->vbi_inserted_frame % 20; > int blocking = !(filp->f_flags & O_NONBLOCK); > - u32 old_trans_id, then; > + u32 old_trans_id; > + unsigned long then; > u32 bytes_received = 0; > LIST_HEAD(full_list); > > diff -Nur ivtv-0.3.2c.ORIG/driver/ivtv-irq.c > ivtv-0.3.2c.1st-update/driver/ivtv-irq.c --- > ivtv-0.3.2c.ORIG/driver/ivtv-irq.c 2004-11-28 01:46:22.000000000 -0500 +++ > ivtv-0.3.2c.1st-update/driver/ivtv-irq.c 2005-01-27 17:07:18.000000000 > -0500 @@ -406,7 +406,7 @@ > struct ivtv_buffer *buf; > LIST_HEAD(free_list); > int xfer_pad; > - u32 then; > + unsigned long then; > int redo_dma = 0; > DECLARE_WAITQUEUE(wait, current); > int rc = 0; > diff -Nur ivtv-0.3.2c.ORIG/driver/ivtv-osd.c > ivtv-0.3.2c.1st-update/driver/ivtv-osd.c --- > ivtv-0.3.2c.ORIG/driver/ivtv-osd.c 2005-01-24 14:26:04.000000000 -0500 +++ > ivtv-0.3.2c.1st-update/driver/ivtv-osd.c 2005-01-27 17:07:18.000000000 > -0500 @@ -773,7 +773,7 @@ > &itv->streams[IVTV_DEC_STREAM_TYPE_MPG]; > u32 data[IVTV_MBOX_MAX_DATA]; > int ret = 0; > - u32 then; > + unsigned long then; > int redo_dma = 0; > unsigned long flags; > > @@ -948,7 +948,7 @@ > int cur_buf = 0; > int offset = 0; > int ret = 0; > - u32 then; > + unsigned long then; > int redo_dma = 0; > unsigned long flags; > int i; > @@ -1209,7 +1209,7 @@ > int rc = 0; > struct ivtv_stream *stream = /* Use Decoder Stream for locking */ > &itv->streams[IVTV_DEC_STREAM_TYPE_OSD]; > - u32 then; > + unsigned long then; > DECLARE_WAITQUEUE(wait, current); > > /* If needing to re-setup the OSD */ > @@ -1272,7 +1272,7 @@ > int rc = 0; > struct ivtv_stream *stream = /* Use Decoder Stream for locking */ > &itv->streams[IVTV_DEC_STREAM_TYPE_YUV]; > - u32 then; > + unsigned long then; > DECLARE_WAITQUEUE(wait, current); > > then = jiffies; > @@ -1324,7 +1324,7 @@ > int rc = 0; > struct ivtv_stream *stream = /* Use Decoder Stream for locking */ > &itv->streams[IVTV_DEC_STREAM_TYPE_MPG]; > - u32 then; > + unsigned long then; > DECLARE_WAITQUEUE(wait, current); > > > diff -Nur ivtv-0.3.2c.ORIG/driver/ivtv-streams.c > ivtv-0.3.2c.1st-update/driver/ivtv-streams.c --- > ivtv-0.3.2c.ORIG/driver/ivtv-streams.c 2004-12-17 14:14:49.000000000 > -0500 > +++ ivtv-0.3.2c.1st-update/driver/ivtv-streams.c 2005-01-27 > 17:07:18.000000000 -0500 @@ -1018,7 +1018,8 @@ > int ivtv_stop_capture(struct ivtv *itv, int type) > { > struct ivtv_stream *st = &itv->streams[type]; > - int cap_type, then; > + int cap_type; > + unsigned long then; > int x; > int stopmode; > u32 data[IVTV_MBOX_MAX_DATA], result; > @@ -1194,7 +1195,7 @@ > static void ivtv_stop_wait(struct ivtv *itv, int type) { > DECLARE_WAITQUEUE(wait, current); > int rc = 0; > - u32 then; > + unsigned long then; > > then = jiffies; > add_wait_queue(&itv->streams[type].waitq, &wait); > ================ end of patch 1 ================ > > > ================ patch 2 ================ > diff -Nur ivtv-0.3.2c.1st-update/driver/ivtv-driver.h > ivtv-0.3.2c/driver/ivtv-driver.h --- > ivtv-0.3.2c.1st-update/driver/ivtv-driver.h 2005-01-24 14:26:19.000000000 > -0500.1st +++ ivtv-0.3.2c/driver/ivtv-driver.h 2005-01-27 > 17:44:05.000000000 -0500 @@ -310,7 +310,7 @@ > u32 data[IVTV_MBOX_MAX_DATA]; > u32 speed_data[IVTV_MBOX_MAX_DATA]; > atomic_t vsync_count; > - u32 ts; > + unsigned long ts; > u32 wq_runs; > atomic_t intr; > }; > diff -Nur ivtv-0.3.2c.1st-update/driver/ivtv-irq.c > ivtv-0.3.2c/driver/ivtv-irq.c --- > ivtv-0.3.2c.1st-update/driver/ivtv-irq.c 2005-01-27 17:07:18.000000000 > -0500 +++ ivtv-0.3.2c/driver/ivtv-irq.c 2005-01-27 17:18:01.000000000 > -0500 > @@ -486,7 +486,6 @@ > if (type == 1) > bytes_needed += (UVsize%itv->dma_cfg.enc_yuv_buf_size) + > (size%itv->dma_cfg.enc_yuv_buf_size); > > - then = jiffies; > add_wait_queue(&st->waitq, &wait); > do { > set_current_state(TASK_INTERRUPTIBLE); > diff -Nur ivtv-0.3.2c.1st-update/driver/ivtv-kthreads.c > ivtv-0.3.2c/driver/ivtv-kthreads.c --- > ivtv-0.3.2c.1st-update/driver/ivtv-kthreads.c 2005-01-27 17:07:18.000000000 > -0500 +++ ivtv-0.3.2c/driver/ivtv-kthreads.c 2005-01-27 17:45:14.000000000 > -0500 @@ -373,7 +373,7 @@ > int type = IVTV_DEC_STREAM_TYPE_MPG; > struct ivtv_stream *stream= &itv->streams[type]; > int ret = -1; > - unsigned long then = 0; > + unsigned long then; > int rc = 0; > int x=0, bytes_written=0; > struct ivtv_buffer *buf; > @@ -854,7 +854,7 @@ > "total_xfer: 0x%08x\n" > " sg_bytes: 0x%08x\n" > " vsync_count: %d\n" > - " ts: %u\n", > + " ts: %lu\n", > atomic_read(&itv->dec_dma_stat.type), > itv->dec_dma_stat.last_xfer, > itv->dec_dma_stat.last_addr, > diff -Nur ivtv-0.3.2c.1st-update/driver/ivtv-osd.c > ivtv-0.3.2c/driver/ivtv-osd.c --- > ivtv-0.3.2c.1st-update/driver/ivtv-osd.c 2005-01-27 17:07:18.000000000 > -0500 +++ ivtv-0.3.2c/driver/ivtv-osd.c 2005-01-27 17:18:01.000000000 > -0500 > @@ -1209,14 +1209,12 @@ > int rc = 0; > struct ivtv_stream *stream = /* Use Decoder Stream for locking */ > &itv->streams[IVTV_DEC_STREAM_TYPE_OSD]; > - unsigned long then; > DECLARE_WAITQUEUE(wait, current); > > /* If needing to re-setup the OSD */ > if (test_and_clear_bit(OSD_RESET_NEEDED, &itv->r_flags)) > ivtvfb_setup(); > > - then = jiffies; > add_wait_queue(&stream->waitq, &wait); > do { > set_current_state(TASK_INTERRUPTIBLE); > @@ -1272,10 +1270,8 @@ > int rc = 0; > struct ivtv_stream *stream = /* Use Decoder Stream for locking */ > &itv->streams[IVTV_DEC_STREAM_TYPE_YUV]; > - unsigned long then; > DECLARE_WAITQUEUE(wait, current); > > - then = jiffies; > add_wait_queue(&stream->waitq, &wait); > do { > set_current_state(TASK_INTERRUPTIBLE); > @@ -1324,7 +1320,6 @@ > int rc = 0; > struct ivtv_stream *stream = /* Use Decoder Stream for locking */ > &itv->streams[IVTV_DEC_STREAM_TYPE_MPG]; > - unsigned long then; > DECLARE_WAITQUEUE(wait, current); > > > @@ -1334,7 +1329,6 @@ > clear_bit(DMA_IN_USE, &stream->udma.u_flags); > } > > - then = jiffies; > add_wait_queue(&stream->udma.waitq, &wait); > do { > set_current_state(TASK_INTERRUPTIBLE); > diff -Nur ivtv-0.3.2c.1st-update/driver/ivtv-streams.c > ivtv-0.3.2c/driver/ivtv-streams.c --- > ivtv-0.3.2c.1st-update/driver/ivtv-streams.c 2005-01-27 17:07:18.000000000 > -0500 +++ ivtv-0.3.2c/driver/ivtv-streams.c 2005-01-27 17:18:01.000000000 > -0500 @@ -1105,20 +1105,20 @@ > { > schedule_timeout(HZ/100); > } > - then = jiffies - then; > + then = ((1000 + HZ/2) / HZ) * (jiffies - then); > > if (!test_bit(IVTV_F_I_EOS, &itv->i_flags)) { > IVTV_DEBUG(IVTV_DEBUG_ERR, > "ENC: EOS interrupt not " > "received! stopping anyway.\n"); > IVTV_DEBUG(IVTV_DEBUG_ERR, > - "ENC: waited %d ms.\n", > - (1000/HZ)*then); > + "ENC: waited %lu ms.\n", > + then); > } else { > IVTV_DEBUG(IVTV_DEBUG_ERR, > - "ENC: EOS took %d " > + "ENC: EOS took %lu " > "ms to occur.\n", > - (1000/HZ)*then); > + then); > } > set_current_state(TASK_RUNNING); > remove_wait_queue(&itv->cap_w, &wait); > ================ end of patch 2 ================ > > > ------------------------------------------------------- > This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting > Tool for open source databases. Create drag-&-drop reports. Save time > by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. > Download a FREE copy at http://www.intelliview.com/go/osdn_nl > _______________________________________________ > ivtv-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/ivtv-devel
------------------------------------------------------- This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting Tool for open source databases. Create drag-&-drop reports. Save time by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. Download a FREE copy at http://www.intelliview.com/go/osdn_nl _______________________________________________ ivtv-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ivtv-devel
