diff -Nurb qc-usb-messenger-1.7-orig/qc-driver.c qc-usb-messenger-1.7/qc-driver.c --- qc-usb-messenger-1.7-orig/qc-driver.c 2008-08-28 16:13:58.962312000 +0200 +++ qc-usb-messenger-1.7/qc-driver.c 2008-08-28 16:37:03.851348061 +0200 @@ -1612,7 +1612,7 @@ fd->maxrawdatalen = 0; /* Hopefully stops all ongoing captures, might need locking though */ wake_up(&fd->wq); if (qcdebug&QC_DEBUGFRAME) PDEBUG("waiting=%i",fd->waiting); - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_frame_exit() : %i", qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_frame_exit() : %i", qc, 0); up(&qc->lock); /* The lock was down when entering this function */ while (fd->waiting > 0) { schedule(); @@ -1623,7 +1623,7 @@ } #endif } - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(%p) in qc_frame_exit() : %i", qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(%p) in qc_frame_exit() : %i", qc, 0); down(&qc->lock); vfree(fd->rawdatabuf); POISON(fd->rawdatabuf); @@ -1652,14 +1652,14 @@ /* Wait until the next frame is available */ if (qcdebug&QC_DEBUGFRAME) PDEBUG("qc_frame_get/consume(qc=%p,tail=%i,head=%i)",qc,fd->tail,fd->head); fd->waiting++; - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_frame_get() : %i", qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_frame_get() : %i", qc, 0); up(&qc->lock); /* Release lock while waiting */ ret = wait_event_interruptible(fd->wq, fd->head!=fd->tail || fd->exiting); //FIXME:What if we get -ERESTARTSYS? if(ret == -ERESTARTSYS) { PDEBUG("wait_event_interruptible() returned ERESTARTSYS"); } - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(%p) in qc_frame_get() : %i", qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(%p) in qc_frame_get() : %i", qc, 0); down(&qc->lock); if (!ret) { if (!fd->exiting) { @@ -2681,12 +2681,12 @@ if (qcdebug&QC_DEBUGMUTEX) PDEBUG("MOD_INC_USE_COUNT in qc_v4l_open() : %i",GET_USE_COUNT(THIS_MODULE)); MOD_INC_USE_COUNT; - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(quickcam_list) in qc_v4l_open() : %i", sem_getcount(&quickcam_list_lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(quickcam_list) in qc_v4l_open() : %i", 0); r = qc_lock(qc); if (r<0) goto fail1; - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(%p) in qc_v4l_open() : %i", qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(%p) in qc_v4l_open() : %i", qc, 0); if (down_interruptible(&qc->lock)) { r = -ERESTARTSYS; goto fail2; @@ -2701,15 +2701,15 @@ if (qcdebug&QC_DEBUGLOGIC) PDEBUG("First user, initializing"); if ((r = qc_v4l_init(qc))<0) goto fail4; } - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_open() : %i",qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_open() : %i",qc, 0); up(&qc->lock); up(&quickcam_list_lock); return 0; fail4: qc->users--; -fail3: if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_open()=failed : %i",qc, sem_getcount(&qc->lock)); +fail3: if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_open()=failed : %i",qc, 0); up(&qc->lock); -fail2: if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(quickcam_list) in qc_v4l_open()=failed : %i", sem_getcount(&qc->lock)); +fail2: if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(quickcam_list) in qc_v4l_open()=failed : %i", 0); up(&quickcam_list_lock); fail1: if (qcdebug&QC_DEBUGMUTEX) PDEBUG("MOD_DEC_USE_COUNT in qc_v4l_open() : %i",GET_USE_COUNT(THIS_MODULE)); MOD_DEC_USE_COUNT; @@ -2743,9 +2743,9 @@ #else TEST_BUG_MSG(qc==NULL, "qc==NULL"); #endif - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(quickcam_list) in qc_v4l_close() : %i", sem_getcount(&quickcam_list_lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(quickcam_list) in qc_v4l_close() : %i", 0); down(&quickcam_list_lock); /* Can not interrupt, we must success */ - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(%p) in qc_v4l_close() : %i", qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(%p) in qc_v4l_close() : %i", qc, 0); down(&qc->lock); /* Can not interrupt, we must success */ qc->users--; PDEBUG("close users=%i", qc->users); @@ -2760,10 +2760,10 @@ } } if (qc) { - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_close() : %i", qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_close() : %i", qc, 0); up(&qc->lock); } - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(quickcam_list) in qc_v4l_close() : %i", sem_getcount(&quickcam_list_lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(quickcam_list) in qc_v4l_close() : %i", 0); up(&quickcam_list_lock); if (qcdebug&QC_DEBUGMUTEX) PDEBUG("MOD_DEC_USE_COUNT in qc_v4l_close() : %i", GET_USE_COUNT(THIS_MODULE)); MOD_DEC_USE_COUNT; @@ -2801,7 +2801,7 @@ PDEBUG("qc_read: no video_device available or no buffer attached :( EFAULT"); return -EFAULT; } - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(%p) in qc_v4l_read() : %i", qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(%p) in qc_v4l_read() : %i", qc, 0); if (down_interruptible(&qc->lock)) return -ERESTARTSYS; if (!qc->connected) { r = -ENODEV; @@ -2823,7 +2823,7 @@ } r = count; -fail: if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_read() : %i", qc, sem_getcount(&qc->lock)); +fail: if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_read() : %i", qc, 0); up(&qc->lock); if (qcdebug&QC_DEBUGLOGIC || qcdebug&QC_DEBUGERRORS) if (r<0) PDEBUG("failed qc_v4l_read()=%i", (int)r); return r; @@ -2852,14 +2852,14 @@ struct vm_area_struct *vma = NULL; #endif if (qcdebug&QC_DEBUGLOGIC || qcdebug&QC_DEBUGUSER) PDEBUG("qc_v4l_mmap(dev=%p,size=%li,qc=%p)",dev,size,qc); - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(%p) in qc_v4l_mmap() : %i", qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(%p) in qc_v4l_mmap() : %i", qc, 0); if (down_interruptible(&qc->lock)) return -ERESTARTSYS; if (!qc->connected) { ret = -ENODEV; goto fail; } frame_size = qc_capt_frameaddr(qc, &frame); if (frame_size<0) { ret = frame_size; goto fail; } /* Should never happen */ ret = qc_mm_remap(vma, frame, frame_size, start, size); -fail: if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_mmap() : %i", qc, sem_getcount(&qc->lock)); +fail: if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_mmap() : %i", qc, 0); up(&qc->lock); if (ret<0) if (qcdebug&QC_DEBUGLOGIC || qcdebug&QC_DEBUGERRORS) PDEBUG("failed qc_v4l_mmap()=%i",ret); return ret; @@ -2881,7 +2881,7 @@ int i, retval = 0; if (qcdebug&QC_DEBUGLOGIC || qcdebug&QC_DEBUGUSER) PDEBUG("qc_v4l_ioctl(dev=%p,cmd=%u,arg=%p,qc=%p)",dev,cmd,argp,qc); - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(%p) in qc_v4l_ioctl() : %i", qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(%p) in qc_v4l_ioctl() : %i", qc, 0); if (down_interruptible(&qc->lock)) return -ERESTARTSYS; if (!qc->connected) { retval = -ENODEV; @@ -3452,7 +3452,7 @@ retval = -ENOIOCTLCMD; break; } -fail: if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_ioctl() : %i", qc, sem_getcount(&qc->lock)); +fail: if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_v4l_ioctl() : %i", qc, 0); up(&qc->lock); if (retval<0) if (qcdebug&(QC_DEBUGLOGIC|QC_DEBUGUSER|QC_DEBUGERRORS)) PDEBUG("failed qc_v4l_ioctl()=%i",retval); return retval; @@ -3547,21 +3547,21 @@ /* Check if there is already a suitable quickcam struct that can be reused */ reuse_qc = FALSE; - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(quickcam_list_lock) in qc_usb_init() : %i", sem_getcount(&quickcam_list_lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(quickcam_list_lock) in qc_usb_init() : %i", 0); if (down_interruptible(&quickcam_list_lock)) return NULL; list_for_each_entry(qc, &quickcam_list, list) { if (qc->dev != NULL) { continue; /* quickcam_list_lock protects this test */ } - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(%p) in qc_usb_init() : %i",qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down_intr(%p) in qc_usb_init() : %i",qc, 0); if (down_interruptible(&qc->lock)) { /* Failed to lock the camera. Move on in the list, skipping this camera */ - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("failed locking the camera %p in qc_usb_init() : %i",qc,sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("failed locking the camera %p in qc_usb_init() : %i",qc,0); continue; } if (qc->users<=0) { PRINTK(KERN_NOTICE, "Unplugged unused camera detected!"); - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_usb_init() : %i",qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_usb_init() : %i",qc, 0); up(&qc->lock); continue; } @@ -3662,7 +3662,7 @@ #endif /* Register input device for button */ qc->input_ptr->name = "Quickcam snapshot button"; - qc->input_ptr->private = qc; + //qc->input_ptr->private = qc; qc->input_ptr->evbit[0] = BIT(EV_KEY); qc->input_ptr->keybit[(BTN_0)/BITS_PER_LONG] = BIT(BTN_0); @@ -3764,9 +3764,9 @@ qc_v4l_exit(qc); #endif - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_usb_init() : %i",qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_usb_init() : %i",qc, 0); up(&qc->lock); - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(quickcam_list) in qc_usb_init() : %i", sem_getcount(&quickcam_list_lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(quickcam_list) in qc_usb_init() : %i", 0); up(&quickcam_list_lock); return qc; @@ -3776,14 +3776,14 @@ fail2: qc->dev = NULL; qc->connected = FALSE; - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_usb_init()=failed : %i",qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_usb_init()=failed : %i",qc, 0); up(&qc->lock); if (!reuse_qc) { kfree(qc); } fail1: if (qcdebug&QC_DEBUGLOGIC || qcdebug&QC_DEBUGERRORS) PDEBUG("failed qc_usb_init()=%i",r); - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(quickcam_list) in qc_usb_init()=failed : %i", sem_getcount(&quickcam_list_lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(quickcam_list) in qc_usb_init()=failed : %i", 0); up(&quickcam_list_lock); return NULL; } @@ -4052,9 +4052,9 @@ */ qc->connected = FALSE; - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(quickcam_list) in qc_usb_disconnect() : %i", sem_getcount(&quickcam_list_lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(quickcam_list) in qc_usb_disconnect() : %i", 0); down(&quickcam_list_lock); /* Also avoids race condition with open() */ - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(%p) in qc_usb_disconnect() : %i", qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("down(%p) in qc_usb_disconnect() : %i", qc, 0); down(&qc->lock); /* Can not interrupt, we must success */ if (qc->users <= 0) { @@ -4067,11 +4067,11 @@ qc_isoc_stop(qc); /* Unlink and free isochronous URBs */ qc_int_exit(qc); qc->dev = NULL; /* Must be set to NULL only after interrupts are guaranteed to be disabled! */ - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_usb_disconnect() : %i",qc, sem_getcount(&qc->lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(%p) in qc_usb_disconnect() : %i",qc, 0); up(&qc->lock); } - if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(quickcam_list) in qc_usb_disconnect() : %i", sem_getcount(&quickcam_list_lock)); + if (qcdebug&QC_DEBUGMUTEX) PDEBUG("up(quickcam_list) in qc_usb_disconnect() : %i", 0); up(&quickcam_list_lock); if (qcdebug&QC_DEBUGMUTEX) PDEBUG("MOD_DEC_USE_COUNT in qc_usb_disconnect() : %i",GET_USE_COUNT(THIS_MODULE)); MOD_DEC_USE_COUNT; /* Release lock--if device is not open, module can be now freed */ diff -Nurb qc-usb-messenger-1.7-orig/qc-memory.c qc-usb-messenger-1.7/qc-memory.c --- qc-usb-messenger-1.7-orig/qc-memory.c 2006-11-05 07:36:51.000000000 +0100 +++ qc-usb-messenger-1.7/qc-memory.c 2008-08-28 16:41:32.741388287 +0200 @@ -204,7 +204,9 @@ memset(mem, 0, size); /* Clear the ram out, no junk to the user */ adr = (unsigned long) mem; while ((long)size > 0) { +#ifndef SETPAGEFLAG SetPageReserved(vmalloc_to_page((void *)adr)); +#endif adr += PAGE_SIZE; size -= PAGE_SIZE; } @@ -222,7 +224,9 @@ adr = (unsigned long) mem; while ((long) size > 0) { +#ifndef SETPAGEFLAG ClearPageReserved(vmalloc_to_page((void *)adr)); +#endif adr += PAGE_SIZE; size -= PAGE_SIZE; }