Linux 3.4.10
I'm announcing the release of the 3.4.10 kernel.
All users of the 3.4 kernel series must upgrade.
Note, there is a reported problem with the Intel graphics driver in this release that might affect you, or not, please test.
The updated 3.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.4.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/s390/kernel/compat_linux.c | 2 arch/s390/kernel/compat_wrapper.S | 4 arch/x86/xen/p2m.c | 36 +++ drivers/dma/imx-dma.c | 36 ++- drivers/gpu/drm/i915/intel_display.c | 11 - drivers/gpu/drm/i915/intel_dp.c | 18 - drivers/gpu/drm/i915/intel_ringbuffer.c | 7 drivers/gpu/drm/nouveau/nvd0_display.c | 2 drivers/gpu/drm/radeon/atombios_crtc.c | 14 + drivers/gpu/drm/radeon/evergreen.c | 71 +------ drivers/gpu/drm/radeon/ni.c | 14 + drivers/gpu/drm/radeon/radeon_asic.h | 8 drivers/gpu/drm/radeon/radeon_legacy_crtc.c | 4 drivers/gpu/drm/radeon/radeon_mode.h | 1 drivers/gpu/drm/radeon/rv515.c | 13 - drivers/infiniband/ulp/srp/ib_srp.c | 87 ++++++-- drivers/net/wireless/rt2x00/rt2800usb.c | 1 drivers/tty/serial/pmac_zilog.c | 12 - drivers/usb/gadget/u_ether.c | 6 drivers/usb/host/pci-quirks.c | 7 drivers/usb/host/pci-quirks.h | 1 drivers/usb/host/xhci-pci.c | 10 drivers/usb/host/xhci-ring.c | 36 ++- drivers/usb/host/xhci.c | 8 drivers/usb/host/xhci.h | 1 drivers/usb/serial/ftdi_sio.c | 1 drivers/usb/serial/ftdi_sio_ids.h | 7 drivers/usb/serial/mos7840.c | 9 drivers/usb/serial/option.c | 281 +++++++++++----------------- fs/ext4/extents.c | 1 fs/ext4/super.c | 6 fs/fuse/file.c | 2 fs/jbd2/journal.c | 3 include/drm/drm_pciids.h | 3 include/linux/jbd2.h | 1 include/linux/usb.h | 21 ++ 37 files changed, 408 insertions(+), 339 deletions(-)
Alex Deucher (4):
drm/radeon: properly handle crtc powergating drm/radeon: add some new SI pci ids drm/radeon: fix bank tiling parameters on cayman drm/radeon: fix bank tiling parameters on evergreen
Bart Van Assche (1):
IB/srp: Fix a race condition
Bjørn Mork (1):
USB: option: add ZTE K5006-Z
Christoph Bumiller (1):
drm/nvd0/disp: mask off high 16 bit of negative cursor x-coordinate
Daniel Vetter (3):
drm/i915: correctly order the ring init sequence drm/i915: ignore eDP bpc settings from vbt drm/i915: reorder edp disabling to fix ivb MacBook Air
Fabio Estevam (1):
dma: imx-dma: Fix kernel crash due to missing clock conversion
Greg Kroah-Hartman (1):
Linux 3.4.10
Gustavo Padovan (1):
USB: add USB_VENDOR_AND_INTERFACE_INFO() macro
Heiko Carstens (2):
s390/compat: fix compat wrappers for process_vm system calls s390/compat: fix mmap compat system calls
Jason Wessel (1):
pmac_zilog,kdb: Fix console poll hook to return instead of loop
Jeongdo Son (1):
rt2x00: Add support for BUFFALO WLI-UC-GNM2 to rt2800usb.
Jerome Glisse (1):
drm/radeon: do not reenable crtc after moving vram start address
Jesse Barnes (1):
drm/i915: prefer wide & slow to fast & narrow in DP configs
Mark Ferrell (1):
usb: serial: mos7840: Fixup mos7840_chars_in_buffer()
Michael Grzeschik (1):
usb: gadget: u_ether: fix kworker 100% CPU issue with still used interfaces in eth_stop
Ozan Çağlayan (1):
USB: ftdi_sio: Add VID/PID for Kondo Serial USB
Sarah Sharp (4):
xhci: Add Etron XHCI_TRUST_TX_LENGTH quirk.
xhci: Increase reset timeout for Renesas 720201 host.
xhci: Switch PPT ports to EHCI on shutdown.
xhci: Fix bug after deq ptr set to link TRB.
Stefano Stabellini (1):
xen: mark local pages as FOREIGN in the m2p_override
Theodore Ts'o (4):
ext4: make sure the journal sb is written in ext4_clear_journal_err()
ext4: avoid kmemcheck complaint from reading uninitialized memory
ext4: fix long mount times on very big file systems
ext4: fix kernel BUG on large-scale rm -rf commands
Zach Brown (1):
fuse: verify all ioctl retry iov elements
fangxiaozhi (1):
USB: support the new interfaces of Huawei Data Card devices in option driver
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 4 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Saber-toothed Squirrel
arch/s390/kernel/compat_linux.c +0 -2
@@ -612,7 +612,6 @@ asmlinkage unsigned long old32_mmap(struct mmap_arg_struct_emu31 __user *arg)return -EFAULT ;if (a.offset & ~PAGE_MASK )return -EINVAL ; - a.addr = (unsigned long )compat_ptr (a.addr);return sys_mmap_pgoff (a.addr, a.len, a.prot, a.flags, a.fd, a.offset >>PAGE_SHIFT ); }
@@ -623,7 +622,6 @@ asmlinkage long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg)if (copy_from_user (&a, arg,sizeof (a)))return -EFAULT ; - a.addr = (unsigned long )compat_ptr (a.addr);return sys_mmap_pgoff (a.addr, a.len, a.prot, a.flags, a.fd, a.offset); }
arch/s390/kernel/compat_wrapper.S +2 -2
@@ -1636,7 +1636,7 @@ ENTRY(compat_sys_process_vm_readv_wrapper) llgfr %r6,%r6 # unsigned long llgf %r0,164(%r15) # unsigned long stg %r0,160(%r15) - jg sys_process_vm_readv + jg compat_sys_process_vm_readv ENTRY(compat_sys_process_vm_writev_wrapper) lgfr %r2,%r2 # compat_pid_t
@@ -1646,4 +1646,4 @@ ENTRY(compat_sys_process_vm_writev_wrapper) llgfr %r6,%r6 # unsigned long llgf %r0,164(%r15) # unsigned long stg %r0,160(%r15) - jg sys_process_vm_writev + jg compat_sys_process_vm_writev
arch/x86/xen/p2m.c +36 -0
@@ -686,6 +686,7 @@ int m2p_add_override(unsigned long mfn, struct page *page,unsigned long uninitialized_var (address );unsigned level;pte_t *ptep =NULL ; +int ret =0 ; pfn =page_to_pfn (page);if (!PageHighMem (page)) {
@@ -721,6 +722,24 @@ int m2p_add_override(unsigned long mfn, struct page *page,list_add (&page->lru, &m2p_overrides[mfn_hash (mfn)]);spin_unlock_irqrestore (&m2p_override_lock, flags); +/* p2m(m2p(mfn)) == mfn: the mfn is already present somewhere in +* this domain. Set the FOREIGN_FRAME_BIT in the p2m for the other +* pfn so that the following mfn_to_pfn(mfn) calls will return the +* pfn from the m2p_override (the backend pfn) instead. +* We need to do this because the pages shared by the frontend +* (xen-blkfront) can be already locked (lock_page, called by +* do_read_cache_page); when the userspace backend tries to use them +* with direct_IO, mfn_to_pfn returns the pfn of the frontend, so +* do_blockdev_direct_IO is going to try to lock the same pages +* again resulting in a deadlock. +* As a side effect get_user_pages_fast might not be safe on the +* frontend pages while they are being shared with the backend, +* because mfn_to_pfn (that ends up being called by GUPF) will +* return the backend pfn rather than the frontend pfn. */ + ret =__get_user (pfn, &machine_to_phys_mapping[mfn]); +if (ret ==0 &&get_phys_to_machine (pfn) == mfn) +set_phys_to_machine (pfn,FOREIGN_FRAME (mfn)); +return 0 ; }EXPORT_SYMBOL_GPL (m2p_add_override);
@@ -732,6 +751,7 @@ int m2p_remove_override(struct page *page, bool clear_pte)unsigned long uninitialized_var (address );unsigned level;pte_t *ptep =NULL ; +int ret =0 ; pfn =page_to_pfn (page); mfn =get_phys_to_machine (pfn);
@@ -801,6 +821,22 @@ int m2p_remove_override(struct page *page, bool clear_pte) }else set_phys_to_machine (pfn, page->index); +/* p2m(m2p(mfn)) == FOREIGN_FRAME(mfn): the mfn is already present +* somewhere in this domain, even before being added to the +* m2p_override (see comment above in m2p_add_override). +* If there are no other entries in the m2p_override corresponding +* to this mfn, then remove the FOREIGN_FRAME_BIT from the p2m for +* the original pfn (the one shared by the frontend): the backend +* cannot do any IO on this page anymore because it has been +* unshared. Removing the FOREIGN_FRAME_BIT from the p2m entry of +* the original pfn causes mfn_to_pfn(mfn) to return the frontend +* pfn again. */ + mfn &= ~FOREIGN_FRAME_BIT ; + ret =__get_user (pfn, &machine_to_phys_mapping[mfn]); +if (ret ==0 &&get_phys_to_machine (pfn) ==FOREIGN_FRAME (mfn) && +m2p_find_override (mfn) ==NULL ) +set_phys_to_machine (pfn, mfn); +return 0 ; }EXPORT_SYMBOL_GPL (m2p_remove_override);
drivers/dma/imx-dma.c +25 -11
@@ -172,7 +172,8 @@ struct imxdma_engine {struct device_dma_parameters dma_parms;struct dma_device dma_device;void __iomem *base; -struct clk *dma_clk; +struct clk *dma_ahb; +struct clk *dma_ipg;spinlock_t lock;struct imx_dma_2d_config slots_2d[IMX_DMA_2D_SLOTS ];struct imxdma_channel channel[IMX_DMA_CHANNELS ];
@@ -976,10 +977,20 @@ static int __init imxdma_probe(struct platform_device *pdev)return 0 ; } - imxdma->dma_clk =clk_get (NULL ,"dma" ); -if (IS_ERR (imxdma->dma_clk)) -return PTR_ERR (imxdma->dma_clk); -clk_enable (imxdma->dma_clk); + imxdma->dma_ipg =devm_clk_get (&pdev->dev,"ipg" ); +if (IS_ERR (imxdma->dma_ipg)) { + ret =PTR_ERR (imxdma->dma_ipg); + goto err_clk; + } + + imxdma->dma_ahb =devm_clk_get (&pdev->dev,"ahb" ); +if (IS_ERR (imxdma->dma_ahb)) { + ret =PTR_ERR (imxdma->dma_ahb); + goto err_clk; + } + +clk_prepare_enable (imxdma->dma_ipg); +clk_prepare_enable (imxdma->dma_ahb);/* reset DMA module */ imx_dmav1_writel (imxdma,DCR_DRST ,DMA_DCR );
@@ -988,16 +999,14 @@ static int __init imxdma_probe(struct platform_device *pdev) ret =request_irq (MX1_DMA_INT , dma_irq_handler,0 ,"DMA" , imxdma);if (ret) {dev_warn (imxdma->dev,"Can't register IRQ for DMA\n" ); -kfree (imxdma); -return ret; + goto err_enable; } ret =request_irq (MX1_DMA_ERR , imxdma_err_handler,0 ,"DMA" , imxdma);if (ret) {dev_warn (imxdma->dev,"Can't register ERRIRQ for DMA\n" );free_irq (MX1_DMA_INT ,NULL ); -kfree (imxdma); -return ret; + goto err_enable; } }
@@ -1094,7 +1103,10 @@ err_init:free_irq (MX1_DMA_INT ,NULL );free_irq (MX1_DMA_ERR ,NULL ); } - +err_enable: +clk_disable_unprepare (imxdma->dma_ipg); +clk_disable_unprepare (imxdma->dma_ahb); +err_clk:kfree (imxdma);return ret; }
@@ -1114,7 +1126,9 @@ static int __exit imxdma_remove(struct platform_device *pdev)free_irq (MX1_DMA_ERR ,NULL ); } -kfree (imxdma); +clk_disable_unprepare (imxdma->dma_ipg); +clk_disable_unprepare (imxdma->dma_ahb); +kfree (imxdma);return 0 ; }
drivers/gpu/drm/i915/intel_display.c +0 -11
@@ -4982,17 +4982,6 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc,continue ; } -if (intel_encoder->type ==INTEL_OUTPUT_EDP ) { -/* Use VBT settings if we have an eDP panel */ -unsigned int edp_bpc = dev_priv->edp.bpp /3 ; - -if (edp_bpc < display_bpc) { -DRM_DEBUG_KMS ("clamping display bpc (was %d) to eDP (%d)\n" , display_bpc, edp_bpc); - display_bpc = edp_bpc; - } -continue ; - } -/* Not one of the known troublemakers, check the EDID */ list_for_each_entry (connector, &dev->mode_config.connector_list, head) {
drivers/gpu/drm/i915/intel_dp.c +9 -9
@@ -712,8 +712,8 @@ intel_dp_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode, bpp = adjusted_mode->private_flags &INTEL_MODE_DP_FORCE_6BPC ?18 :24 ; -for (lane_count =1 ; lane_count <= max_lane_count; lane_count <<=1 ) { -for (clock =0 ; clock <= max_clock; clock++) { +for (clock =0 ; clock <= max_clock; clock++) { +for (lane_count =1 ; lane_count <= max_lane_count; lane_count <<=1 ) {int link_avail =intel_dp_max_data_rate (intel_dp_link_clock (bws[clock]), lane_count); if (intel_dp_link_required(mode->clock, bpp)
@@ -1156,10 +1156,14 @@ static void ironlake_edp_panel_off(struct intel_dp *intel_dp)WARN (!intel_dp->want_panel_vdd,"Need VDD to turn off panel\n" ); pp =ironlake_get_pp_control (dev_priv); - pp &= ~(POWER_TARGET_ON |PANEL_POWER_RESET |EDP_BLC_ENABLE ); +/* We need to switch off panel power _and_ force vdd, for otherwise some +* panels get very unhappy and cease to work. */ + pp &= ~(POWER_TARGET_ON |EDP_FORCE_VDD |PANEL_POWER_RESET |EDP_BLC_ENABLE );I915_WRITE (PCH_PP_CONTROL , pp);POSTING_READ (PCH_PP_CONTROL ); + intel_dp->want_panel_vdd = false; +ironlake_wait_panel_off (intel_dp); }
@@ -1269,11 +1273,9 @@ static void intel_dp_prepare(struct drm_encoder *encoder)* ensure that we have vdd while we switch off the panel. */ ironlake_edp_panel_vdd_on (intel_dp);ironlake_edp_backlight_off (intel_dp); -ironlake_edp_panel_off (intel_dp); -intel_dp_sink_dpms (intel_dp,DRM_MODE_DPMS_ON ); +ironlake_edp_panel_off (intel_dp);intel_dp_link_down (intel_dp); -ironlake_edp_panel_vdd_off (intel_dp, false); }static void intel_dp_commit (struct drm_encoder *encoder)
@@ -1308,11 +1310,9 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode)/* Switching the panel off requires vdd. */ ironlake_edp_panel_vdd_on (intel_dp);ironlake_edp_backlight_off (intel_dp); -ironlake_edp_panel_off (intel_dp); -intel_dp_sink_dpms (intel_dp, mode); +ironlake_edp_panel_off (intel_dp);intel_dp_link_down (intel_dp); -ironlake_edp_panel_vdd_off (intel_dp, false);if (is_cpu_edp (intel_dp))ironlake_edp_pll_off (encoder);
drivers/gpu/drm/i915/intel_ringbuffer.c +5 -2
@@ -258,8 +258,6 @@ static int init_ring_common(struct intel_ring_buffer *ring)I915_WRITE_HEAD (ring,0 ); ring->write_tail (ring,0 ); -/* Initialize the ring. */ -I915_WRITE_START (ring, obj->gtt_offset); head =I915_READ_HEAD (ring) &HEAD_ADDR ;/* G45 ring initialization fails to reset head to zero */
@@ -285,6 +283,11 @@ static int init_ring_common(struct intel_ring_buffer *ring) } } +/* Initialize the ring. This must happen _after_ we've cleared the ring +* registers with the above sequence (the readback of the HEAD registers +* also enforces ordering), otherwise the hw might lose the new ring +* register values. */ +I915_WRITE_START (ring, obj->gtt_offset);I915_WRITE_CTL (ring, ((ring->size -PAGE_SIZE ) &RING_NR_PAGES ) |RING_VALID );
drivers/gpu/drm/nouveau/nvd0_display.c +1 -1
@@ -790,7 +790,7 @@ nvd0_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)struct nouveau_crtc *nv_crtc =nouveau_crtc (crtc);int ch =EVO_CURS (nv_crtc->index); -evo_piow (crtc->dev, ch,0x0084 , (y <<16 ) | x); +evo_piow (crtc->dev, ch,0x0084 , (y <<16 ) | (x &0xffff ));evo_piow (crtc->dev, ch,0x0080 ,0x00000000 );return 0 ; }
drivers/gpu/drm/radeon/atombios_crtc.c +12 -2
@@ -259,7 +259,7 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode)/* adjust pm to dpms changes BEFORE enabling crtcs */ radeon_pm_compute_clocks (rdev);/* disable crtc pair power gating before programming */ -if (ASIC_IS_DCE6 (rdev)) +if (ASIC_IS_DCE6 (rdev) && !radeon_crtc->in_mode_set)atombios_powergate_crtc (crtc,ATOM_DISABLE );atombios_enable_crtc (crtc,ATOM_ENABLE );if (ASIC_IS_DCE3 (rdev) && !ASIC_IS_DCE6 (rdev))
@@ -279,7 +279,7 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode)atombios_enable_crtc (crtc,ATOM_DISABLE ); radeon_crtc->enabled = false;/* power gating is per-pair */ -if (ASIC_IS_DCE6 (rdev)) { +if (ASIC_IS_DCE6 (rdev) && !radeon_crtc->in_mode_set) {struct drm_crtc *other_crtc;struct radeon_crtc *other_radeon_crtc;list_for_each_entry (other_crtc, &rdev->ddev->mode_config.crtc_list, head) {
@@ -1634,18 +1634,28 @@ static bool atombios_crtc_mode_fixup(struct drm_crtc *crtc,static void atombios_crtc_prepare (struct drm_crtc *crtc) {struct radeon_crtc *radeon_crtc =to_radeon_crtc (crtc); +struct drm_device *dev = crtc->dev; +struct radeon_device *rdev = dev->dev_private; + radeon_crtc->in_mode_set = true;/* pick pll */ radeon_crtc->pll_id =radeon_atom_pick_pll (crtc); +/* disable crtc pair power gating before programming */ +if (ASIC_IS_DCE6 (rdev)) +atombios_powergate_crtc (crtc,ATOM_DISABLE ); +atombios_lock_crtc (crtc,ATOM_ENABLE );atombios_crtc_dpms (crtc,DRM_MODE_DPMS_OFF ); }static void atombios_crtc_commit (struct drm_crtc *crtc) { +struct radeon_crtc *radeon_crtc =to_radeon_crtc (crtc); +atombios_crtc_dpms (crtc,DRM_MODE_DPMS_ON );atombios_lock_crtc (crtc,ATOM_DISABLE ); + radeon_crtc->in_mode_set = false; }static void atombios_crtc_disable (struct drm_crtc *crtc)
drivers/gpu/drm/radeon/evergreen.c +11 -60
92 lines not on this page · raw message
drivers/gpu/drm/radeon/ni.c +11 -3
@@ -880,10 +880,18 @@ static void cayman_gpu_init(struct radeon_device *rdev)if (rdev->flags &RADEON_IS_IGP ) rdev->config.cayman.tile_config |=1 <<4 ;else { -if ((mc_arb_ramcfg &NOOFBANK_MASK ) >>NOOFBANK_SHIFT ) - rdev->config.cayman.tile_config |=1 <<4 ; -else +switch ((mc_arb_ramcfg &NOOFBANK_MASK ) >>NOOFBANK_SHIFT ) { +case 0 :/* four banks */ rdev->config.cayman.tile_config |=0 <<4 ; +break ; +case 1 :/* eight banks */ + rdev->config.cayman.tile_config |=1 <<4 ; +break ; +case 2 :/* sixteen banks */ +default : + rdev->config.cayman.tile_config |=2 <<4 ; +break ; + } } rdev->config.cayman.tile_config |= ((gb_addr_config &PIPE_INTERLEAVE_SIZE_MASK ) >>PIPE_INTERLEAVE_SIZE_SHIFT ) <<8 ;
drivers/gpu/drm/radeon/radeon_asic.h +2 -6
@@ -262,13 +262,10 @@ extern int rs690_mc_wait_for_idle(struct radeon_device *rdev);* rv515 */ struct rv515_mc_save { -u32 d1vga_control; -u32 d2vga_control;u32 vga_render_control;u32 vga_hdp_control; -u32 d1crtc_control; -u32 d2crtc_control; }; +int rv515_init (struct radeon_device *rdev);void rv515_fini (struct radeon_device *rdev);uint32_t rv515_mc_rreg (struct radeon_device *rdev,uint32_t reg);
@@ -401,11 +398,10 @@ void r700_cp_fini(struct radeon_device *rdev);* evergreen */ struct evergreen_mc_save { -u32 vga_control[6 ];u32 vga_render_control;u32 vga_hdp_control; -u32 crtc_control[6 ]; }; +void evergreen_pcie_gart_tlb_flush (struct radeon_device *rdev);int evergreen_init (struct radeon_device *rdev);void evergreen_fini (struct radeon_device *rdev);
drivers/gpu/drm/radeon/radeon_legacy_crtc.c +4 -0
@@ -1025,9 +1025,11 @@ static int radeon_crtc_mode_set(struct drm_crtc *crtc,static void radeon_crtc_prepare (struct drm_crtc *crtc) { +struct radeon_crtc *radeon_crtc =to_radeon_crtc (crtc);struct drm_device *dev = crtc->dev;struct drm_crtc *crtci; + radeon_crtc->in_mode_set = true;/* * The hardware wedges sometimes if you reconfigure one CRTC * whilst another is running (see fdo bug #24611).
@@ -1038,6 +1040,7 @@ static void radeon_crtc_prepare(struct drm_crtc *crtc)static void radeon_crtc_commit (struct drm_crtc *crtc) { +struct radeon_crtc *radeon_crtc =to_radeon_crtc (crtc);struct drm_device *dev = crtc->dev;struct drm_crtc *crtci;
@@ -1048,6 +1051,7 @@ static void radeon_crtc_commit(struct drm_crtc *crtc)if (crtci->enabled)radeon_crtc_dpms (crtci,DRM_MODE_DPMS_ON ); } + radeon_crtc->in_mode_set = false; }static const struct drm_crtc_helper_funcs legacy_helper_funcs = {
drivers/gpu/drm/radeon/radeon_mode.h +1 -0
@@ -266,6 +266,7 @@ struct radeon_crtc {u16 lut_r[256 ], lut_g[256 ], lut_b[256 ];bool enabled;bool can_tile; +bool in_mode_set;uint32_t crtc_offset;struct drm_gem_object *cursor_bo;uint64_t cursor_addr;
drivers/gpu/drm/radeon/rv515.c +0 -13
@@ -281,12 +281,8 @@ int rv515_debugfs_ga_info_init(struct radeon_device *rdev)void rv515_mc_stop (struct radeon_device *rdev,struct rv515_mc_save *save) { - save->d1vga_control =RREG32 (R_000330_D1VGA_CONTROL ); - save->d2vga_control =RREG32 (R_000338_D2VGA_CONTROL ); save->vga_render_control =RREG32 (R_000300_VGA_RENDER_CONTROL ); save->vga_hdp_control =RREG32 (R_000328_VGA_HDP_CONTROL ); - save->d1crtc_control =RREG32 (R_006080_D1CRTC_CONTROL ); - save->d2crtc_control =RREG32 (R_006880_D2CRTC_CONTROL );/* Stop all video */ WREG32 (R_0068E8_D2CRTC_UPDATE_LOCK ,0 );
@@ -311,15 +307,6 @@ void rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save)/* Unlock host access */ WREG32 (R_000328_VGA_HDP_CONTROL , save->vga_hdp_control);mdelay (1 ); -/* Restore video state */ -WREG32 (R_000330_D1VGA_CONTROL , save->d1vga_control); -WREG32 (R_000338_D2VGA_CONTROL , save->d2vga_control); -WREG32 (R_0060E8_D1CRTC_UPDATE_LOCK ,1 ); -WREG32 (R_0068E8_D2CRTC_UPDATE_LOCK ,1 ); -WREG32 (R_006080_D1CRTC_CONTROL , save->d1crtc_control); -WREG32 (R_006880_D2CRTC_CONTROL , save->d2crtc_control); -WREG32 (R_0060E8_D1CRTC_UPDATE_LOCK ,0 ); -WREG32 (R_0068E8_D2CRTC_UPDATE_LOCK ,0 );WREG32 (R_000300_VGA_RENDER_CONTROL , save->vga_render_control); }
drivers/infiniband/ulp/srp/ib_srp.c +63 -24
130 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2800usb.c +1 -0
@@ -971,6 +971,7 @@ static struct usb_device_id rt2800usb_device_table[] = { { USB_DEVICE(0x0411, 0x015d) }, { USB_DEVICE(0x0411, 0x016f) }, { USB_DEVICE(0x0411, 0x01a2) }, + { USB_DEVICE(0x0411, 0x01ee) },/* Corega */ { USB_DEVICE(0x07aa, 0x002f) }, { USB_DEVICE(0x07aa, 0x003c) },
drivers/tty/serial/pmac_zilog.c +9 -3
@@ -1348,10 +1348,16 @@ static int pmz_verify_port(struct uart_port *port, struct serial_struct *ser)static int pmz_poll_get_char (struct uart_port *port) {struct uart_pmac_port *uap = (struct uart_pmac_port *)port; +int tries =2 ; -while ((read_zsreg (uap,R0 ) & Rx_CH_AV) ==0 ) -udelay (5 ); -return read_zsdata (uap); +while (tries) { +if ((read_zsreg (uap,R0 ) & Rx_CH_AV) !=0 ) +return read_zsdata (uap); +if (tries--) +udelay (5 ); + } + +return NO_POLL_CHAR ; }static void pmz_poll_put_char (struct uart_port *port,unsigned char c)
drivers/usb/gadget/u_ether.c +6 -0
@@ -669,6 +669,8 @@ static int eth_stop(struct net_device *net)spin_lock_irqsave (&dev->lock, flags);if (dev->port_usb) {struct gether *link = dev->port_usb; +const struct usb_endpoint_descriptor *in; +const struct usb_endpoint_descriptor *out;if (link->close) link->close (link);
@@ -682,10 +684,14 @@ static int eth_stop(struct net_device *net)* their own pace; the network stack can handle old packets. * For the moment we leave this here, since it works. */ + in = link->in_ep->desc; + out = link->out_ep->desc;usb_ep_disable (link->in_ep);usb_ep_disable (link->out_ep);if (netif_carrier_ok (net)) {DBG (dev,"host still using in/out endpoints\n" ); + link->in_ep->desc = in; + link->out_ep->desc = out;usb_ep_enable (link->in_ep);usb_ep_enable (link->out_ep); }
drivers/usb/host/pci-quirks.c +7 -0
@@ -800,6 +800,13 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev) }EXPORT_SYMBOL_GPL (usb_enable_xhci_ports); +void usb_disable_xhci_ports (struct pci_dev *xhci_pdev) +{ +pci_write_config_dword (xhci_pdev,USB_INTEL_USB3_PSSEN ,0x0 ); +pci_write_config_dword (xhci_pdev,USB_INTEL_XUSB2PR ,0x0 ); +} +EXPORT_SYMBOL_GPL (usb_disable_xhci_ports); +/** * PCI Quirks for xHCI. *
drivers/usb/host/pci-quirks.h +1 -0
@@ -10,6 +10,7 @@ void usb_amd_quirk_pll_disable(void);void usb_amd_quirk_pll_enable (void );bool usb_is_intel_switchable_xhci (struct pci_dev *pdev);void usb_enable_xhci_ports (struct pci_dev *xhci_pdev); +void usb_disable_xhci_ports (struct pci_dev *xhci_pdev);#else static inline void usb_amd_quirk_pll_disable (void ) {}static inline void usb_amd_quirk_pll_enable (void ) {}
drivers/usb/host/xhci-pci.c +10 -0
@@ -90,11 +90,21 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) xhci->quirks |=XHCI_EP_LIMIT_QUIRK ; xhci->limit_active_eps =64 ; xhci->quirks |=XHCI_SW_BW_CHECKING ; +/* +* PPT desktop boards DH77EB and DH77DF will power back on after +* a few seconds of being shutdown. The fix for this is to +* switch the ports from xHCI to EHCI on shutdown. We can't use +* DMI information to find those particular boards (since each +* vendor will change the board name), so we have to key off all +* PPT chipsets. +*/ + xhci->quirks |=XHCI_SPURIOUS_REBOOT ; }if (pdev->vendor ==PCI_VENDOR_ID_ETRON && pdev->device ==PCI_DEVICE_ID_ASROCK_P67 ) { xhci->quirks |=XHCI_RESET_ON_RESUME ;xhci_dbg (xhci,"QUIRK: Resetting on resume\n" ); + xhci->quirks |=XHCI_TRUST_TX_LENGTH ; }if (pdev->vendor ==PCI_VENDOR_ID_VIA ) xhci->quirks |=XHCI_RESET_ON_RESUME ;
drivers/usb/host/xhci-ring.c +22 -14
@@ -145,29 +145,37 @@ static void next_trb(struct xhci_hcd *xhci,*/ static void inc_deq (struct xhci_hcd *xhci,struct xhci_ring *ring) { -union xhci_trb *next;unsigned long long addr; ring->deq_updates++; -/* If this is not event ring, there is one more usable TRB */ +/* +* If this is not event ring, and the dequeue pointer +* is not on a link TRB, there is one more usable TRB +*/ if (ring->type !=TYPE_EVENT && !last_trb (xhci, ring, ring->deq_seg, ring->dequeue)) ring->num_trbs_free++; - next = ++(ring->dequeue); -/* Update the dequeue pointer further if that was a link TRB or we're at -* the end of an event ring segment (which doesn't have link TRBS) -*/ -while (last_trb (xhci, ring, ring->deq_seg, next)) { -if (ring->type ==TYPE_EVENT &&last_trb_on_last_seg (xhci, - ring, ring->deq_seg, next)) { - ring->cycle_state = (ring->cycle_state ?0 :1 ); +do { +/* +* Update the dequeue pointer further if that was a link TRB or +* we're at the end of an event ring segment (which doesn't have +* link TRBS) +*/ +if (last_trb (xhci, ring, ring->deq_seg, ring->dequeue)) { +if (ring->type ==TYPE_EVENT && +last_trb_on_last_seg (xhci, ring, + ring->deq_seg, ring->dequeue)) { + ring->cycle_state = (ring->cycle_state ?0 :1 ); + } + ring->deq_seg = ring->deq_seg->next; + ring->dequeue = ring->deq_seg->trbs; + }else { + ring->dequeue++; } - ring->deq_seg = ring->deq_seg->next; - ring->dequeue = ring->deq_seg->trbs; - next = ring->dequeue; - } + }while (last_trb (xhci, ring, ring->deq_seg, ring->dequeue)); + addr = (unsigned long long )xhci_trb_virt_to_dma (ring->deq_seg, ring->dequeue); }
drivers/usb/host/xhci.c +6 -2
@@ -166,7 +166,7 @@ int xhci_reset(struct xhci_hcd *xhci)xhci_writel (xhci, command, &xhci->op_regs->command); ret =handshake (xhci, &xhci->op_regs->command, -CMD_RESET ,0 ,250 *1000 ); +CMD_RESET ,0 ,10 *1000 *1000 );if (ret)return ret;
@@ -175,7 +175,8 @@ int xhci_reset(struct xhci_hcd *xhci)* xHCI cannot write to any doorbells or operational registers other * than status until the "Controller Not Ready" flag is cleared. */ - ret =handshake (xhci, &xhci->op_regs->status,STS_CNR ,0 ,250 *1000 ); + ret =handshake (xhci, &xhci->op_regs->status, +STS_CNR ,0 ,10 *1000 *1000 );for (i =0 ; i <2 ; ++i) { xhci->bus_state[i].port_c_suspend =0 ;
@@ -658,6 +659,9 @@ void xhci_shutdown(struct usb_hcd *hcd) {struct xhci_hcd *xhci =hcd_to_xhci (hcd); +if (xhci->quirks &&XHCI_SPURIOUS_REBOOT ) +usb_disable_xhci_ports (to_pci_dev (hcd->self.controller)); +spin_lock_irq (&xhci->lock);xhci_halt (xhci);spin_unlock_irq (&xhci->lock);
drivers/usb/host/xhci.h +1 -0
@@ -1486,6 +1486,7 @@ struct xhci_hcd {#define XHCI_SW_BW_CHECKING (1 << 8)#define XHCI_AMD_0x96_HOST (1 << 9)#define XHCI_TRUST_TX_LENGTH (1 << 10) +#define XHCI_SPURIOUS_REBOOT (1 << 13)unsigned int num_active_eps;unsigned int limit_active_eps;/* There are two roothubs to keep track of bus suspend info for */
drivers/usb/serial/ftdi_sio.c +1 -0
@@ -811,6 +811,7 @@ static struct usb_device_id id_table_combined [] = { { USB_DEVICE(LARSENBRUSGAARD_VID, LB_ALTITRACK_PID) }, { USB_DEVICE(GN_OTOMETRICS_VID, AURICAL_USB_PID) }, { USB_DEVICE(PI_VID, PI_E861_PID) }, + { USB_DEVICE(KONDO_VID, KONDO_USB_SERIAL_PID) }, { USB_DEVICE(BAYER_VID, BAYER_CONTOUR_CABLE_PID) }, { USB_DEVICE(FTDI_VID, MARVELL_OPENRD_PID), .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
drivers/usb/serial/ftdi_sio_ids.h +7 -0
@@ -795,6 +795,13 @@#define PI_E861_PID 0x1008/* E-861 piezo controller USB connection */ /* +* Kondo Kagaku Co.Ltd. +* http://www.kondo-robot.com/EN +*/ +#define KONDO_VID 0x165c +#define KONDO_USB_SERIAL_PID 0x0002 + +/* * Bayer Ascensia Contour blood glucose meter USB-converter cable. * http://winglucofacts.com/cables/ */
drivers/usb/serial/mos7840.c +6 -3
@@ -1189,9 +1189,12 @@ static int mos7840_chars_in_buffer(struct tty_struct *tty) }spin_lock_irqsave (&mos7840_port->pool_lock, flags); -for (i =0 ; i <NUM_URBS ; ++i) -if (mos7840_port->busy[i]) - chars +=URB_TRANSFER_BUFFER_SIZE ; +for (i =0 ; i <NUM_URBS ; ++i) { +if (mos7840_port->busy[i]) { +struct urb *urb = mos7840_port->write_urb_pool[i]; + chars += urb->transfer_buffer_length; + } + }spin_unlock_irqrestore (&mos7840_port->pool_lock, flags);dbg ("%s - returns %d" , __func__, chars);return chars;
drivers/usb/serial/option.c +113 -168
308 lines not on this page · raw message
fs/ext4/extents.c +1 -0
@@ -2596,6 +2596,7 @@ cont: } path[0 ].p_depth = depth; path[0 ].p_hdr =ext_inode_hdr (inode); + i =0 ;if (ext4_ext_check (inode, path[0 ].p_hdr, depth)) { err = -EIO ;
fs/ext4/super.c +6 -0
@@ -932,6 +932,7 @@ static struct inode *ext4_alloc_inode(struct super_block *sb) ei->i_reserved_meta_blocks =0 ; ei->i_allocated_meta_blocks =0 ; ei->i_da_metadata_calc_len =0 ; + ei->i_da_metadata_calc_last_lblock =0 ;spin_lock_init (&(ei->i_block_reservation_lock));#ifdef CONFIG_QUOTA ei->i_reserved_quota =0 ;
@@ -2968,6 +2969,10 @@ static int count_overhead(struct super_block *sb, ext4_group_t grp,ext4_group_t i, ngroups =ext4_get_groups_count (sb);int s, j, count =0 ; +if (!EXT4_HAS_RO_COMPAT_FEATURE (sb,EXT4_FEATURE_RO_COMPAT_BIGALLOC )) +return (ext4_bg_has_super (sb, grp) +ext4_bg_num_gdb (sb, grp) + + sbi->s_itb_per_group +2 ); + first_block =le32_to_cpu (sbi->s_es->s_first_data_block) + (grp *EXT4_BLOCKS_PER_GROUP (sb)); last_block = first_block +EXT4_BLOCKS_PER_GROUP (sb) -1 ;
@@ -4227,6 +4232,7 @@ static void ext4_clear_journal_err(struct super_block *sb,ext4_commit_super (sb,1 );jbd2_journal_clear_err (journal); +jbd2_journal_update_sb_errno (journal); } }
fs/fuse/file.c +1 -1
@@ -1698,7 +1698,7 @@ static int fuse_verify_ioctl_iov(struct iovec *iov, size_t count)size_t n;u32 max =FUSE_MAX_PAGES_PER_REQ <<PAGE_SHIFT ; -for (n =0 ; n < count; n++) { +for (n =0 ; n < count; n++, iov++) {if (iov->iov_len > (size_t ) max)return -ENOMEM ; max -= iov->iov_len;
fs/jbd2/journal.c +2 -1
@@ -1340,7 +1340,7 @@ static void jbd2_mark_journal_empty(journal_t *journal)* Update a journal's errno. Write updated superblock to disk waiting for IO * to complete. */ -static void jbd2_journal_update_sb_errno (journal_t *journal) +void jbd2_journal_update_sb_errno (journal_t *journal) {journal_superblock_t *sb = journal->j_superblock;
@@ -1352,6 +1352,7 @@ static void jbd2_journal_update_sb_errno(journal_t *journal)jbd2_write_superblock (journal,WRITE_SYNC ); } +EXPORT_SYMBOL (jbd2_journal_update_sb_errno);/* * Read the superblock for a given journal, performing initial
include/drm/drm_pciids.h +3 -0
@@ -217,9 +217,12 @@ {0x1002, 0x6800, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6801, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6802, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ + {0x1002, 0x6806, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6808, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6809, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6810, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ + {0x1002, 0x6816, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ + {0x1002, 0x6817, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6818, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6819, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
include/linux/jbd2.h +1 -0
@@ -1091,6 +1091,7 @@ extern int jbd2_journal_destroy (journal_t *);extern int jbd2_journal_recover (journal_t *journal);extern int jbd2_journal_wipe (journal_t *,int );extern int jbd2_journal_skip_recovery (journal_t *); +extern void jbd2_journal_update_sb_errno (journal_t *);extern void jbd2_journal_update_sb_log_tail (journal_t *,tid_t ,unsigned long ,int );extern void __jbd2_journal_abort_hard (journal_t *);
include/linux/usb.h +21 -0
@@ -783,6 +783,27 @@ static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size) .bInterfaceSubClass = (sc), \ .bInterfaceProtocol = (pr) +/** +* USB_VENDOR_AND_INTERFACE_INFO - describe a specific usb vendor with a class of usb interfaces +* @vend: the 16 bit USB Vendor ID +* @cl: bInterfaceClass value +* @sc: bInterfaceSubClass value +* @pr: bInterfaceProtocol value +* +* This macro is used to create a struct usb_device_id that matches a +* specific vendor with a specific class of interfaces. +* +* This is especially useful when explicitly matching devices that have +* vendor specific bDeviceClass values, but standards-compliant interfaces. + */ +#define USB_VENDOR_AND_INTERFACE_INFO (vend, cl, sc, pr) \ + .match_flags = USB_DEVICE_ID_MATCH_INT_INFO \ + | USB_DEVICE_ID_MATCH_VENDOR, \ + .idVendor = (vend), \ + .bInterfaceClass = (cl), \ + .bInterfaceSubClass = (sc), \ + .bInterfaceProtocol = (pr) +/* ----------------------------------------------------------------------- */ /* Stuff for dynamic usb ids */