Linux 3.0.65
Greg KH
maintainerI'm announcing the release of the 3.0.65 kernel.
All users of the 3.0 kernel series must upgrade.
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/x86/include/asm/pgtable.h | 5 +++++ arch/x86/mm/init_64.c | 3 +++ arch/x86/xen/xen-asm_32.S | 14 +++++++------- drivers/net/igb/igb_main.c | 8 +++++--- drivers/pci/remove.c | 2 ++ 6 files changed, 23 insertions(+), 11 deletions(-)
Alexander Duyck (1):
igb: Remove artificial restriction on RQDPC stat reading
Greg Kroah-Hartman (1):
Linux 3.0.65
Jan Beulich (1):
x86/xen: don't assume %ds is usable in xen_iret for 32-bit PVOPS.
Mel Gorman (1):
x86/mm: Check if PUD is large when validating a kernel address
Rafael J. Wysocki (1):
PCI/PM: Clean up PME state when removing a device
Greg KH
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 0 -SUBLEVEL = 64 +SUBLEVEL = 65 EXTRAVERSION = NAME = Sneaky Weasel
arch/x86/include/asm/pgtable.h +5 -0
@@ -142,6 +142,11 @@ static inline unsigned long pmd_pfn(pmd_t pmd)return (pmd_val (pmd) &PTE_PFN_MASK ) >>PAGE_SHIFT ; } +static inline unsigned long pud_pfn (pud_t pud) +{ +return (pud_val (pud) &PTE_PFN_MASK ) >>PAGE_SHIFT ; +} +#define pte_page (pte) pfn_to_page(pte_pfn(pte))static inline int pmd_large (pmd_t pte)
arch/x86/mm/init_64.c +3 -0
@@ -831,6 +831,9 @@ int kern_addr_valid(unsigned long addr)if (pud_none (*pud))return 0 ; +if (pud_large (*pud)) +return pfn_valid (pud_pfn (*pud)); + pmd =pmd_offset (pud, addr);if (pmd_none (*pmd))return 0 ;
arch/x86/xen/xen-asm_32.S +7 -7
@@ -88,11 +88,11 @@ ENTRY(xen_iret) */ #ifdef CONFIG_SMP GET_THREAD_INFO(%eax) - movl TI_cpu(%eax), %eax - movl __per_cpu_offset(,%eax,4), %eax - mov xen_vcpu(%eax), %eax + movl %ss:TI_cpu(%eax), %eax + movl %ss:__per_cpu_offset(,%eax,4), %eax + mov %ss:xen_vcpu(%eax), %eax #else - movl xen_vcpu, %eax + movl %ss:xen_vcpu, %eax #endif /* check IF state we're restoring */
@@ -105,11 +105,11 @@ ENTRY(xen_iret) * resuming the code, so we don't have to be worried about * being preempted to another CPU. */ - setz XEN_vcpu_info_mask(%eax) + setz %ss:XEN_vcpu_info_mask(%eax) xen_iret_start_crit: /* check for unmasked and pending */ - cmpw $0x0001, XEN_vcpu_info_pending(%eax) + cmpw $0x0001, %ss:XEN_vcpu_info_pending(%eax) /* * If there's something pending, mask events again so we can
@@ -117,7 +117,7 @@ xen_iret_start_crit: * touch XEN_vcpu_info_mask. */ jne 1f - movb $1, XEN_vcpu_info_mask(%eax) + movb $1, %ss:XEN_vcpu_info_mask(%eax) 1: popl %eax
drivers/net/igb/igb_main.c +5 -3
@@ -4521,11 +4521,13 @@ void igb_update_stats(struct igb_adapter *adapter, bytes =0 ; packets =0 ;for (i =0 ; i < adapter->num_rx_queues; i++) { -u32 rqdpc_tmp =rd32 (E1000_RQDPC (i)) &0x0FFF ; +u32 rqdpc =rd32 (E1000_RQDPC (i));struct igb_ring *ring = adapter->rx_ring[i]; - ring->rx_stats.drops += rqdpc_tmp; - net_stats->rx_fifo_errors += rqdpc_tmp; +if (rqdpc) { + ring->rx_stats.drops += rqdpc; + net_stats->rx_fifo_errors += rqdpc; + } do { start = u64_stats_fetch_begin_bh(&ring->rx_syncp);
drivers/pci/remove.c +2 -0
@@ -19,6 +19,8 @@ static void pci_free_resources(struct pci_dev *dev)static void pci_stop_dev (struct pci_dev *dev) { +pci_pme_active (dev, false); +if (dev->is_added) {pci_proc_detach_device (dev);pci_remove_sysfs_dev_files (dev);