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

Reply via email to