Merge branch 'x86/urgent' into core/memblock

Reason for merge:

Forward-port urgent change to arch/x86/mm/srat_64.c to the memblock tree.

Resolved Conflicts:
arch/x86/mm/srat_64.c

Originally-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>

+494 -255
+1 -1
Documentation/vm/page-types.c
··· 478 478 } 479 479 480 480 if (opt_unpoison && !hwpoison_forget_fd) { 481 - sprintf(buf, "%s/renew-pfn", hwpoison_debug_fs); 481 + sprintf(buf, "%s/unpoison-pfn", hwpoison_debug_fs); 482 482 hwpoison_forget_fd = checked_open(buf, O_WRONLY); 483 483 } 484 484 }
+11 -1
MAINTAINERS
··· 969 969 S: Maintained 970 970 F: arch/arm/mach-s5p*/ 971 971 972 + ARM/SAMSUNG S5P SERIES FIMC SUPPORT 973 + M: Kyungmin Park <kyungmin.park@samsung.com> 974 + M: Sylwester Nawrocki <s.nawrocki@samsung.com> 975 + L: linux-arm-kernel@lists.infradead.org 976 + L: linux-media@vger.kernel.org 977 + S: Maintained 978 + F: arch/arm/plat-s5p/dev-fimc* 979 + F: arch/arm/plat-samsung/include/plat/*fimc* 980 + F: drivers/media/video/s5p-fimc/ 981 + 972 982 ARM/SHMOBILE ARM ARCHITECTURE 973 983 M: Paul Mundt <lethal@linux-sh.org> 974 984 M: Magnus Damm <magnus.damm@gmail.com> ··· 2545 2535 F: drivers/scsi/gdt* 2546 2536 2547 2537 GENERIC GPIO I2C DRIVER 2548 - M: Haavard Skinnemoen <hskinnemoen@atmel.com> 2538 + M: Haavard Skinnemoen <hskinnemoen@gmail.com> 2549 2539 S: Supported 2550 2540 F: drivers/i2c/busses/i2c-gpio.c 2551 2541 F: include/linux/i2c-gpio.h
+3 -6
arch/x86/kernel/cpu/mcheck/mce_amd.c
··· 141 141 address = (low & MASK_BLKPTR_LO) >> 21; 142 142 if (!address) 143 143 break; 144 + 144 145 address += MCG_XBLK_ADDR; 145 146 } else 146 147 ++address; ··· 149 148 if (rdmsr_safe(address, &low, &high)) 150 149 break; 151 150 152 - if (!(high & MASK_VALID_HI)) { 153 - if (block) 154 - continue; 155 - else 156 - break; 157 - } 151 + if (!(high & MASK_VALID_HI)) 152 + continue; 158 153 159 154 if (!(high & MASK_CNTP_HI) || 160 155 (high & MASK_LOCKED_HI))
+2 -1
arch/x86/kernel/cpu/mcheck/therm_throt.c
··· 216 216 err = sysfs_add_file_to_group(&sys_dev->kobj, 217 217 &attr_core_power_limit_count.attr, 218 218 thermal_attr_group.name); 219 - if (cpu_has(c, X86_FEATURE_PTS)) 219 + if (cpu_has(c, X86_FEATURE_PTS)) { 220 220 err = sysfs_add_file_to_group(&sys_dev->kobj, 221 221 &attr_package_throttle_count.attr, 222 222 thermal_attr_group.name); ··· 224 224 err = sysfs_add_file_to_group(&sys_dev->kobj, 225 225 &attr_package_power_limit_count.attr, 226 226 thermal_attr_group.name); 227 + } 227 228 228 229 return err; 229 230 }
+5 -3
arch/x86/mm/srat_64.c
··· 421 421 return -1; 422 422 } 423 423 424 - for_each_node_mask(i, nodes_parsed) 425 - memblock_x86_register_active_regions(i, nodes[i].start >> PAGE_SHIFT, 426 - nodes[i].end >> PAGE_SHIFT); 424 + for (i = 0; i < num_node_memblks; i++) 425 + memblock_x86_register_active_regions(memblk_nodeid[i], 426 + node_memblk_range[i].start >> PAGE_SHIFT, 427 + node_memblk_range[i].end >> PAGE_SHIFT); 428 + 427 429 /* for out of order entries in SRAT */ 428 430 sort_node_map(); 429 431 if (!nodes_cover_memory(nodes)) {
+8 -4
block/elevator.c
··· 938 938 } 939 939 } 940 940 kobject_uevent(&e->kobj, KOBJ_ADD); 941 + e->registered = 1; 941 942 } 942 943 return error; 943 944 } ··· 948 947 { 949 948 kobject_uevent(&e->kobj, KOBJ_REMOVE); 950 949 kobject_del(&e->kobj); 950 + e->registered = 0; 951 951 } 952 952 953 953 void elv_unregister_queue(struct request_queue *q) ··· 1044 1042 1045 1043 spin_unlock_irq(q->queue_lock); 1046 1044 1047 - __elv_unregister_queue(old_elevator); 1045 + if (old_elevator->registered) { 1046 + __elv_unregister_queue(old_elevator); 1048 1047 1049 - err = elv_register_queue(q); 1050 - if (err) 1051 - goto fail_register; 1048 + err = elv_register_queue(q); 1049 + if (err) 1050 + goto fail_register; 1051 + } 1052 1052 1053 1053 /* 1054 1054 * finally exit old elevator and turn off BYPASS.
+1 -1
drivers/gpu/drm/i915/intel_fb.c
··· 238 238 239 239 drm_framebuffer_cleanup(&ifb->base); 240 240 if (ifb->obj) { 241 - drm_gem_object_handle_unreference(ifb->obj); 242 241 drm_gem_object_unreference(ifb->obj); 242 + ifb->obj = NULL; 243 243 } 244 244 245 245 return 0;
-1
drivers/gpu/drm/nouveau/nouveau_fbcon.c
··· 352 352 353 353 if (nouveau_fb->nvbo) { 354 354 nouveau_bo_unmap(nouveau_fb->nvbo); 355 - drm_gem_object_handle_unreference_unlocked(nouveau_fb->nvbo->gem); 356 355 drm_gem_object_unreference_unlocked(nouveau_fb->nvbo->gem); 357 356 nouveau_fb->nvbo = NULL; 358 357 }
-1
drivers/gpu/drm/nouveau/nouveau_notifier.c
··· 79 79 mutex_lock(&dev->struct_mutex); 80 80 nouveau_bo_unpin(chan->notifier_bo); 81 81 mutex_unlock(&dev->struct_mutex); 82 - drm_gem_object_handle_unreference_unlocked(chan->notifier_bo->gem); 83 82 drm_gem_object_unreference_unlocked(chan->notifier_bo->gem); 84 83 drm_mm_takedown(&chan->notifier_heap); 85 84 }
-1
drivers/gpu/drm/radeon/radeon_fb.c
··· 97 97 radeon_bo_unpin(rbo); 98 98 radeon_bo_unreserve(rbo); 99 99 } 100 - drm_gem_object_handle_unreference(gobj); 101 100 drm_gem_object_unreference_unlocked(gobj); 102 101 } 103 102
+71 -12
drivers/gpu/drm/ttm/ttm_bo.c
··· 442 442 } 443 443 444 444 /** 445 + * Call bo::reserved and with the lru lock held. 446 + * Will release GPU memory type usage on destruction. 447 + * This is the place to put in driver specific hooks. 448 + * Will release the bo::reserved lock and the 449 + * lru lock on exit. 450 + */ 451 + 452 + static void ttm_bo_cleanup_memtype_use(struct ttm_buffer_object *bo) 453 + { 454 + struct ttm_bo_global *glob = bo->glob; 455 + 456 + if (bo->ttm) { 457 + 458 + /** 459 + * Release the lru_lock, since we don't want to have 460 + * an atomic requirement on ttm_tt[unbind|destroy]. 461 + */ 462 + 463 + spin_unlock(&glob->lru_lock); 464 + ttm_tt_unbind(bo->ttm); 465 + ttm_tt_destroy(bo->ttm); 466 + bo->ttm = NULL; 467 + spin_lock(&glob->lru_lock); 468 + } 469 + 470 + if (bo->mem.mm_node) { 471 + drm_mm_put_block(bo->mem.mm_node); 472 + bo->mem.mm_node = NULL; 473 + } 474 + 475 + atomic_set(&bo->reserved, 0); 476 + wake_up_all(&bo->event_queue); 477 + spin_unlock(&glob->lru_lock); 478 + } 479 + 480 + 481 + /** 445 482 * If bo idle, remove from delayed- and lru lists, and unref. 446 483 * If not idle, and already on delayed list, do nothing. 447 484 * If not idle, and not on delayed list, put on delayed list, ··· 493 456 int ret; 494 457 495 458 spin_lock(&bo->lock); 459 + retry: 496 460 (void) ttm_bo_wait(bo, false, false, !remove_all); 497 461 498 462 if (!bo->sync_obj) { ··· 502 464 spin_unlock(&bo->lock); 503 465 504 466 spin_lock(&glob->lru_lock); 505 - put_count = ttm_bo_del_from_lru(bo); 467 + ret = ttm_bo_reserve_locked(bo, false, !remove_all, false, 0); 506 468 507 - ret = ttm_bo_reserve_locked(bo, false, false, false, 0); 508 - BUG_ON(ret); 509 - if (bo->ttm) 510 - ttm_tt_unbind(bo->ttm); 469 + /** 470 + * Someone else has the object reserved. Bail and retry. 471 + */ 472 + 473 + if (unlikely(ret == -EBUSY)) { 474 + spin_unlock(&glob->lru_lock); 475 + spin_lock(&bo->lock); 476 + goto requeue; 477 + } 478 + 479 + /** 480 + * We can re-check for sync object without taking 481 + * the bo::lock since setting the sync object requires 482 + * also bo::reserved. A busy object at this point may 483 + * be caused by another thread starting an accelerated 484 + * eviction. 485 + */ 486 + 487 + if (unlikely(bo->sync_obj)) { 488 + atomic_set(&bo->reserved, 0); 489 + wake_up_all(&bo->event_queue); 490 + spin_unlock(&glob->lru_lock); 491 + spin_lock(&bo->lock); 492 + if (remove_all) 493 + goto retry; 494 + else 495 + goto requeue; 496 + } 497 + 498 + put_count = ttm_bo_del_from_lru(bo); 511 499 512 500 if (!list_empty(&bo->ddestroy)) { 513 501 list_del_init(&bo->ddestroy); 514 502 ++put_count; 515 503 } 516 - if (bo->mem.mm_node) { 517 - drm_mm_put_block(bo->mem.mm_node); 518 - bo->mem.mm_node = NULL; 519 - } 520 - spin_unlock(&glob->lru_lock); 521 504 522 - atomic_set(&bo->reserved, 0); 505 + ttm_bo_cleanup_memtype_use(bo); 523 506 524 507 while (put_count--) 525 508 kref_put(&bo->list_kref, ttm_bo_ref_bug); 526 509 527 510 return 0; 528 511 } 529 - 512 + requeue: 530 513 spin_lock(&glob->lru_lock); 531 514 if (list_empty(&bo->ddestroy)) { 532 515 void *sync_obj = bo->sync_obj;
+5
drivers/i2c/busses/i2c-cpm.c
··· 677 677 dev_dbg(&ofdev->dev, "hw routines for %s registered.\n", 678 678 cpm->adap.name); 679 679 680 + /* 681 + * register OF I2C devices 682 + */ 683 + of_i2c_register_devices(&cpm->adap); 684 + 680 685 return 0; 681 686 out_shut: 682 687 cpm_i2c_shutdown(cpm);
+3
drivers/i2c/busses/i2c-ibm_iic.c
··· 761 761 dev_info(&ofdev->dev, "using %s mode\n", 762 762 dev->fast_mode ? "fast (400 kHz)" : "standard (100 kHz)"); 763 763 764 + /* Now register all the child nodes */ 765 + of_i2c_register_devices(adap); 766 + 764 767 return 0; 765 768 766 769 error_cleanup:
+1
drivers/i2c/busses/i2c-mpc.c
··· 632 632 dev_err(i2c->dev, "failed to add adapter\n"); 633 633 goto fail_add; 634 634 } 635 + of_i2c_register_devices(&i2c->adap); 635 636 636 637 return result; 637 638
+8 -4
drivers/i2c/busses/i2c-pca-isa.c
··· 71 71 72 72 static int pca_isa_waitforcompletion(void *pd) 73 73 { 74 - long ret = ~0; 75 74 unsigned long timeout; 75 + long ret; 76 76 77 77 if (irq > -1) { 78 78 ret = wait_event_timeout(pca_wait, ··· 81 81 } else { 82 82 /* Do polling */ 83 83 timeout = jiffies + pca_isa_ops.timeout; 84 - while (((pca_isa_readbyte(pd, I2C_PCA_CON) 85 - & I2C_PCA_CON_SI) == 0) 86 - && (ret = time_before(jiffies, timeout))) 84 + do { 85 + ret = time_before(jiffies, timeout); 86 + if (pca_isa_readbyte(pd, I2C_PCA_CON) 87 + & I2C_PCA_CON_SI) 88 + break; 87 89 udelay(100); 90 + } while (ret); 88 91 } 92 + 89 93 return ret > 0; 90 94 } 91 95
+7 -4
drivers/i2c/busses/i2c-pca-platform.c
··· 80 80 static int i2c_pca_pf_waitforcompletion(void *pd) 81 81 { 82 82 struct i2c_pca_pf_data *i2c = pd; 83 - long ret = ~0; 84 83 unsigned long timeout; 84 + long ret; 85 85 86 86 if (i2c->irq) { 87 87 ret = wait_event_timeout(i2c->wait, ··· 90 90 } else { 91 91 /* Do polling */ 92 92 timeout = jiffies + i2c->adap.timeout; 93 - while (((i2c->algo_data.read_byte(i2c, I2C_PCA_CON) 94 - & I2C_PCA_CON_SI) == 0) 95 - && (ret = time_before(jiffies, timeout))) 93 + do { 94 + ret = time_before(jiffies, timeout); 95 + if (i2c->algo_data.read_byte(i2c, I2C_PCA_CON) 96 + & I2C_PCA_CON_SI) 97 + break; 96 98 udelay(100); 99 + } while (ret); 97 100 } 98 101 99 102 return ret > 0;
+24 -30
drivers/i2c/i2c-core.c
··· 32 32 #include <linux/init.h> 33 33 #include <linux/idr.h> 34 34 #include <linux/mutex.h> 35 - #include <linux/of_i2c.h> 36 35 #include <linux/of_device.h> 37 36 #include <linux/completion.h> 38 37 #include <linux/hardirq.h> ··· 196 197 { 197 198 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; 198 199 199 - if (pm_runtime_suspended(dev)) 200 - return 0; 201 - 202 - if (pm) 203 - return pm->suspend ? pm->suspend(dev) : 0; 200 + if (pm) { 201 + if (pm_runtime_suspended(dev)) 202 + return 0; 203 + else 204 + return pm->suspend ? pm->suspend(dev) : 0; 205 + } 204 206 205 207 return i2c_legacy_suspend(dev, PMSG_SUSPEND); 206 208 } ··· 216 216 else 217 217 ret = i2c_legacy_resume(dev); 218 218 219 - if (!ret) { 220 - pm_runtime_disable(dev); 221 - pm_runtime_set_active(dev); 222 - pm_runtime_enable(dev); 223 - } 224 - 225 219 return ret; 226 220 } 227 221 ··· 223 229 { 224 230 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; 225 231 226 - if (pm_runtime_suspended(dev)) 227 - return 0; 228 - 229 - if (pm) 230 - return pm->freeze ? pm->freeze(dev) : 0; 232 + if (pm) { 233 + if (pm_runtime_suspended(dev)) 234 + return 0; 235 + else 236 + return pm->freeze ? pm->freeze(dev) : 0; 237 + } 231 238 232 239 return i2c_legacy_suspend(dev, PMSG_FREEZE); 233 240 } ··· 237 242 { 238 243 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; 239 244 240 - if (pm_runtime_suspended(dev)) 241 - return 0; 242 - 243 - if (pm) 244 - return pm->thaw ? pm->thaw(dev) : 0; 245 + if (pm) { 246 + if (pm_runtime_suspended(dev)) 247 + return 0; 248 + else 249 + return pm->thaw ? pm->thaw(dev) : 0; 250 + } 245 251 246 252 return i2c_legacy_resume(dev); 247 253 } ··· 251 255 { 252 256 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; 253 257 254 - if (pm_runtime_suspended(dev)) 255 - return 0; 256 - 257 - if (pm) 258 - return pm->poweroff ? pm->poweroff(dev) : 0; 258 + if (pm) { 259 + if (pm_runtime_suspended(dev)) 260 + return 0; 261 + else 262 + return pm->poweroff ? pm->poweroff(dev) : 0; 263 + } 259 264 260 265 return i2c_legacy_suspend(dev, PMSG_HIBERNATE); 261 266 } ··· 872 875 /* create pre-declared device nodes */ 873 876 if (adap->nr < __i2c_first_dynamic_bus_num) 874 877 i2c_scan_static_board_info(adap); 875 - 876 - /* Register devices from the device tree */ 877 - of_i2c_register_devices(adap); 878 878 879 879 /* Notify drivers */ 880 880 mutex_lock(&core_lock);
+3
drivers/input/joydev.c
··· 483 483 484 484 memcpy(joydev->abspam, abspam, len); 485 485 486 + for (i = 0; i < joydev->nabs; i++) 487 + joydev->absmap[joydev->abspam[i]] = i; 488 + 486 489 out: 487 490 kfree(abspam); 488 491 return retval;
+7
drivers/input/misc/uinput.c
··· 404 404 retval = uinput_validate_absbits(dev); 405 405 if (retval < 0) 406 406 goto exit; 407 + if (test_bit(ABS_MT_SLOT, dev->absbit)) { 408 + int nslot = input_abs_get_max(dev, ABS_MT_SLOT) + 1; 409 + input_mt_create_slots(dev, nslot); 410 + input_set_events_per_packet(dev, 6 * nslot); 411 + } else if (test_bit(ABS_MT_POSITION_X, dev->absbit)) { 412 + input_set_events_per_packet(dev, 60); 413 + } 407 414 } 408 415 409 416 udev->state = UIST_SETUP_COMPLETE;
+12 -11
drivers/input/tablet/wacom_sys.c
··· 103 103 static int wacom_open(struct input_dev *dev) 104 104 { 105 105 struct wacom *wacom = input_get_drvdata(dev); 106 + int retval = 0; 107 + 108 + if (usb_autopm_get_interface(wacom->intf) < 0) 109 + return -EIO; 106 110 107 111 mutex_lock(&wacom->lock); 108 112 109 - wacom->irq->dev = wacom->usbdev; 110 - 111 - if (usb_autopm_get_interface(wacom->intf) < 0) { 112 - mutex_unlock(&wacom->lock); 113 - return -EIO; 114 - } 115 - 116 113 if (usb_submit_urb(wacom->irq, GFP_KERNEL)) { 117 - usb_autopm_put_interface(wacom->intf); 118 - mutex_unlock(&wacom->lock); 119 - return -EIO; 114 + retval = -EIO; 115 + goto out; 120 116 } 121 117 122 118 wacom->open = true; 123 119 wacom->intf->needs_remote_wakeup = 1; 124 120 121 + out: 125 122 mutex_unlock(&wacom->lock); 126 - return 0; 123 + if (retval) 124 + usb_autopm_put_interface(wacom->intf); 125 + return retval; 127 126 } 128 127 129 128 static void wacom_close(struct input_dev *dev) ··· 134 135 wacom->open = false; 135 136 wacom->intf->needs_remote_wakeup = 0; 136 137 mutex_unlock(&wacom->lock); 138 + 139 + usb_autopm_put_interface(wacom->intf); 137 140 } 138 141 139 142 static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc,
+5 -4
drivers/md/bitmap.c
··· 1000 1000 page = bitmap->sb_page; 1001 1001 offset = sizeof(bitmap_super_t); 1002 1002 if (!file) 1003 - read_sb_page(bitmap->mddev, 1004 - bitmap->mddev->bitmap_info.offset, 1005 - page, 1006 - index, count); 1003 + page = read_sb_page( 1004 + bitmap->mddev, 1005 + bitmap->mddev->bitmap_info.offset, 1006 + page, 1007 + index, count); 1007 1008 } else if (file) { 1008 1009 page = read_page(file, index, bitmap, count); 1009 1010 offset = 0;
+3 -1
drivers/md/raid1.c
··· 1839 1839 1840 1840 /* take from bio_init */ 1841 1841 bio->bi_next = NULL; 1842 + bio->bi_flags &= ~(BIO_POOL_MASK-1); 1842 1843 bio->bi_flags |= 1 << BIO_UPTODATE; 1844 + bio->bi_comp_cpu = -1; 1843 1845 bio->bi_rw = READ; 1844 1846 bio->bi_vcnt = 0; 1845 1847 bio->bi_idx = 0; ··· 1914 1912 !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) 1915 1913 break; 1916 1914 BUG_ON(sync_blocks < (PAGE_SIZE>>9)); 1917 - if (len > (sync_blocks<<9)) 1915 + if ((len >> 9) > sync_blocks) 1918 1916 len = sync_blocks<<9; 1919 1917 } 1920 1918
+8 -1
drivers/media/IR/ir-keytable.c
··· 319 319 * a keyup event might follow immediately after the keydown. 320 320 */ 321 321 spin_lock_irqsave(&ir->keylock, flags); 322 - if (time_is_after_eq_jiffies(ir->keyup_jiffies)) 322 + if (time_is_before_eq_jiffies(ir->keyup_jiffies)) 323 323 ir_keyup(ir); 324 324 spin_unlock_irqrestore(&ir->keylock, flags); 325 325 } ··· 509 509 driver_name, rc_tab->name, 510 510 (ir_dev->props && ir_dev->props->driver_type == RC_DRIVER_IR_RAW) ? 511 511 " in raw mode" : ""); 512 + 513 + /* 514 + * Default delay of 250ms is too short for some protocols, expecially 515 + * since the timeout is currently set to 250ms. Increase it to 500ms, 516 + * to avoid wrong repetition of the keycodes. 517 + */ 518 + input_dev->rep[REP_DELAY] = 500; 512 519 513 520 return 0; 514 521
+1 -1
drivers/media/IR/ir-lirc-codec.c
··· 267 267 features |= LIRC_CAN_SET_SEND_CARRIER; 268 268 269 269 if (ir_dev->props->s_tx_duty_cycle) 270 - features |= LIRC_CAN_SET_REC_DUTY_CYCLE; 270 + features |= LIRC_CAN_SET_SEND_DUTY_CYCLE; 271 271 } 272 272 273 273 if (ir_dev->props->s_rx_carrier_range)
+3 -1
drivers/media/IR/ir-raw-event.c
··· 279 279 "rc%u", (unsigned int)ir->devno); 280 280 281 281 if (IS_ERR(ir->raw->thread)) { 282 + int ret = PTR_ERR(ir->raw->thread); 283 + 282 284 kfree(ir->raw); 283 285 ir->raw = NULL; 284 - return PTR_ERR(ir->raw->thread); 286 + return ret; 285 287 } 286 288 287 289 mutex_lock(&ir_raw_handler_lock);
+11 -6
drivers/media/IR/ir-sysfs.c
··· 67 67 char *tmp = buf; 68 68 int i; 69 69 70 - if (ir_dev->props->driver_type == RC_DRIVER_SCANCODE) { 70 + if (ir_dev->props && ir_dev->props->driver_type == RC_DRIVER_SCANCODE) { 71 71 enabled = ir_dev->rc_tab.ir_type; 72 72 allowed = ir_dev->props->allowed_protos; 73 - } else { 73 + } else if (ir_dev->raw) { 74 74 enabled = ir_dev->raw->enabled_protocols; 75 75 allowed = ir_raw_get_allowed_protocols(); 76 - } 76 + } else 77 + return sprintf(tmp, "[builtin]\n"); 77 78 78 79 IR_dprintk(1, "allowed - 0x%llx, enabled - 0x%llx\n", 79 80 (long long)allowed, ··· 122 121 int rc, i, count = 0; 123 122 unsigned long flags; 124 123 125 - if (ir_dev->props->driver_type == RC_DRIVER_SCANCODE) 124 + if (ir_dev->props && ir_dev->props->driver_type == RC_DRIVER_SCANCODE) 126 125 type = ir_dev->rc_tab.ir_type; 127 - else 126 + else if (ir_dev->raw) 128 127 type = ir_dev->raw->enabled_protocols; 128 + else { 129 + IR_dprintk(1, "Protocol switching not supported\n"); 130 + return -EINVAL; 131 + } 129 132 130 133 while ((tmp = strsep((char **) &data, " \n")) != NULL) { 131 134 if (!*tmp) ··· 190 185 } 191 186 } 192 187 193 - if (ir_dev->props->driver_type == RC_DRIVER_SCANCODE) { 188 + if (ir_dev->props && ir_dev->props->driver_type == RC_DRIVER_SCANCODE) { 194 189 spin_lock_irqsave(&ir_dev->rc_tab.lock, flags); 195 190 ir_dev->rc_tab.ir_type = type; 196 191 spin_unlock_irqrestore(&ir_dev->rc_tab.lock, flags);
+3
drivers/media/IR/keymaps/rc-rc6-mce.c
··· 19 19 20 20 { 0x800f0416, KEY_PLAY }, 21 21 { 0x800f0418, KEY_PAUSE }, 22 + { 0x800f046e, KEY_PLAYPAUSE }, 22 23 { 0x800f0419, KEY_STOP }, 23 24 { 0x800f0417, KEY_RECORD }, 24 25 ··· 38 37 { 0x800f0411, KEY_VOLUMEDOWN }, 39 38 { 0x800f0412, KEY_CHANNELUP }, 40 39 { 0x800f0413, KEY_CHANNELDOWN }, 40 + { 0x800f043a, KEY_BRIGHTNESSUP }, 41 + { 0x800f0480, KEY_BRIGHTNESSDOWN }, 41 42 42 43 { 0x800f0401, KEY_NUMERIC_1 }, 43 44 { 0x800f0402, KEY_NUMERIC_2 },
+4
drivers/media/IR/mceusb.c
··· 120 120 { USB_DEVICE(VENDOR_PHILIPS, 0x0613) }, 121 121 /* Philips eHome Infrared Transceiver */ 122 122 { USB_DEVICE(VENDOR_PHILIPS, 0x0815) }, 123 + /* Philips/Spinel plus IR transceiver for ASUS */ 124 + { USB_DEVICE(VENDOR_PHILIPS, 0x206c) }, 125 + /* Philips/Spinel plus IR transceiver for ASUS */ 126 + { USB_DEVICE(VENDOR_PHILIPS, 0x2088) }, 123 127 /* Realtek MCE IR Receiver */ 124 128 { USB_DEVICE(VENDOR_REALTEK, 0x0161) }, 125 129 /* SMK/Toshiba G83C0004D410 */
-3
drivers/media/dvb/dvb-usb/dib0700_core.c
··· 673 673 else 674 674 dev->props.rc.core.bulk_mode = false; 675 675 676 - /* Need a higher delay, to avoid wrong repeat */ 677 - dev->rc_input_dev->rep[REP_DELAY] = 500; 678 - 679 676 dib0700_rc_setup(dev); 680 677 681 678 return 0;
+54 -2
drivers/media/dvb/dvb-usb/dib0700_devices.c
··· 940 940 return adap->fe == NULL ? -ENODEV : 0; 941 941 } 942 942 943 + /* STK7770P */ 944 + static struct dib7000p_config dib7770p_dib7000p_config = { 945 + .output_mpeg2_in_188_bytes = 1, 946 + 947 + .agc_config_count = 1, 948 + .agc = &dib7070_agc_config, 949 + .bw = &dib7070_bw_config_12_mhz, 950 + .tuner_is_baseband = 1, 951 + .spur_protect = 1, 952 + 953 + .gpio_dir = DIB7000P_GPIO_DEFAULT_DIRECTIONS, 954 + .gpio_val = DIB7000P_GPIO_DEFAULT_VALUES, 955 + .gpio_pwm_pos = DIB7000P_GPIO_DEFAULT_PWM_POS, 956 + 957 + .hostbus_diversity = 1, 958 + .enable_current_mirror = 1, 959 + .disable_sample_and_hold = 0, 960 + }; 961 + 962 + static int stk7770p_frontend_attach(struct dvb_usb_adapter *adap) 963 + { 964 + struct usb_device_descriptor *p = &adap->dev->udev->descriptor; 965 + if (p->idVendor == cpu_to_le16(USB_VID_PINNACLE) && 966 + p->idProduct == cpu_to_le16(USB_PID_PINNACLE_PCTV72E)) 967 + dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 0); 968 + else 969 + dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 1); 970 + msleep(10); 971 + dib0700_set_gpio(adap->dev, GPIO9, GPIO_OUT, 1); 972 + dib0700_set_gpio(adap->dev, GPIO4, GPIO_OUT, 1); 973 + dib0700_set_gpio(adap->dev, GPIO7, GPIO_OUT, 1); 974 + dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 0); 975 + 976 + dib0700_ctrl_clock(adap->dev, 72, 1); 977 + 978 + msleep(10); 979 + dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 1); 980 + msleep(10); 981 + dib0700_set_gpio(adap->dev, GPIO0, GPIO_OUT, 1); 982 + 983 + if (dib7000p_i2c_enumeration(&adap->dev->i2c_adap, 1, 18, 984 + &dib7770p_dib7000p_config) != 0) { 985 + err("%s: dib7000p_i2c_enumeration failed. Cannot continue\n", 986 + __func__); 987 + return -ENODEV; 988 + } 989 + 990 + adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, 991 + &dib7770p_dib7000p_config); 992 + return adap->fe == NULL ? -ENODEV : 0; 993 + } 994 + 943 995 /* DIB807x generic */ 944 996 static struct dibx000_agc_config dib807x_agc_config[2] = { 945 997 { ··· 1833 1781 /* 60 */{ USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_XXS_2) }, 1834 1782 { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK807XPVR) }, 1835 1783 { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK807XP) }, 1836 - { USB_DEVICE(USB_VID_PIXELVIEW, USB_PID_PIXELVIEW_SBTVD) }, 1784 + { USB_DEVICE_VER(USB_VID_PIXELVIEW, USB_PID_PIXELVIEW_SBTVD, 0x000, 0x3f00) }, 1837 1785 { USB_DEVICE(USB_VID_EVOLUTEPC, USB_PID_TVWAY_PLUS) }, 1838 1786 /* 65 */{ USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV73ESE) }, 1839 1787 { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV282E) }, ··· 2458 2406 .pid_filter_count = 32, 2459 2407 .pid_filter = stk70x0p_pid_filter, 2460 2408 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl, 2461 - .frontend_attach = stk7070p_frontend_attach, 2409 + .frontend_attach = stk7770p_frontend_attach, 2462 2410 .tuner_attach = dib7770p_tuner_attach, 2463 2411 2464 2412 DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
+1 -3
drivers/media/dvb/dvb-usb/opera1.c
··· 483 483 } 484 484 } 485 485 kfree(p); 486 - if (fw) { 487 - release_firmware(fw); 488 - } 486 + release_firmware(fw); 489 487 return ret; 490 488 } 491 489
+7 -1
drivers/media/dvb/frontends/dib7000p.c
··· 260 260 261 261 // dprintk( "908: %x, 909: %x\n", reg_908, reg_909); 262 262 263 + reg_909 |= (state->cfg.disable_sample_and_hold & 1) << 4; 264 + reg_908 |= (state->cfg.enable_current_mirror & 1) << 7; 265 + 263 266 dib7000p_write_word(state, 908, reg_908); 264 267 dib7000p_write_word(state, 909, reg_909); 265 268 } ··· 781 778 default: 782 779 case GUARD_INTERVAL_1_32: value *= 1; break; 783 780 } 784 - state->div_sync_wait = (value * 3) / 2 + 32; // add 50% SFN margin + compensate for one DVSY-fifo TODO 781 + if (state->cfg.diversity_delay == 0) 782 + state->div_sync_wait = (value * 3) / 2 + 48; // add 50% SFN margin + compensate for one DVSY-fifo 783 + else 784 + state->div_sync_wait = (value * 3) / 2 + state->cfg.diversity_delay; // add 50% SFN margin + compensate for one DVSY-fifo 785 785 786 786 /* deactive the possibility of diversity reception if extended interleaver */ 787 787 state->div_force_off = !1 && ch->u.ofdm.transmission_mode != TRANSMISSION_MODE_8K;
+5
drivers/media/dvb/frontends/dib7000p.h
··· 33 33 int (*agc_control) (struct dvb_frontend *, u8 before); 34 34 35 35 u8 output_mode; 36 + u8 disable_sample_and_hold : 1; 37 + 38 + u8 enable_current_mirror : 1; 39 + u8 diversity_delay; 40 + 36 41 }; 37 42 38 43 #define DEFAULT_DIB7000P_I2C_ADDRESS 18
+13 -20
drivers/media/dvb/siano/smscoreapi.c
··· 1098 1098 * 1099 1099 * @return pointer to descriptor on success, NULL on error. 1100 1100 */ 1101 - struct smscore_buffer_t *smscore_getbuffer(struct smscore_device_t *coredev) 1101 + 1102 + struct smscore_buffer_t *get_entry(struct smscore_device_t *coredev) 1102 1103 { 1103 1104 struct smscore_buffer_t *cb = NULL; 1104 1105 unsigned long flags; 1105 1106 1106 - DEFINE_WAIT(wait); 1107 - 1108 1107 spin_lock_irqsave(&coredev->bufferslock, flags); 1109 - 1110 - /* This function must return a valid buffer, since the buffer list is 1111 - * finite, we check that there is an available buffer, if not, we wait 1112 - * until such buffer become available. 1113 - */ 1114 - 1115 - prepare_to_wait(&coredev->buffer_mng_waitq, &wait, TASK_INTERRUPTIBLE); 1116 - if (list_empty(&coredev->buffers)) { 1117 - spin_unlock_irqrestore(&coredev->bufferslock, flags); 1118 - schedule(); 1119 - spin_lock_irqsave(&coredev->bufferslock, flags); 1108 + if (!list_empty(&coredev->buffers)) { 1109 + cb = (struct smscore_buffer_t *) coredev->buffers.next; 1110 + list_del(&cb->entry); 1120 1111 } 1121 - 1122 - finish_wait(&coredev->buffer_mng_waitq, &wait); 1123 - 1124 - cb = (struct smscore_buffer_t *) coredev->buffers.next; 1125 - list_del(&cb->entry); 1126 - 1127 1112 spin_unlock_irqrestore(&coredev->bufferslock, flags); 1113 + return cb; 1114 + } 1115 + 1116 + struct smscore_buffer_t *smscore_getbuffer(struct smscore_device_t *coredev) 1117 + { 1118 + struct smscore_buffer_t *cb = NULL; 1119 + 1120 + wait_event(coredev->buffer_mng_waitq, (cb = get_entry(coredev))); 1128 1121 1129 1122 return cb; 1130 1123 }
+1 -1
drivers/media/radio/si470x/radio-si470x-i2c.c
··· 395 395 radio->registers[POWERCFG] = POWERCFG_ENABLE; 396 396 if (si470x_set_register(radio, POWERCFG) < 0) { 397 397 retval = -EIO; 398 - goto err_all; 398 + goto err_video; 399 399 } 400 400 msleep(110); 401 401
+1
drivers/media/video/cx231xx/Makefile
··· 11 11 EXTRA_CFLAGS += -Idrivers/media/common/tuners 12 12 EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core 13 13 EXTRA_CFLAGS += -Idrivers/media/dvb/frontends 14 + EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-usb 14 15
+11 -6
drivers/media/video/cx231xx/cx231xx-cards.c
··· 32 32 #include <media/v4l2-chip-ident.h> 33 33 34 34 #include <media/cx25840.h> 35 + #include "dvb-usb-ids.h" 35 36 #include "xc5000.h" 36 37 37 38 #include "cx231xx.h" ··· 176 175 .driver_info = CX231XX_BOARD_CNXT_RDE_250}, 177 176 {USB_DEVICE(0x0572, 0x58A1), 178 177 .driver_info = CX231XX_BOARD_CNXT_RDU_250}, 178 + {USB_DEVICE_VER(USB_VID_PIXELVIEW, USB_PID_PIXELVIEW_SBTVD, 0x4000,0x4fff), 179 + .driver_info = CX231XX_BOARD_UNKNOWN}, 179 180 {}, 180 181 }; 181 182 ··· 229 226 dev->board.name, dev->model); 230 227 231 228 /* set the direction for GPIO pins */ 232 - cx231xx_set_gpio_direction(dev, dev->board.tuner_gpio->bit, 1); 233 - cx231xx_set_gpio_value(dev, dev->board.tuner_gpio->bit, 1); 234 - cx231xx_set_gpio_direction(dev, dev->board.tuner_sif_gpio, 1); 229 + if (dev->board.tuner_gpio) { 230 + cx231xx_set_gpio_direction(dev, dev->board.tuner_gpio->bit, 1); 231 + cx231xx_set_gpio_value(dev, dev->board.tuner_gpio->bit, 1); 232 + cx231xx_set_gpio_direction(dev, dev->board.tuner_sif_gpio, 1); 235 233 236 - /* request some modules if any required */ 234 + /* request some modules if any required */ 237 235 238 - /* reset the Tuner */ 239 - cx231xx_gpio_set(dev, dev->board.tuner_gpio); 236 + /* reset the Tuner */ 237 + cx231xx_gpio_set(dev, dev->board.tuner_gpio); 238 + } 240 239 241 240 /* set the mode to Analog mode initially */ 242 241 cx231xx_set_mode(dev, CX231XX_ANALOG_MODE);
+1 -1
drivers/media/video/cx25840/cx25840-core.c
··· 1996 1996 1997 1997 state->volume = v4l2_ctrl_new_std(&state->hdl, 1998 1998 &cx25840_audio_ctrl_ops, V4L2_CID_AUDIO_VOLUME, 1999 - 0, 65335, 65535 / 100, default_volume); 1999 + 0, 65535, 65535 / 100, default_volume); 2000 2000 state->mute = v4l2_ctrl_new_std(&state->hdl, 2001 2001 &cx25840_audio_ctrl_ops, V4L2_CID_AUDIO_MUTE, 2002 2002 0, 1, 1, 0);
+1 -1
drivers/media/video/cx88/Kconfig
··· 17 17 18 18 config VIDEO_CX88_ALSA 19 19 tristate "Conexant 2388x DMA audio support" 20 - depends on VIDEO_CX88 && SND && EXPERIMENTAL 20 + depends on VIDEO_CX88 && SND 21 21 select SND_PCM 22 22 ---help--- 23 23 This is a video4linux driver for direct (DMA) audio on
+1
drivers/media/video/gspca/gspca.c
··· 223 223 usb_rcvintpipe(dev, ep->bEndpointAddress), 224 224 buffer, buffer_len, 225 225 int_irq, (void *)gspca_dev, interval); 226 + urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 226 227 gspca_dev->int_urb = urb; 227 228 ret = usb_submit_urb(urb, GFP_KERNEL); 228 229 if (ret < 0) {
+1 -2
drivers/media/video/gspca/sn9c20x.c
··· 2357 2357 (data[33] << 10); 2358 2358 avg_lum >>= 9; 2359 2359 atomic_set(&sd->avg_lum, avg_lum); 2360 - gspca_frame_add(gspca_dev, LAST_PACKET, 2361 - data, len); 2360 + gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); 2362 2361 return; 2363 2362 } 2364 2363 if (gspca_dev->last_packet_type == LAST_PACKET) {
+2
drivers/media/video/ivtv/ivtvfb.c
··· 466 466 struct fb_vblank vblank; 467 467 u32 trace; 468 468 469 + memset(&vblank, 0, sizeof(struct fb_vblank)); 470 + 469 471 vblank.flags = FB_VBLANK_HAVE_COUNT |FB_VBLANK_HAVE_VCOUNT | 470 472 FB_VBLANK_HAVE_VSYNC; 471 473 trace = read_reg(IVTV_REG_DEC_LINE_FIELD) >> 16;
+2 -1
drivers/media/video/mem2mem_testdev.c
··· 239 239 return -EFAULT; 240 240 } 241 241 242 - if (in_buf->vb.size < out_buf->vb.size) { 242 + if (in_buf->vb.size > out_buf->vb.size) { 243 243 v4l2_err(&dev->v4l2_dev, "Output buffer is too small\n"); 244 244 return -EINVAL; 245 245 } ··· 1014 1014 v4l2_m2m_release(dev->m2m_dev); 1015 1015 del_timer_sync(&dev->timer); 1016 1016 video_unregister_device(dev->vfd); 1017 + video_device_release(dev->vfd); 1017 1018 v4l2_device_unregister(&dev->v4l2_dev); 1018 1019 kfree(dev); 1019 1020
+7 -1
drivers/media/video/mt9m111.c
··· 447 447 dev_dbg(&client->dev, "%s left=%d, top=%d, width=%d, height=%d\n", 448 448 __func__, rect.left, rect.top, rect.width, rect.height); 449 449 450 + if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 451 + return -EINVAL; 452 + 450 453 ret = mt9m111_make_rect(client, &rect); 451 454 if (!ret) 452 455 mt9m111->rect = rect; ··· 469 466 470 467 static int mt9m111_cropcap(struct v4l2_subdev *sd, struct v4l2_cropcap *a) 471 468 { 469 + if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 470 + return -EINVAL; 471 + 472 472 a->bounds.left = MT9M111_MIN_DARK_COLS; 473 473 a->bounds.top = MT9M111_MIN_DARK_ROWS; 474 474 a->bounds.width = MT9M111_MAX_WIDTH; 475 475 a->bounds.height = MT9M111_MAX_HEIGHT; 476 476 a->defrect = a->bounds; 477 - a->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 478 477 a->pixelaspect.numerator = 1; 479 478 a->pixelaspect.denominator = 1; 480 479 ··· 492 487 mf->width = mt9m111->rect.width; 493 488 mf->height = mt9m111->rect.height; 494 489 mf->code = mt9m111->fmt->code; 490 + mf->colorspace = mt9m111->fmt->colorspace; 495 491 mf->field = V4L2_FIELD_NONE; 496 492 497 493 return 0;
-3
drivers/media/video/mt9v022.c
··· 402 402 if (mt9v022->model != V4L2_IDENT_MT9V022IX7ATC) 403 403 return -EINVAL; 404 404 break; 405 - case 0: 406 - /* No format change, only geometry */ 407 - break; 408 405 default: 409 406 return -EINVAL; 410 407 }
+4
drivers/media/video/mx2_camera.c
··· 378 378 379 379 spin_lock_irqsave(&pcdev->lock, flags); 380 380 381 + if (*fb_active == NULL) 382 + goto out; 383 + 381 384 vb = &(*fb_active)->vb; 382 385 dev_dbg(pcdev->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__, 383 386 vb, vb->baddr, vb->bsize); ··· 405 402 406 403 *fb_active = buf; 407 404 405 + out: 408 406 spin_unlock_irqrestore(&pcdev->lock, flags); 409 407 } 410 408
+3 -3
drivers/media/video/pvrusb2/pvrusb2-ctrl.c
··· 513 513 if (ret >= 0) { 514 514 ret = pvr2_ctrl_range_check(cptr,*valptr); 515 515 } 516 - if (maskptr) *maskptr = ~0; 516 + *maskptr = ~0; 517 517 } else if (cptr->info->type == pvr2_ctl_bool) { 518 518 ret = parse_token(ptr,len,valptr,boolNames, 519 519 ARRAY_SIZE(boolNames)); ··· 522 522 } else if (ret == 0) { 523 523 *valptr = (*valptr & 1) ? !0 : 0; 524 524 } 525 - if (maskptr) *maskptr = 1; 525 + *maskptr = 1; 526 526 } else if (cptr->info->type == pvr2_ctl_enum) { 527 527 ret = parse_token( 528 528 ptr,len,valptr, ··· 531 531 if (ret >= 0) { 532 532 ret = pvr2_ctrl_range_check(cptr,*valptr); 533 533 } 534 - if (maskptr) *maskptr = ~0; 534 + *maskptr = ~0; 535 535 } else if (cptr->info->type == pvr2_ctl_bitmask) { 536 536 ret = parse_tlist( 537 537 ptr,len,maskptr,valptr,
+42 -52
drivers/media/video/s5p-fimc/fimc-core.c
··· 393 393 dbg("ctx->out_order_1p= %d", ctx->out_order_1p); 394 394 } 395 395 396 + static void fimc_prepare_dma_offset(struct fimc_ctx *ctx, struct fimc_frame *f) 397 + { 398 + struct samsung_fimc_variant *variant = ctx->fimc_dev->variant; 399 + 400 + f->dma_offset.y_h = f->offs_h; 401 + if (!variant->pix_hoff) 402 + f->dma_offset.y_h *= (f->fmt->depth >> 3); 403 + 404 + f->dma_offset.y_v = f->offs_v; 405 + 406 + f->dma_offset.cb_h = f->offs_h; 407 + f->dma_offset.cb_v = f->offs_v; 408 + 409 + f->dma_offset.cr_h = f->offs_h; 410 + f->dma_offset.cr_v = f->offs_v; 411 + 412 + if (!variant->pix_hoff) { 413 + if (f->fmt->planes_cnt == 3) { 414 + f->dma_offset.cb_h >>= 1; 415 + f->dma_offset.cr_h >>= 1; 416 + } 417 + if (f->fmt->color == S5P_FIMC_YCBCR420) { 418 + f->dma_offset.cb_v >>= 1; 419 + f->dma_offset.cr_v >>= 1; 420 + } 421 + } 422 + 423 + dbg("in_offset: color= %d, y_h= %d, y_v= %d", 424 + f->fmt->color, f->dma_offset.y_h, f->dma_offset.y_v); 425 + } 426 + 396 427 /** 397 428 * fimc_prepare_config - check dimensions, operation and color mode 398 429 * and pre-calculate offset and the scaling coefficients. ··· 437 406 { 438 407 struct fimc_frame *s_frame, *d_frame; 439 408 struct fimc_vid_buffer *buf = NULL; 440 - struct samsung_fimc_variant *variant = ctx->fimc_dev->variant; 441 409 int ret = 0; 442 410 443 411 s_frame = &ctx->s_frame; ··· 449 419 swap(d_frame->width, d_frame->height); 450 420 } 451 421 452 - /* Prepare the output offset ratios for scaler. */ 453 - d_frame->dma_offset.y_h = d_frame->offs_h; 454 - if (!variant->pix_hoff) 455 - d_frame->dma_offset.y_h *= (d_frame->fmt->depth >> 3); 422 + /* Prepare the DMA offset ratios for scaler. */ 423 + fimc_prepare_dma_offset(ctx, &ctx->s_frame); 424 + fimc_prepare_dma_offset(ctx, &ctx->d_frame); 456 425 457 - d_frame->dma_offset.y_v = d_frame->offs_v; 458 - 459 - d_frame->dma_offset.cb_h = d_frame->offs_h; 460 - d_frame->dma_offset.cb_v = d_frame->offs_v; 461 - 462 - d_frame->dma_offset.cr_h = d_frame->offs_h; 463 - d_frame->dma_offset.cr_v = d_frame->offs_v; 464 - 465 - if (!variant->pix_hoff && d_frame->fmt->planes_cnt == 3) { 466 - d_frame->dma_offset.cb_h >>= 1; 467 - d_frame->dma_offset.cb_v >>= 1; 468 - d_frame->dma_offset.cr_h >>= 1; 469 - d_frame->dma_offset.cr_v >>= 1; 470 - } 471 - 472 - dbg("out offset: color= %d, y_h= %d, y_v= %d", 473 - d_frame->fmt->color, 474 - d_frame->dma_offset.y_h, d_frame->dma_offset.y_v); 475 - 476 - /* Prepare the input offset ratios for scaler. */ 477 - s_frame->dma_offset.y_h = s_frame->offs_h; 478 - if (!variant->pix_hoff) 479 - s_frame->dma_offset.y_h *= (s_frame->fmt->depth >> 3); 480 - s_frame->dma_offset.y_v = s_frame->offs_v; 481 - 482 - s_frame->dma_offset.cb_h = s_frame->offs_h; 483 - s_frame->dma_offset.cb_v = s_frame->offs_v; 484 - 485 - s_frame->dma_offset.cr_h = s_frame->offs_h; 486 - s_frame->dma_offset.cr_v = s_frame->offs_v; 487 - 488 - if (!variant->pix_hoff && s_frame->fmt->planes_cnt == 3) { 489 - s_frame->dma_offset.cb_h >>= 1; 490 - s_frame->dma_offset.cb_v >>= 1; 491 - s_frame->dma_offset.cr_h >>= 1; 492 - s_frame->dma_offset.cr_v >>= 1; 493 - } 494 - 495 - dbg("in offset: color= %d, y_h= %d, y_v= %d", 496 - s_frame->fmt->color, s_frame->dma_offset.y_h, 497 - s_frame->dma_offset.y_v); 498 - 499 - fimc_set_yuv_order(ctx); 500 - 501 - /* Check against the scaler ratio. */ 502 426 if (s_frame->height > (SCALER_MAX_VRATIO * d_frame->height) || 503 427 s_frame->width > (SCALER_MAX_HRATIO * d_frame->width)) { 504 428 err("out of scaler range"); 505 429 return -EINVAL; 506 430 } 431 + fimc_set_yuv_order(ctx); 507 432 } 508 433 509 434 /* Input DMA mode is not allowed when the scaler is disabled. */ ··· 807 822 } else { 808 823 v4l2_err(&ctx->fimc_dev->m2m.v4l2_dev, 809 824 "Wrong buffer/video queue type (%d)\n", f->type); 810 - return -EINVAL; 825 + ret = -EINVAL; 826 + goto s_fmt_out; 811 827 } 812 828 813 829 pix = &f->fmt.pix; ··· 1400 1414 } 1401 1415 1402 1416 fimc->work_queue = create_workqueue(dev_name(&fimc->pdev->dev)); 1403 - if (!fimc->work_queue) 1417 + if (!fimc->work_queue) { 1418 + ret = -ENOMEM; 1404 1419 goto err_irq; 1420 + } 1405 1421 1406 1422 ret = fimc_register_m2m_device(fimc); 1407 1423 if (ret) ··· 1480 1492 }; 1481 1493 1482 1494 static struct samsung_fimc_variant fimc01_variant_s5pv210 = { 1495 + .pix_hoff = 1, 1483 1496 .has_inp_rot = 1, 1484 1497 .has_out_rot = 1, 1485 1498 .min_inp_pixsize = 16, ··· 1495 1506 }; 1496 1507 1497 1508 static struct samsung_fimc_variant fimc2_variant_s5pv210 = { 1509 + .pix_hoff = 1, 1498 1510 .min_inp_pixsize = 16, 1499 1511 .min_out_pixsize = 32, 1500 1512
+5 -5
drivers/media/video/saa7134/saa7134-cards.c
··· 4323 4323 }, 4324 4324 [SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM] = { 4325 4325 /* Beholder Intl. Ltd. 2008 */ 4326 - /*Dmitry Belimov <d.belimov@gmail.com> */ 4327 - .name = "Beholder BeholdTV Columbus TVFM", 4326 + /* Dmitry Belimov <d.belimov@gmail.com> */ 4327 + .name = "Beholder BeholdTV Columbus TV/FM", 4328 4328 .audio_clock = 0x00187de7, 4329 4329 .tuner_type = TUNER_ALPS_TSBE5_PAL, 4330 - .radio_type = UNSET, 4331 - .tuner_addr = ADDR_UNSET, 4332 - .radio_addr = ADDR_UNSET, 4330 + .radio_type = TUNER_TEA5767, 4331 + .tuner_addr = 0xc2 >> 1, 4332 + .radio_addr = 0xc0 >> 1, 4333 4333 .tda9887_conf = TDA9887_PRESENT, 4334 4334 .gpiomask = 0x000A8004, 4335 4335 .inputs = {{
+3 -2
drivers/media/video/saa7164/saa7164-buffer.c
··· 136 136 int saa7164_buffer_dealloc(struct saa7164_tsport *port, 137 137 struct saa7164_buffer *buf) 138 138 { 139 - struct saa7164_dev *dev = port->dev; 139 + struct saa7164_dev *dev; 140 140 141 - if ((buf == 0) || (port == 0)) 141 + if (!buf || !port) 142 142 return SAA_ERR_BAD_PARAMETER; 143 + dev = port->dev; 143 144 144 145 dprintk(DBGLVL_BUF, "%s() deallocating buffer @ 0x%p\n", __func__, buf); 145 146
+24
drivers/media/video/uvc/uvc_driver.c
··· 486 486 max(frame->dwFrameInterval[0], 487 487 frame->dwDefaultFrameInterval)); 488 488 489 + if (dev->quirks & UVC_QUIRK_RESTRICT_FRAME_RATE) { 490 + frame->bFrameIntervalType = 1; 491 + frame->dwFrameInterval[0] = 492 + frame->dwDefaultFrameInterval; 493 + } 494 + 489 495 uvc_trace(UVC_TRACE_DESCR, "- %ux%u (%u.%u fps)\n", 490 496 frame->wWidth, frame->wHeight, 491 497 10000000/frame->dwDefaultFrameInterval, ··· 2032 2026 .bInterfaceClass = USB_CLASS_VENDOR_SPEC, 2033 2027 .bInterfaceSubClass = 1, 2034 2028 .bInterfaceProtocol = 0 }, 2029 + /* Chicony CNF7129 (Asus EEE 100HE) */ 2030 + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE 2031 + | USB_DEVICE_ID_MATCH_INT_INFO, 2032 + .idVendor = 0x04f2, 2033 + .idProduct = 0xb071, 2034 + .bInterfaceClass = USB_CLASS_VIDEO, 2035 + .bInterfaceSubClass = 1, 2036 + .bInterfaceProtocol = 0, 2037 + .driver_info = UVC_QUIRK_RESTRICT_FRAME_RATE }, 2035 2038 /* Alcor Micro AU3820 (Future Boy PC USB Webcam) */ 2036 2039 { .match_flags = USB_DEVICE_ID_MATCH_DEVICE 2037 2040 | USB_DEVICE_ID_MATCH_INT_INFO, ··· 2106 2091 .bInterfaceProtocol = 0, 2107 2092 .driver_info = UVC_QUIRK_PROBE_MINMAX 2108 2093 | UVC_QUIRK_PROBE_DEF }, 2094 + /* IMC Networks (Medion Akoya) */ 2095 + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE 2096 + | USB_DEVICE_ID_MATCH_INT_INFO, 2097 + .idVendor = 0x13d3, 2098 + .idProduct = 0x5103, 2099 + .bInterfaceClass = USB_CLASS_VIDEO, 2100 + .bInterfaceSubClass = 1, 2101 + .bInterfaceProtocol = 0, 2102 + .driver_info = UVC_QUIRK_STREAM_NO_FID }, 2109 2103 /* Syntek (HP Spartan) */ 2110 2104 { .match_flags = USB_DEVICE_ID_MATCH_DEVICE 2111 2105 | USB_DEVICE_ID_MATCH_INT_INFO,
+1
drivers/media/video/uvc/uvcvideo.h
··· 182 182 #define UVC_QUIRK_IGNORE_SELECTOR_UNIT 0x00000020 183 183 #define UVC_QUIRK_FIX_BANDWIDTH 0x00000080 184 184 #define UVC_QUIRK_PROBE_DEF 0x00000100 185 + #define UVC_QUIRK_RESTRICT_FRAME_RATE 0x00000200 185 186 186 187 /* Format flags */ 187 188 #define UVC_FMT_FLAG_COMPRESSED 0x00000001
+4 -2
drivers/media/video/videobuf-dma-contig.c
··· 393 393 } 394 394 395 395 /* read() method */ 396 - dma_free_coherent(q->dev, mem->size, mem->vaddr, mem->dma_handle); 397 - mem->vaddr = NULL; 396 + if (mem->vaddr) { 397 + dma_free_coherent(q->dev, mem->size, mem->vaddr, mem->dma_handle); 398 + mem->vaddr = NULL; 399 + } 398 400 } 399 401 EXPORT_SYMBOL_GPL(videobuf_dma_contig_free); 400 402
+7 -4
drivers/media/video/videobuf-dma-sg.c
··· 94 94 * must free the memory. 95 95 */ 96 96 static struct scatterlist *videobuf_pages_to_sg(struct page **pages, 97 - int nr_pages, int offset) 97 + int nr_pages, int offset, size_t size) 98 98 { 99 99 struct scatterlist *sglist; 100 100 int i; ··· 110 110 /* DMA to highmem pages might not work */ 111 111 goto highmem; 112 112 sg_set_page(&sglist[0], pages[0], PAGE_SIZE - offset, offset); 113 + size -= PAGE_SIZE - offset; 113 114 for (i = 1; i < nr_pages; i++) { 114 115 if (NULL == pages[i]) 115 116 goto nopage; 116 117 if (PageHighMem(pages[i])) 117 118 goto highmem; 118 - sg_set_page(&sglist[i], pages[i], PAGE_SIZE, 0); 119 + sg_set_page(&sglist[i], pages[i], min(PAGE_SIZE, size), 0); 120 + size -= min(PAGE_SIZE, size); 119 121 } 120 122 return sglist; 121 123 ··· 172 170 173 171 first = (data & PAGE_MASK) >> PAGE_SHIFT; 174 172 last = ((data+size-1) & PAGE_MASK) >> PAGE_SHIFT; 175 - dma->offset = data & ~PAGE_MASK; 173 + dma->offset = data & ~PAGE_MASK; 174 + dma->size = size; 176 175 dma->nr_pages = last-first+1; 177 176 dma->pages = kmalloc(dma->nr_pages * sizeof(struct page *), GFP_KERNEL); 178 177 if (NULL == dma->pages) ··· 255 252 256 253 if (dma->pages) { 257 254 dma->sglist = videobuf_pages_to_sg(dma->pages, dma->nr_pages, 258 - dma->offset); 255 + dma->offset, dma->size); 259 256 } 260 257 if (dma->vaddr) { 261 258 dma->sglist = videobuf_vmalloc_to_sg(dma->vaddr,
-1
drivers/misc/bh1780gli.c
··· 190 190 191 191 ddata = i2c_get_clientdata(client); 192 192 sysfs_remove_group(&client->dev.kobj, &bh1780_attr_group); 193 - i2c_set_clientdata(client, NULL); 194 193 kfree(ddata); 195 194 196 195 return 0;
-1
drivers/regulator/ad5398.c
··· 256 256 257 257 regulator_unregister(chip->rdev); 258 258 kfree(chip); 259 - i2c_set_clientdata(client, NULL); 260 259 261 260 return 0; 262 261 }
-2
drivers/regulator/isl6271a-regulator.c
··· 191 191 struct isl_pmic *pmic = i2c_get_clientdata(i2c); 192 192 int i; 193 193 194 - i2c_set_clientdata(i2c, NULL); 195 - 196 194 for (i = 0; i < 3; i++) 197 195 regulator_unregister(pmic->rdev[i]); 198 196
-2
drivers/rtc/rtc-ds3232.c
··· 268 268 free_irq(client->irq, client); 269 269 270 270 out_free: 271 - i2c_set_clientdata(client, NULL); 272 271 kfree(ds3232); 273 272 return ret; 274 273 } ··· 286 287 } 287 288 288 289 rtc_device_unregister(ds3232->rtc); 289 - i2c_set_clientdata(client, NULL); 290 290 kfree(ds3232); 291 291 return 0; 292 292 }
+1 -1
drivers/staging/tm6000/Kconfig
··· 1 1 config VIDEO_TM6000 2 2 tristate "TV Master TM5600/6000/6010 driver" 3 - depends on VIDEO_DEV && I2C && INPUT && USB && EXPERIMENTAL 3 + depends on VIDEO_DEV && I2C && INPUT && IR_CORE && USB && EXPERIMENTAL 4 4 select VIDEO_TUNER 5 5 select MEDIA_TUNER_XC2028 6 6 select MEDIA_TUNER_XC5000
+39 -22
drivers/staging/tm6000/tm6000-input.c
··· 46 46 } 47 47 48 48 struct tm6000_ir_poll_result { 49 - u8 rc_data[4]; 49 + u16 rc_data; 50 50 }; 51 51 52 52 struct tm6000_IR { ··· 60 60 int polling; 61 61 struct delayed_work work; 62 62 u8 wait:1; 63 + u8 key:1; 63 64 struct urb *int_urb; 64 65 u8 *urb_data; 65 - u8 key:1; 66 66 67 67 int (*get_key) (struct tm6000_IR *, struct tm6000_ir_poll_result *); 68 68 ··· 122 122 123 123 if (urb->status != 0) 124 124 printk(KERN_INFO "not ready\n"); 125 - else if (urb->actual_length > 0) 125 + else if (urb->actual_length > 0) { 126 126 memcpy(ir->urb_data, urb->transfer_buffer, urb->actual_length); 127 127 128 - dprintk("data %02x %02x %02x %02x\n", ir->urb_data[0], 129 - ir->urb_data[1], ir->urb_data[2], ir->urb_data[3]); 128 + dprintk("data %02x %02x %02x %02x\n", ir->urb_data[0], 129 + ir->urb_data[1], ir->urb_data[2], ir->urb_data[3]); 130 130 131 - ir->key = 1; 131 + ir->key = 1; 132 + } 132 133 133 134 rc = usb_submit_urb(urb, GFP_ATOMIC); 134 135 } ··· 141 140 int rc; 142 141 u8 buf[2]; 143 142 144 - if (ir->wait && !&dev->int_in) { 145 - poll_result->rc_data[0] = 0xff; 143 + if (ir->wait && !&dev->int_in) 146 144 return 0; 147 - } 148 145 149 146 if (&dev->int_in) { 150 - poll_result->rc_data[0] = ir->urb_data[0]; 151 - poll_result->rc_data[1] = ir->urb_data[1]; 147 + if (ir->ir.ir_type == IR_TYPE_RC5) 148 + poll_result->rc_data = ir->urb_data[0]; 149 + else 150 + poll_result->rc_data = ir->urb_data[0] | ir->urb_data[1] << 8; 152 151 } else { 153 152 tm6000_set_reg(dev, REQ_04_EN_DISABLE_MCU_INT, 2, 0); 154 153 msleep(10); 155 154 tm6000_set_reg(dev, REQ_04_EN_DISABLE_MCU_INT, 2, 1); 156 155 msleep(10); 157 156 158 - rc = tm6000_read_write_usb(dev, USB_DIR_IN | USB_TYPE_VENDOR | 159 - USB_RECIP_DEVICE, REQ_02_GET_IR_CODE, 0, 0, buf, 1); 157 + if (ir->ir.ir_type == IR_TYPE_RC5) { 158 + rc = tm6000_read_write_usb(dev, USB_DIR_IN | 159 + USB_TYPE_VENDOR | USB_RECIP_DEVICE, 160 + REQ_02_GET_IR_CODE, 0, 0, buf, 1); 160 161 161 - msleep(10); 162 + msleep(10); 162 163 163 - dprintk("read data=%02x\n", buf[0]); 164 - if (rc < 0) 165 - return rc; 164 + dprintk("read data=%02x\n", buf[0]); 165 + if (rc < 0) 166 + return rc; 166 167 167 - poll_result->rc_data[0] = buf[0]; 168 + poll_result->rc_data = buf[0]; 169 + } else { 170 + rc = tm6000_read_write_usb(dev, USB_DIR_IN | 171 + USB_TYPE_VENDOR | USB_RECIP_DEVICE, 172 + REQ_02_GET_IR_CODE, 0, 0, buf, 2); 173 + 174 + msleep(10); 175 + 176 + dprintk("read data=%04x\n", buf[0] | buf[1] << 8); 177 + if (rc < 0) 178 + return rc; 179 + 180 + poll_result->rc_data = buf[0] | buf[1] << 8; 181 + } 182 + if ((poll_result->rc_data & 0x00ff) != 0xff) 183 + ir->key = 1; 168 184 } 169 185 return 0; 170 186 } ··· 198 180 return; 199 181 } 200 182 201 - dprintk("ir->get_key result data=%02x %02x\n", 202 - poll_result.rc_data[0], poll_result.rc_data[1]); 183 + dprintk("ir->get_key result data=%04x\n", poll_result.rc_data); 203 184 204 - if (poll_result.rc_data[0] != 0xff && ir->key == 1) { 185 + if (ir->key) { 205 186 ir_input_keydown(ir->input->input_dev, &ir->ir, 206 - poll_result.rc_data[0] | poll_result.rc_data[1] << 8); 187 + (u32)poll_result.rc_data); 207 188 208 189 ir_input_nokey(ir->input->input_dev, &ir->ir); 209 190 ir->key = 0;
+14 -5
fs/xfs/linux-2.6/xfs_sync.c
··· 668 668 xfs_perag_put(pag); 669 669 } 670 670 671 - void 672 - __xfs_inode_clear_reclaim_tag( 673 - xfs_mount_t *mp, 671 + STATIC void 672 + __xfs_inode_clear_reclaim( 674 673 xfs_perag_t *pag, 675 674 xfs_inode_t *ip) 676 675 { 677 - radix_tree_tag_clear(&pag->pag_ici_root, 678 - XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); 679 676 pag->pag_ici_reclaimable--; 680 677 if (!pag->pag_ici_reclaimable) { 681 678 /* clear the reclaim tag from the perag radix tree */ ··· 684 687 trace_xfs_perag_clear_reclaim(ip->i_mount, pag->pag_agno, 685 688 -1, _RET_IP_); 686 689 } 690 + } 691 + 692 + void 693 + __xfs_inode_clear_reclaim_tag( 694 + xfs_mount_t *mp, 695 + xfs_perag_t *pag, 696 + xfs_inode_t *ip) 697 + { 698 + radix_tree_tag_clear(&pag->pag_ici_root, 699 + XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); 700 + __xfs_inode_clear_reclaim(pag, ip); 687 701 } 688 702 689 703 /* ··· 846 838 if (!radix_tree_delete(&pag->pag_ici_root, 847 839 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino))) 848 840 ASSERT(0); 841 + __xfs_inode_clear_reclaim(pag, ip); 849 842 write_unlock(&pag->pag_ici_lock); 850 843 851 844 /*
+3 -1
include/drm/ttm/ttm_bo_api.h
··· 246 246 247 247 atomic_t reserved; 248 248 249 - 250 249 /** 251 250 * Members protected by the bo::lock 251 + * In addition, setting sync_obj to anything else 252 + * than NULL requires bo::reserved to be held. This allows for 253 + * checking NULL while reserved but not holding bo::lock. 252 254 */ 253 255 254 256 void *sync_obj_arg;
+1
include/linux/elevator.h
··· 93 93 struct elevator_type *elevator_type; 94 94 struct mutex sysfs_lock; 95 95 struct hlist_head *hash; 96 + unsigned int registered:1; 96 97 }; 97 98 98 99 /*
+1
include/media/videobuf-dma-sg.h
··· 48 48 49 49 /* for userland buffer */ 50 50 int offset; 51 + size_t size; 51 52 struct page **pages; 52 53 53 54 /* for kernel buffers */
+8
kernel/signal.c
··· 2215 2215 #ifdef __ARCH_SI_TRAPNO 2216 2216 err |= __put_user(from->si_trapno, &to->si_trapno); 2217 2217 #endif 2218 + #ifdef BUS_MCEERR_AO 2219 + /* 2220 + * Other callers might not initialize the si_lsb field, 2221 + * so check explicitely for the right codes here. 2222 + */ 2223 + if (from->si_code == BUS_MCEERR_AR || from->si_code == BUS_MCEERR_AO) 2224 + err |= __put_user(from->si_addr_lsb, &to->si_addr_lsb); 2225 + #endif 2218 2226 break; 2219 2227 case __SI_CHLD: 2220 2228 err |= __put_user(from->si_pid, &to->si_pid);
+1 -1
kernel/sysctl.c
··· 2485 2485 kbuf[left] = 0; 2486 2486 } 2487 2487 2488 - for (; left && vleft--; i++, min++, max++, first=0) { 2488 + for (; left && vleft--; i++, first = 0) { 2489 2489 unsigned long val; 2490 2490 2491 2491 if (write) {
+7 -3
mm/memcontrol.c
··· 3587 3587 3588 3588 static void mem_cgroup_threshold(struct mem_cgroup *memcg) 3589 3589 { 3590 - __mem_cgroup_threshold(memcg, false); 3591 - if (do_swap_account) 3592 - __mem_cgroup_threshold(memcg, true); 3590 + while (memcg) { 3591 + __mem_cgroup_threshold(memcg, false); 3592 + if (do_swap_account) 3593 + __mem_cgroup_threshold(memcg, true); 3594 + 3595 + memcg = parent_mem_cgroup(memcg); 3596 + } 3593 3597 } 3594 3598 3595 3599 static int compare_thresholds(const void *a, const void *b)
+6 -6
mm/memory-failure.c
··· 183 183 * signal. 184 184 */ 185 185 static int kill_proc_ao(struct task_struct *t, unsigned long addr, int trapno, 186 - unsigned long pfn) 186 + unsigned long pfn, struct page *page) 187 187 { 188 188 struct siginfo si; 189 189 int ret; ··· 198 198 #ifdef __ARCH_SI_TRAPNO 199 199 si.si_trapno = trapno; 200 200 #endif 201 - si.si_addr_lsb = PAGE_SHIFT; 201 + si.si_addr_lsb = compound_order(compound_head(page)) + PAGE_SHIFT; 202 202 /* 203 203 * Don't use force here, it's convenient if the signal 204 204 * can be temporarily blocked. ··· 235 235 int nr; 236 236 do { 237 237 nr = shrink_slab(1000, GFP_KERNEL, 1000); 238 - if (page_count(p) == 0) 238 + if (page_count(p) == 1) 239 239 break; 240 240 } while (nr > 10); 241 241 } ··· 327 327 * wrong earlier. 328 328 */ 329 329 static void kill_procs_ao(struct list_head *to_kill, int doit, int trapno, 330 - int fail, unsigned long pfn) 330 + int fail, struct page *page, unsigned long pfn) 331 331 { 332 332 struct to_kill *tk, *next; 333 333 ··· 352 352 * process anyways. 353 353 */ 354 354 else if (kill_proc_ao(tk->tsk, tk->addr, trapno, 355 - pfn) < 0) 355 + pfn, page) < 0) 356 356 printk(KERN_ERR 357 357 "MCE %#lx: Cannot send advisory machine check signal to %s:%d\n", 358 358 pfn, tk->tsk->comm, tk->tsk->pid); ··· 928 928 * any accesses to the poisoned memory. 929 929 */ 930 930 kill_procs_ao(&tokill, !!PageDirty(hpage), trapno, 931 - ret != SWAP_SUCCESS, pfn); 931 + ret != SWAP_SUCCESS, p, pfn); 932 932 933 933 return ret; 934 934 }
+2 -2
mm/page_alloc.c
··· 5198 5198 if (!table) 5199 5199 panic("Failed to allocate %s hash table\n", tablename); 5200 5200 5201 - printk(KERN_INFO "%s hash table entries: %d (order: %d, %lu bytes)\n", 5201 + printk(KERN_INFO "%s hash table entries: %ld (order: %d, %lu bytes)\n", 5202 5202 tablename, 5203 - (1U << log2qty), 5203 + (1UL << log2qty), 5204 5204 ilog2(size) - PAGE_SHIFT, 5205 5205 size); 5206 5206