Loading MAINTAINERS +1 −2 Original line number Diff line number Diff line Loading @@ -2239,8 +2239,7 @@ S: Maintained F: drivers/media/video/gspca/pac207.c GSPCA SN9C20X SUBDRIVER P: Brian Johnson M: brijohn@gmail.com M: Brian Johnson <brijohn@gmail.com> L: linux-media@vger.kernel.org T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained Loading drivers/acpi/scan.c +2 −10 Original line number Diff line number Diff line Loading @@ -1263,16 +1263,6 @@ acpi_add_single_object(struct acpi_device **child, */ acpi_device_set_id(device, parent, handle, type); /* * The ACPI device is attached to acpi handle before getting * the power/wakeup/peformance flags. Otherwise OS can't get * the corresponding ACPI device by the acpi handle in the course * of getting the power/wakeup/performance flags. */ result = acpi_device_set_context(device, type); if (result) goto end; /* * Power Management * ---------------- Loading Loading @@ -1303,6 +1293,8 @@ acpi_add_single_object(struct acpi_device **child, goto end; } if ((result = acpi_device_set_context(device, type))) goto end; result = acpi_device_register(device, parent); Loading drivers/ata/ata_piix.c +13 −1 Original line number Diff line number Diff line Loading @@ -664,6 +664,8 @@ static int piix_pata_prereset(struct ata_link *link, unsigned long deadline) return ata_sff_prereset(link, deadline); } static DEFINE_SPINLOCK(piix_lock); /** * piix_set_piomode - Initialize host controller PATA PIO timings * @ap: Port whose timings we are configuring Loading @@ -677,8 +679,9 @@ static int piix_pata_prereset(struct ata_link *link, unsigned long deadline) static void piix_set_piomode(struct ata_port *ap, struct ata_device *adev) { unsigned int pio = adev->pio_mode - XFER_PIO_0; struct pci_dev *dev = to_pci_dev(ap->host->dev); unsigned long flags; unsigned int pio = adev->pio_mode - XFER_PIO_0; unsigned int is_slave = (adev->devno != 0); unsigned int master_port= ap->port_no ? 0x42 : 0x40; unsigned int slave_port = 0x44; Loading Loading @@ -708,6 +711,8 @@ static void piix_set_piomode(struct ata_port *ap, struct ata_device *adev) if (adev->class == ATA_DEV_ATA) control |= 4; /* PPE enable */ spin_lock_irqsave(&piix_lock, flags); /* PIO configuration clears DTE unconditionally. It will be * programmed in set_dmamode which is guaranteed to be called * after set_piomode if any DMA mode is available. Loading Loading @@ -747,6 +752,8 @@ static void piix_set_piomode(struct ata_port *ap, struct ata_device *adev) udma_enable &= ~(1 << (2 * ap->port_no + adev->devno)); pci_write_config_byte(dev, 0x48, udma_enable); } spin_unlock_irqrestore(&piix_lock, flags); } /** Loading @@ -764,6 +771,7 @@ static void piix_set_piomode(struct ata_port *ap, struct ata_device *adev) static void do_pata_set_dmamode(struct ata_port *ap, struct ata_device *adev, int isich) { struct pci_dev *dev = to_pci_dev(ap->host->dev); unsigned long flags; u8 master_port = ap->port_no ? 0x42 : 0x40; u16 master_data; u8 speed = adev->dma_mode; Loading @@ -777,6 +785,8 @@ static void do_pata_set_dmamode(struct ata_port *ap, struct ata_device *adev, in { 2, 1 }, { 2, 3 }, }; spin_lock_irqsave(&piix_lock, flags); pci_read_config_word(dev, master_port, &master_data); if (ap->udma_mask) pci_read_config_byte(dev, 0x48, &udma_enable); Loading Loading @@ -867,6 +877,8 @@ static void do_pata_set_dmamode(struct ata_port *ap, struct ata_device *adev, in /* Don't scribble on 0x48 if the controller does not support UDMA */ if (ap->udma_mask) pci_write_config_byte(dev, 0x48, udma_enable); spin_unlock_irqrestore(&piix_lock, flags); } /** Loading drivers/gpu/drm/i915/i915_drv.h +7 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,7 @@ typedef struct drm_i915_private { unsigned int edp_support:1; int lvds_ssc_freq; int crt_ddc_bus; /* -1 = unknown, else GPIO to use for CRT DDC */ struct drm_i915_fence_reg fence_regs[16]; /* assume 965 */ int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */ int num_fence_regs; /* 8 on pre-965, 16 otherwise */ Loading Loading @@ -384,6 +385,9 @@ typedef struct drm_i915_private { */ struct list_head inactive_list; /** LRU list of objects with fence regs on them. */ struct list_head fence_list; /** * List of breadcrumbs associated with GPU requests currently * outstanding. Loading Loading @@ -451,6 +455,9 @@ struct drm_i915_gem_object { /** This object's place on the active/flushing/inactive lists */ struct list_head list; /** This object's place on the fenced object LRU */ struct list_head fence_list; /** * This is set if the object is on the active or flushing lists * (has pending rendering), and is not set if it's on inactive (ready Loading drivers/gpu/drm/i915/i915_gem.c +48 −38 Original line number Diff line number Diff line Loading @@ -978,6 +978,7 @@ int i915_gem_set_domain_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv) { struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_gem_set_domain *args = data; struct drm_gem_object *obj; uint32_t read_domains = args->read_domains; Loading Loading @@ -1010,8 +1011,18 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data, obj, obj->size, read_domains, write_domain); #endif if (read_domains & I915_GEM_DOMAIN_GTT) { struct drm_i915_gem_object *obj_priv = obj->driver_private; ret = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0); /* Update the LRU on the fence for the CPU access that's * about to occur. */ if (obj_priv->fence_reg != I915_FENCE_REG_NONE) { list_move_tail(&obj_priv->fence_list, &dev_priv->mm.fence_list); } /* Silently promote "you're not bound, there was nothing to do" * to success, since the client was just asking us to * make sure everything was done. Loading Loading @@ -1155,8 +1166,7 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf) } /* Need a new fence register? */ if (obj_priv->fence_reg == I915_FENCE_REG_NONE && obj_priv->tiling_mode != I915_TILING_NONE) { if (obj_priv->tiling_mode != I915_TILING_NONE) { ret = i915_gem_object_get_fence_reg(obj); if (ret) { mutex_unlock(&dev->struct_mutex); Loading Loading @@ -2208,6 +2218,12 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj) struct drm_i915_gem_object *old_obj_priv = NULL; int i, ret, avail; /* Just update our place in the LRU if our fence is getting used. */ if (obj_priv->fence_reg != I915_FENCE_REG_NONE) { list_move_tail(&obj_priv->fence_list, &dev_priv->mm.fence_list); return 0; } switch (obj_priv->tiling_mode) { case I915_TILING_NONE: WARN(1, "allocating a fence for non-tiled object?\n"); Loading @@ -2229,7 +2245,6 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj) } /* First try to find a free reg */ try_again: avail = 0; for (i = dev_priv->fence_reg_start; i < dev_priv->num_fence_regs; i++) { reg = &dev_priv->fence_regs[i]; Loading @@ -2243,52 +2258,41 @@ try_again: /* None available, try to steal one or wait for a user to finish */ if (i == dev_priv->num_fence_regs) { uint32_t seqno = dev_priv->mm.next_gem_seqno; struct drm_gem_object *old_obj = NULL; if (avail == 0) return -ENOSPC; for (i = dev_priv->fence_reg_start; i < dev_priv->num_fence_regs; i++) { uint32_t this_seqno; list_for_each_entry(old_obj_priv, &dev_priv->mm.fence_list, fence_list) { old_obj = old_obj_priv->obj; reg = &dev_priv->fence_regs[i]; old_obj_priv = reg->obj->driver_private; reg = &dev_priv->fence_regs[old_obj_priv->fence_reg]; if (old_obj_priv->pin_count) continue; /* Take a reference, as otherwise the wait_rendering * below may cause the object to get freed out from * under us. */ drm_gem_object_reference(old_obj); /* i915 uses fences for GPU access to tiled buffers */ if (IS_I965G(dev) || !old_obj_priv->active) break; /* find the seqno of the first available fence */ this_seqno = old_obj_priv->last_rendering_seqno; if (this_seqno != 0 && reg->obj->write_domain == 0 && i915_seqno_passed(seqno, this_seqno)) seqno = this_seqno; } /* * Now things get ugly... we have to wait for one of the * objects to finish before trying again. /* This brings the object to the head of the LRU if it * had been written to. The only way this should * result in us waiting longer than the expected * optimal amount of time is if there was a * fence-using buffer later that was read-only. */ if (i == dev_priv->num_fence_regs) { if (seqno == dev_priv->mm.next_gem_seqno) { i915_gem_flush(dev, I915_GEM_GPU_DOMAINS, I915_GEM_GPU_DOMAINS); seqno = i915_add_request(dev, NULL, I915_GEM_GPU_DOMAINS); if (seqno == 0) return -ENOMEM; } ret = i915_wait_request(dev, seqno); if (ret) i915_gem_object_flush_gpu_write_domain(old_obj); ret = i915_gem_object_wait_rendering(old_obj); if (ret != 0) return ret; goto try_again; break; } /* Loading @@ -2296,10 +2300,15 @@ try_again: * for this object next time we need it. */ i915_gem_release_mmap(reg->obj); i = old_obj_priv->fence_reg; old_obj_priv->fence_reg = I915_FENCE_REG_NONE; list_del_init(&old_obj_priv->fence_list); drm_gem_object_unreference(old_obj); } obj_priv->fence_reg = i; list_add_tail(&obj_priv->fence_list, &dev_priv->mm.fence_list); reg->obj = obj; if (IS_I965G(dev)) Loading Loading @@ -2342,6 +2351,7 @@ i915_gem_clear_fence_reg(struct drm_gem_object *obj) dev_priv->fence_regs[obj_priv->fence_reg].obj = NULL; obj_priv->fence_reg = I915_FENCE_REG_NONE; list_del_init(&obj_priv->fence_list); } /** Loading Loading @@ -3595,9 +3605,7 @@ i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment) * Pre-965 chips need a fence register set up in order to * properly handle tiled surfaces. */ if (!IS_I965G(dev) && obj_priv->fence_reg == I915_FENCE_REG_NONE && obj_priv->tiling_mode != I915_TILING_NONE) { if (!IS_I965G(dev) && obj_priv->tiling_mode != I915_TILING_NONE) { ret = i915_gem_object_get_fence_reg(obj); if (ret != 0) { if (ret != -EBUSY && ret != -ERESTARTSYS) Loading Loading @@ -3806,6 +3814,7 @@ int i915_gem_init_object(struct drm_gem_object *obj) obj_priv->obj = obj; obj_priv->fence_reg = I915_FENCE_REG_NONE; INIT_LIST_HEAD(&obj_priv->list); INIT_LIST_HEAD(&obj_priv->fence_list); return 0; } Loading Loading @@ -4253,6 +4262,7 @@ i915_gem_load(struct drm_device *dev) INIT_LIST_HEAD(&dev_priv->mm.flushing_list); INIT_LIST_HEAD(&dev_priv->mm.inactive_list); INIT_LIST_HEAD(&dev_priv->mm.request_list); INIT_LIST_HEAD(&dev_priv->mm.fence_list); INIT_DELAYED_WORK(&dev_priv->mm.retire_work, i915_gem_retire_work_handler); dev_priv->mm.next_gem_seqno = 1; Loading Loading
MAINTAINERS +1 −2 Original line number Diff line number Diff line Loading @@ -2239,8 +2239,7 @@ S: Maintained F: drivers/media/video/gspca/pac207.c GSPCA SN9C20X SUBDRIVER P: Brian Johnson M: brijohn@gmail.com M: Brian Johnson <brijohn@gmail.com> L: linux-media@vger.kernel.org T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained Loading
drivers/acpi/scan.c +2 −10 Original line number Diff line number Diff line Loading @@ -1263,16 +1263,6 @@ acpi_add_single_object(struct acpi_device **child, */ acpi_device_set_id(device, parent, handle, type); /* * The ACPI device is attached to acpi handle before getting * the power/wakeup/peformance flags. Otherwise OS can't get * the corresponding ACPI device by the acpi handle in the course * of getting the power/wakeup/performance flags. */ result = acpi_device_set_context(device, type); if (result) goto end; /* * Power Management * ---------------- Loading Loading @@ -1303,6 +1293,8 @@ acpi_add_single_object(struct acpi_device **child, goto end; } if ((result = acpi_device_set_context(device, type))) goto end; result = acpi_device_register(device, parent); Loading
drivers/ata/ata_piix.c +13 −1 Original line number Diff line number Diff line Loading @@ -664,6 +664,8 @@ static int piix_pata_prereset(struct ata_link *link, unsigned long deadline) return ata_sff_prereset(link, deadline); } static DEFINE_SPINLOCK(piix_lock); /** * piix_set_piomode - Initialize host controller PATA PIO timings * @ap: Port whose timings we are configuring Loading @@ -677,8 +679,9 @@ static int piix_pata_prereset(struct ata_link *link, unsigned long deadline) static void piix_set_piomode(struct ata_port *ap, struct ata_device *adev) { unsigned int pio = adev->pio_mode - XFER_PIO_0; struct pci_dev *dev = to_pci_dev(ap->host->dev); unsigned long flags; unsigned int pio = adev->pio_mode - XFER_PIO_0; unsigned int is_slave = (adev->devno != 0); unsigned int master_port= ap->port_no ? 0x42 : 0x40; unsigned int slave_port = 0x44; Loading Loading @@ -708,6 +711,8 @@ static void piix_set_piomode(struct ata_port *ap, struct ata_device *adev) if (adev->class == ATA_DEV_ATA) control |= 4; /* PPE enable */ spin_lock_irqsave(&piix_lock, flags); /* PIO configuration clears DTE unconditionally. It will be * programmed in set_dmamode which is guaranteed to be called * after set_piomode if any DMA mode is available. Loading Loading @@ -747,6 +752,8 @@ static void piix_set_piomode(struct ata_port *ap, struct ata_device *adev) udma_enable &= ~(1 << (2 * ap->port_no + adev->devno)); pci_write_config_byte(dev, 0x48, udma_enable); } spin_unlock_irqrestore(&piix_lock, flags); } /** Loading @@ -764,6 +771,7 @@ static void piix_set_piomode(struct ata_port *ap, struct ata_device *adev) static void do_pata_set_dmamode(struct ata_port *ap, struct ata_device *adev, int isich) { struct pci_dev *dev = to_pci_dev(ap->host->dev); unsigned long flags; u8 master_port = ap->port_no ? 0x42 : 0x40; u16 master_data; u8 speed = adev->dma_mode; Loading @@ -777,6 +785,8 @@ static void do_pata_set_dmamode(struct ata_port *ap, struct ata_device *adev, in { 2, 1 }, { 2, 3 }, }; spin_lock_irqsave(&piix_lock, flags); pci_read_config_word(dev, master_port, &master_data); if (ap->udma_mask) pci_read_config_byte(dev, 0x48, &udma_enable); Loading Loading @@ -867,6 +877,8 @@ static void do_pata_set_dmamode(struct ata_port *ap, struct ata_device *adev, in /* Don't scribble on 0x48 if the controller does not support UDMA */ if (ap->udma_mask) pci_write_config_byte(dev, 0x48, udma_enable); spin_unlock_irqrestore(&piix_lock, flags); } /** Loading
drivers/gpu/drm/i915/i915_drv.h +7 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,7 @@ typedef struct drm_i915_private { unsigned int edp_support:1; int lvds_ssc_freq; int crt_ddc_bus; /* -1 = unknown, else GPIO to use for CRT DDC */ struct drm_i915_fence_reg fence_regs[16]; /* assume 965 */ int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */ int num_fence_regs; /* 8 on pre-965, 16 otherwise */ Loading Loading @@ -384,6 +385,9 @@ typedef struct drm_i915_private { */ struct list_head inactive_list; /** LRU list of objects with fence regs on them. */ struct list_head fence_list; /** * List of breadcrumbs associated with GPU requests currently * outstanding. Loading Loading @@ -451,6 +455,9 @@ struct drm_i915_gem_object { /** This object's place on the active/flushing/inactive lists */ struct list_head list; /** This object's place on the fenced object LRU */ struct list_head fence_list; /** * This is set if the object is on the active or flushing lists * (has pending rendering), and is not set if it's on inactive (ready Loading
drivers/gpu/drm/i915/i915_gem.c +48 −38 Original line number Diff line number Diff line Loading @@ -978,6 +978,7 @@ int i915_gem_set_domain_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv) { struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_gem_set_domain *args = data; struct drm_gem_object *obj; uint32_t read_domains = args->read_domains; Loading Loading @@ -1010,8 +1011,18 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data, obj, obj->size, read_domains, write_domain); #endif if (read_domains & I915_GEM_DOMAIN_GTT) { struct drm_i915_gem_object *obj_priv = obj->driver_private; ret = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0); /* Update the LRU on the fence for the CPU access that's * about to occur. */ if (obj_priv->fence_reg != I915_FENCE_REG_NONE) { list_move_tail(&obj_priv->fence_list, &dev_priv->mm.fence_list); } /* Silently promote "you're not bound, there was nothing to do" * to success, since the client was just asking us to * make sure everything was done. Loading Loading @@ -1155,8 +1166,7 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf) } /* Need a new fence register? */ if (obj_priv->fence_reg == I915_FENCE_REG_NONE && obj_priv->tiling_mode != I915_TILING_NONE) { if (obj_priv->tiling_mode != I915_TILING_NONE) { ret = i915_gem_object_get_fence_reg(obj); if (ret) { mutex_unlock(&dev->struct_mutex); Loading Loading @@ -2208,6 +2218,12 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj) struct drm_i915_gem_object *old_obj_priv = NULL; int i, ret, avail; /* Just update our place in the LRU if our fence is getting used. */ if (obj_priv->fence_reg != I915_FENCE_REG_NONE) { list_move_tail(&obj_priv->fence_list, &dev_priv->mm.fence_list); return 0; } switch (obj_priv->tiling_mode) { case I915_TILING_NONE: WARN(1, "allocating a fence for non-tiled object?\n"); Loading @@ -2229,7 +2245,6 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj) } /* First try to find a free reg */ try_again: avail = 0; for (i = dev_priv->fence_reg_start; i < dev_priv->num_fence_regs; i++) { reg = &dev_priv->fence_regs[i]; Loading @@ -2243,52 +2258,41 @@ try_again: /* None available, try to steal one or wait for a user to finish */ if (i == dev_priv->num_fence_regs) { uint32_t seqno = dev_priv->mm.next_gem_seqno; struct drm_gem_object *old_obj = NULL; if (avail == 0) return -ENOSPC; for (i = dev_priv->fence_reg_start; i < dev_priv->num_fence_regs; i++) { uint32_t this_seqno; list_for_each_entry(old_obj_priv, &dev_priv->mm.fence_list, fence_list) { old_obj = old_obj_priv->obj; reg = &dev_priv->fence_regs[i]; old_obj_priv = reg->obj->driver_private; reg = &dev_priv->fence_regs[old_obj_priv->fence_reg]; if (old_obj_priv->pin_count) continue; /* Take a reference, as otherwise the wait_rendering * below may cause the object to get freed out from * under us. */ drm_gem_object_reference(old_obj); /* i915 uses fences for GPU access to tiled buffers */ if (IS_I965G(dev) || !old_obj_priv->active) break; /* find the seqno of the first available fence */ this_seqno = old_obj_priv->last_rendering_seqno; if (this_seqno != 0 && reg->obj->write_domain == 0 && i915_seqno_passed(seqno, this_seqno)) seqno = this_seqno; } /* * Now things get ugly... we have to wait for one of the * objects to finish before trying again. /* This brings the object to the head of the LRU if it * had been written to. The only way this should * result in us waiting longer than the expected * optimal amount of time is if there was a * fence-using buffer later that was read-only. */ if (i == dev_priv->num_fence_regs) { if (seqno == dev_priv->mm.next_gem_seqno) { i915_gem_flush(dev, I915_GEM_GPU_DOMAINS, I915_GEM_GPU_DOMAINS); seqno = i915_add_request(dev, NULL, I915_GEM_GPU_DOMAINS); if (seqno == 0) return -ENOMEM; } ret = i915_wait_request(dev, seqno); if (ret) i915_gem_object_flush_gpu_write_domain(old_obj); ret = i915_gem_object_wait_rendering(old_obj); if (ret != 0) return ret; goto try_again; break; } /* Loading @@ -2296,10 +2300,15 @@ try_again: * for this object next time we need it. */ i915_gem_release_mmap(reg->obj); i = old_obj_priv->fence_reg; old_obj_priv->fence_reg = I915_FENCE_REG_NONE; list_del_init(&old_obj_priv->fence_list); drm_gem_object_unreference(old_obj); } obj_priv->fence_reg = i; list_add_tail(&obj_priv->fence_list, &dev_priv->mm.fence_list); reg->obj = obj; if (IS_I965G(dev)) Loading Loading @@ -2342,6 +2351,7 @@ i915_gem_clear_fence_reg(struct drm_gem_object *obj) dev_priv->fence_regs[obj_priv->fence_reg].obj = NULL; obj_priv->fence_reg = I915_FENCE_REG_NONE; list_del_init(&obj_priv->fence_list); } /** Loading Loading @@ -3595,9 +3605,7 @@ i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment) * Pre-965 chips need a fence register set up in order to * properly handle tiled surfaces. */ if (!IS_I965G(dev) && obj_priv->fence_reg == I915_FENCE_REG_NONE && obj_priv->tiling_mode != I915_TILING_NONE) { if (!IS_I965G(dev) && obj_priv->tiling_mode != I915_TILING_NONE) { ret = i915_gem_object_get_fence_reg(obj); if (ret != 0) { if (ret != -EBUSY && ret != -ERESTARTSYS) Loading Loading @@ -3806,6 +3814,7 @@ int i915_gem_init_object(struct drm_gem_object *obj) obj_priv->obj = obj; obj_priv->fence_reg = I915_FENCE_REG_NONE; INIT_LIST_HEAD(&obj_priv->list); INIT_LIST_HEAD(&obj_priv->fence_list); return 0; } Loading Loading @@ -4253,6 +4262,7 @@ i915_gem_load(struct drm_device *dev) INIT_LIST_HEAD(&dev_priv->mm.flushing_list); INIT_LIST_HEAD(&dev_priv->mm.inactive_list); INIT_LIST_HEAD(&dev_priv->mm.request_list); INIT_LIST_HEAD(&dev_priv->mm.fence_list); INIT_DELAYED_WORK(&dev_priv->mm.retire_work, i915_gem_retire_work_handler); dev_priv->mm.next_gem_seqno = 1; Loading