Linux 3.0.42
I'm announcing the release of the 3.0.42 kernel.
All users of the 3.0 kernel series must upgrade.
Note, there is a reported problem with the Intel graphics driver in this release, a follow-on release might happen quite quickly to resolve this issue after it has been tested out.
The updated 3.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.0.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/x86/xen/p2m.c | 36 ++++ drivers/gpu/drm/i915/intel_ringbuffer.c | 7 drivers/gpu/drm/radeon/evergreen.c | 57 ------ drivers/gpu/drm/radeon/radeon_asic.h | 8 drivers/gpu/drm/radeon/rv515.c | 13 - drivers/infiniband/ulp/srp/ib_srp.c | 87 +++++++-- drivers/net/wireless/rt2x00/rt2800usb.c | 1 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.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/super.c | 1 fs/fuse/file.c | 2 include/linux/usb.h | 21 ++ 21 files changed, 283 insertions(+), 279 deletions(-)
Bart Van Assche (1):
IB/srp: Fix a race condition
Bjørn Mork (1):
USB: option: add ZTE K5006-Z
Daniel Vetter (1):
drm/i915: correctly order the ring init sequence
Greg Kroah-Hartman (1):
Linux 3.0.42
Gustavo Padovan (1):
USB: add USB_VENDOR_AND_INTERFACE_INFO() macro
Heiko Carstens (1):
s390/compat: fix mmap compat system calls
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
Mark Ferrell (1):
usb: serial: mos7840: Fixup mos7840_chars_in_buffer()
Ozan Çağlayan (1):
USB: ftdi_sio: Add VID/PID for Kondo Serial USB
Sarah Sharp (3):
xhci: Add Etron XHCI_TRUST_TX_LENGTH quirk.
xhci: Increase reset timeout for Renesas 720201 host.
xhci: Switch PPT ports to EHCI on shutdown.
Stefano Stabellini (1):
xen: mark local pages as FOREIGN in the m2p_override
Theodore Ts'o (1):
ext4: avoid kmemcheck complaint from reading uninitialized memory
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 = 0 -SUBLEVEL = 41 +SUBLEVEL = 42 EXTRAVERSION = NAME = Sneaky Weasel
arch/s390/kernel/compat_linux.c +0 -2
@@ -631,7 +631,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 ); }
@@ -642,7 +641,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/x86/xen/p2m.c +36 -0
@@ -683,6 +683,7 @@ int m2p_add_override(unsigned long mfn, 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);if (!PageHighMem (page)) {
@@ -706,6 +707,24 @@ int m2p_add_override(unsigned long mfn, struct page *page, bool clear_pte)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);
@@ -717,6 +736,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);
@@ -743,6 +763,22 @@ int m2p_remove_override(struct page *page, bool clear_pte)/* No tlb flush necessary because the caller already * left the pte unmapped. */ +/* 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/gpu/drm/i915/intel_ringbuffer.c +5 -2
@@ -150,8 +150,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 */
@@ -177,6 +175,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_REPORT_64K |RING_VALID );
drivers/gpu/drm/radeon/evergreen.c +0 -57
71 lines not on this page · raw message
drivers/gpu/drm/radeon/radeon_asic.h +2 -6
@@ -253,13 +253,10 @@ void rs690_line_buffer_adjust(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);
@@ -387,11 +384,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/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
@@ -829,6 +829,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/usb/host/pci-quirks.c +7 -0
@@ -798,6 +798,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
@@ -140,11 +140,21 @@ static int xhci_pci_setup(struct usb_hcd *hcd) xhci->quirks |=XHCI_SPURIOUS_SUCCESS ; xhci->quirks |=XHCI_EP_LIMIT_QUIRK ; xhci->limit_active_eps =64 ; +/* +* 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.c +6 -2
@@ -163,7 +163,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;
@@ -172,7 +172,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. */ -return handshake (xhci, &xhci->op_regs->status,STS_CNR ,0 ,250 *1000 ); +return handshake (xhci, &xhci->op_regs->status, +STS_CNR ,0 ,10 *1000 *1000 ); }/*
@@ -593,6 +594,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
@@ -1316,6 +1316,7 @@ struct xhci_hcd {#define XHCI_RESET_ON_RESUME (1 << 7)#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
@@ -809,6 +809,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
@@ -1191,9 +1191,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/super.c +1 -0
@@ -860,6 +860,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 ;
fs/fuse/file.c +1 -1
@@ -1710,7 +1710,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;
include/linux/usb.h +21 -0
@@ -757,6 +757,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 */