--- davinci_vpfe.c	2007-03-12 10:46:40.000000000 +0100
+++ davinci_vpfe.c.new	2007-03-12 10:49:12.000000000 +0100
@@ -1127,8 +1127,17 @@
 	free_irq(IRQ_VDINT0, &vpfe_device);
 
 	while (--i >= 0) {
-		free_pages((unsigned long)vpfe_device.fbuffers[i],
-			   get_order(VPFE_MAX_FBUF_SIZE));
+		u32 size = PAGE_SIZE << VPFE_FBUF_ORDER;
+		unsigned long adr = vpfe_device.fbuffers[i];
+
+		while (size > 0) {
+			/* Clear PG_reserved bit */
+			ClearPageReserved(virt_to_page(adr));
+			adr += PAGE_SIZE;
+			size -= PAGE_SIZE;
+		}
+		free_pages(vpfe_device.fbuffers[i], VPFE_FBUF_ORDER);
+		vpfe_device.fbuffers[i] = NULL;
 	}
 	debug_print(KERN_INFO "vpfe: un-registered device video.\n");
 }
