Linux 2.6.38.7
Subsystems (39)
I'm announcing the release of the 2.6.38.7 kernel.
All users of the 2.6.38 kernel series must upgrade.
The updated 2.6.38.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.38.y.git
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.38.y.git;a=summarythanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/compressed/Makefile | 2 arch/arm/boot/compressed/vmlinux.lds.in | 1 arch/powerpc/kernel/ptrace.c | 12 ++ arch/x86/include/asm/apicdef.h | 1 arch/x86/include/asm/uv/uv_bau.h | 17 ++- arch/x86/kernel/cpu/amd.c | 4 arch/x86/kernel/cpu/mcheck/mce_amd.c | 1 arch/x86/kernel/cpu/mcheck/therm_throt.c | 12 +- arch/x86/kernel/ptrace.c | 36 ++++-- arch/x86/platform/uv/tlb_uv.c | 92 +++++++++++------ drivers/ata/libata-eh.c | 2 drivers/cdrom/cdrom.c | 6 - drivers/gpu/drm/i915/intel_display.c | 4 drivers/gpu/drm/i915/intel_dp.c | 17 ++- drivers/gpu/drm/i915/intel_lvds.c | 3 drivers/gpu/drm/radeon/evergreen.c | 17 +-- drivers/gpu/drm/radeon/evergreend.h | 5 drivers/gpu/drm/radeon/radeon_atombios.c | 18 ++- drivers/gpu/drm/radeon/radeon_kms.c | 3 drivers/media/video/cx88/cx88-input.c | 2 drivers/media/video/v4l2-device.c | 5 drivers/mmc/core/host.c | 9 - drivers/net/Kconfig | 8 + drivers/net/Makefile | 6 - drivers/net/can/sja1000/sja1000.c | 2 drivers/net/can/slcan.c | 4 drivers/net/ehea/ehea_ethtool.c | 21 ++- drivers/net/ehea/ehea_main.c | 6 - drivers/net/hydra.c | 14 +- drivers/net/ne-h8300.c | 16 +-- drivers/net/pch_gbe/pch_gbe_main.c | 23 +++- drivers/net/slip.c | 4 drivers/net/usb/ipheth.c | 14 +- drivers/net/vmxnet3/vmxnet3_drv.c | 10 + drivers/net/vmxnet3/vmxnet3_ethtool.c | 3 drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 1 drivers/net/wireless/iwlwifi/iwl-agn.c | 6 + drivers/net/wireless/iwlwifi/iwl-core.h | 2 drivers/net/wireless/iwlwifi/iwl-legacy.c | 7 + drivers/net/wireless/iwlwifi/iwl-rx.c | 8 + drivers/net/wireless/libertas/cmd.c | 6 - drivers/net/zorro8390.c | 12 +- drivers/platform/x86/thinkpad_acpi.c | 6 - drivers/rapidio/switches/idt_gen2.c | 9 + drivers/rapidio/switches/idtcps.c | 6 + drivers/rapidio/switches/tsi57x.c | 6 + drivers/rtc/rtc-s3c.c | 13 +- drivers/scsi/megaraid/megaraid_sas_base.c | 3 drivers/scsi/sd.c | 63 +++-------- fs/cifs/cifs_unicode.c | 49 ++++----- fs/cifs/cifs_unicode.h | 2 fs/cifs/connect.c | 130 ++++++++++++++---------- fs/cifs/sess.c | 19 --- fs/partitions/efi.c | 6 + fs/proc/task_mmu.c | 12 +- include/drm/radeon_drm.h | 1 include/linux/bootmem.h | 2 include/linux/mm.h | 24 ++++ include/linux/mmc/host.h | 1 include/linux/ptrace.h | 13 ++ include/linux/sched.h | 3 kernel/exit.c | 2 kernel/power/suspend.c | 4 kernel/power/user.c | 5 kernel/ptrace.c | 17 +++ kernel/time/clocksource.c | 4 kernel/time/tick-broadcast.c | 12 ++ mm/memory.c | 16 +-- mm/mmap.c | 11 +- mm/page_alloc.c | 7 - mm/shmem.c | 154 ++++++++++++++++------------- net/core/dev.c | 10 + net/dccp/options.c | 2 net/ipv4/ip_fragment.c | 31 ++--- sound/soc/codecs/ssm2602.c | 2 sound/soc/codecs/uda134x.c | 2 77 files changed, 684 insertions(+), 407 deletions(-)
Alex Deucher (3):
drm/radeon/kms: add pci id to acer travelmate quirk for 5730 drm/radeon/kms: fix gart setup on fusion parts (v2) backport drm/radeon/kms: fix extended lvds info parsing
Alex Williamson (1):
drm/i915/lvds: Only act on lid notify when the device is on
Alexandre Bounine (1):
rapidio: fix default routing initialization
Anton Blanchard (1):
ehea: Fix memory hotplug oops
Ben Dooks (1):
drivers/rtc/rtc-s3c.c: fixup wake support for rtc
Ben Hutchings (1):
ipheth: Properly distinguish length and alignment in URBs and skbs
Bjørn Mork (1):
megaraid_sas: Sanity check user supplied length before passing it to dma_alloc_coherent()
Borislav Petkov (2):
Revert "x86, AMD: Fix APIC timer erratum 400 affecting K8 Rev.A-E processors" x86, AMD: Fix ARAT feature setting again
Chris Ball (1):
Revert "mmc: fix a race between card-detect rescan and clock-gate work instances"
Chris Wilson (2):
drm/i915/dp: Be paranoid in case we disable a DP before it is attached drm/i915: Release object along create user fb error path
Cliff Wickman (1):
x86: Fix UV BAU for non-consecutive nasids
Dan Rosenberg (1):
dccp: handle invalid feature options length
Eric Dumazet (2):
net: ip_expire() must revalidate route
net: dev_close() should check IFF_UP
Frederic Weisbecker (3):
x86, hw_breakpoints: Fix racy access to ptrace breakpoints
ptrace: Prepare to fix racy accesses on task breakpoints
hw_breakpoints, powerpc: Fix CONFIG_HAVE_HW_BREAKPOINT off-case in ptrace_set_debugreg()
Geert Uytterhoeven (3):
ne-h8300: Fix regression caused during net_device_ops conversion
hydra: Fix regression caused during net_device_ops conversion
zorro8390: Fix regression caused during net_device_ops conversion
Greg Kroah-Hartman (1):
Linux 2.6.38.7
Hugh Dickins (7):
vm: fix vm_pgoff wrap in upward expansion
tmpfs: fix race between umount and swapoff
tmpfs: fix race between umount and writepage
tmpfs: fix race between swapoff and writepage
tmpfs: fix off-by-one in max_blocks checks
tmpfs: fix spurious ENOSPC when racing with unswap
tmpfs: fix highmem swapoff crash regression
James Bottomley (1):
Revert "[SCSI] Retrieve the Caching mode page"
Jeff Layton (8):
cifs: change bleft in decode_unicode_ssetup back to signed type
cifs: check for bytes_remaining going to zero in CIFS_SessSetup
cifs: sanitize length checking in coalesce_t2 (try #3)
cifs: refactor mid finding loop in cifs_demultiplex_thread
cifs: handle errors from coalesce_t2
cifs: add fallback in is_path_accessible for old servers
cifs: clean up various nits in unicode routines (try #2)
cifs: fix cifsConvertToUCS() for the mapchars case
John Stultz (1):
clocksource: Install completely before selecting
Julia Lawall (1):
x86, mce, AMD: Fix leaving freed data in a list
Kleber Sacilotto de Souza (1):
ehea: fix wrongly reported speed and port
Kurt Van Dijck (1):
can: fix SJA1000 dlc for RTR packets
Lars-Peter Clausen (1):
ASoC: SSM2602: Fix 'Mic Boost2' control
Laurent Pinchart (1):
v4l: Release module if subdev registration fails
Lawrence Rust (1):
Fix cx88 remote control input
Manoj Iyer (1):
thinkpad-acpi: module autoloading for newer Lenovo ThinkPads.
Marek Belisko (1):
ASoC: UDA134x: Remove POWER_OFF_ON_STANDBY define.
Matvejchikov Ilya (1):
NET: slip, fix ldisc->open retval
Mikulas Patocka (1):
Don't lock guardpage if the stack is growing up
Nicolas Pitre (1):
ARM: zImage: make sure the stack is 64-bit aligned
Oliver Hartkopp (1):
slcan: fix ldisc->open retval
Paul Fox (1):
libertas: fix cmdpendingq locking
Pavel Shilovsky (1):
CIFS: Fix memory over bound bug in cifs_parse_mount_options
Rafael J. Wysocki (3):
PM: Fix warning in pm_restrict_gfp_mask() during SNAPSHOT_S2RAM ioctl PM / Hibernate: Make snapshot_release() restore GFP mask PM / Hibernate: Fix ioctl SNAPSHOT_S2RAM
Roland Dreier (1):
vmxnet3: Consistently disable irqs when taking adapter->cmd_lock
Stanislaw Gruszka (2):
iwlwifi: add {ack, plpc}_check module parameters
iwlegacy: fix IBSS mode crashes
Tejun Heo (2):
libata: fix oops when LPM is used with PMP
cdrom: always check_disk_change() on open
Thomas Gleixner (1):
tick: Clear broadcast active bit when switching to oneshot
Thomas Jarosch (1):
vmxnet3: Fix inconsistent LRO state after initialization
Timo Warns (1):
Validate size of EFI GUID partition entries.
Tomoya (1):
pch_gbe: support ML7223 IOH
Toshiharu Okada (2):
PCH_GbE : Fixed the issue of collision detection PCH_GbE : Fixed the issue of checksum judgment
Yinghai Lu (1):
mm: use alloc_bootmem_node_nopanic() on really needed path
Youquan Song (1):
x86, apic: Fix spurious error interrupts triggering on all non-boot APs
Makefile +1 -1
@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 38 -EXTRAVERSION = .6 +EXTRAVERSION = .7 NAME = Flesh-Eating Bats with Fangs # *DOCUMENTATION*
arch/arm/boot/compressed/Makefile +1 -1
@@ -59,7 +59,7 @@ ZTEXTADDR := $(CONFIG_ZBOOT_ROM_TEXT) ZBSSADDR := $(CONFIG_ZBOOT_ROM_BSS) else ZTEXTADDR := 0 -ZBSSADDR := ALIGN(4) +ZBSSADDR := ALIGN(8) endif SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/
arch/arm/boot/compressed/vmlinux.lds.in +1 -0
@@ -57,6 +57,7 @@ SECTIONS .bss : { *(.bss) } _end = .; + . = ALIGN(8); /* the stack must be 64-bit aligned */ .stack : { *(.stack) } .stab 0 : { *(.stab) }
arch/powerpc/kernel/ptrace.c +11 -1
@@ -924,12 +924,16 @@ int ptrace_set_debugreg(struct task_struct *task, unsigned long addr,if (data && !(data &DABR_TRANSLATION ))return -EIO ;#ifdef CONFIG_HAVE_HW_BREAKPOINT +if (ptrace_get_breakpoints (task) <0 ) +return -ESRCH ; + bp = thread->ptrace_bps[0 ];if ((!data) || !(data & (DABR_DATA_WRITE |DABR_DATA_READ ))) {if (bp) {unregister_hw_breakpoint (bp); thread->ptrace_bps[0 ] =NULL ; } +ptrace_put_breakpoints (task);return 0 ; }if (bp) {
@@ -939,9 +943,12 @@ int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, (DABR_DATA_WRITE |DABR_DATA_READ ), &attr.bp_type); ret =modify_user_hw_breakpoint (bp, &attr); -if (ret) +if (ret) { +ptrace_put_breakpoints (task);return ret; + } thread->ptrace_bps[0 ] = bp; +ptrace_put_breakpoints (task); thread->dabr = data;return 0 ; }
@@ -956,9 +963,12 @@ int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, ptrace_triggered, task);if (IS_ERR (bp)) { thread->ptrace_bps[0 ] =NULL ; +ptrace_put_breakpoints (task);return PTR_ERR (bp); } +ptrace_put_breakpoints (task); +#endif /* CONFIG_HAVE_HW_BREAKPOINT */ /* Move contents to the DABR register */
arch/x86/include/asm/apicdef.h +1 -0
@@ -78,6 +78,7 @@#define APIC_DEST_LOGICAL 0x00800#define APIC_DEST_PHYSICAL 0x00000#define APIC_DM_FIXED 0x00000 +#define APIC_DM_FIXED_MASK 0x00700#define APIC_DM_LOWEST 0x00100#define APIC_DM_SMI 0x00200#define APIC_DM_REMRD 0x00300
arch/x86/include/asm/uv/uv_bau.h +13 -4
@@ -94,6 +94,8 @@/* after this # consecutive successes, bump up the throttle if it was lowered */ #define COMPLETE_THRESHOLD 5 +#define UV_LB_SUBNODEID 0x10 +/* * number of entries in the destination side payload queue */
@@ -124,7 +126,7 @@* The distribution specification (32 bytes) is interpreted as a 256-bit * distribution vector. Adjacent bits correspond to consecutive even numbered * nodeIDs. The result of adding the index of a given bit to the 15-bit -* 'base_dest_nodeid' field of the header corresponds to the +* 'base_dest_nasid' field of the header corresponds to the * destination nodeID associated with that specified bit. */ struct bau_target_uvhubmask {
@@ -176,7 +178,7 @@ struct bau_msg_payload {struct bau_msg_header {unsigned int dest_subnodeid:6 ;/* must be 0x10, for the LB */ /* bits 5:0 */ -unsigned int base_dest_nodeid:15 ;/* nasid of the */ +unsigned int base_dest_nasid:15 ;/* nasid of the */ /* bits 20:6 */ /* first bit in uvhub map */ unsigned int command:8 ;/* message type */ /* bits 28:21 */
@@ -378,6 +380,10 @@ struct ptc_stats {unsigned long d_rcanceled;/* number of messages canceled by resets */ }; +struct hub_and_pnode { +short uvhub; +short pnode; +};/* * one per-cpu; to locate the software tables */
@@ -399,10 +405,12 @@ struct bau_control {int baudisabled;int set_bau_off;short cpu; +short osnode;short uvhub_cpu;short uvhub;short cpus_in_socket;short cpus_in_uvhub; +short partition_base_pnode;unsigned short message_number;unsigned short uvhub_quiesce;short socket_acknowledge_count[DEST_Q_SIZE ];
@@ -422,15 +430,16 @@ struct bau_control {int congested_period;cycles_t period_time;long period_requests; +struct hub_and_pnode *target_hub_and_pnode; };static inline int bau_uvhub_isset (int uvhub,struct bau_target_uvhubmask *dstp) {return constant_test_bit (uvhub, &dstp->bits[0 ]); } -static inline void bau_uvhub_set (int uvhub,struct bau_target_uvhubmask *dstp) +static inline void bau_uvhub_set (int pnode,struct bau_target_uvhubmask *dstp) { -__set_bit (uvhub, &dstp->bits[0 ]); +__set_bit (pnode, &dstp->bits[0 ]); }static inline void bau_uvhubs_clear (struct bau_target_uvhubmask *dstp,int nbits)
arch/x86/kernel/cpu/amd.c +2 -2
@@ -596,7 +596,7 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)#endif /* As a rule processors have APIC timer running in deep C states */ -if (c->x86 >=0xf && !cpu_has_amd_erratum (amd_erratum_400)) +if (c->x86 >0xf && !cpu_has_amd_erratum (amd_erratum_400))set_cpu_cap (c,X86_FEATURE_ARAT );/*
@@ -681,7 +681,7 @@ cpu_dev_register(amd_cpu_dev);*/ const int amd_erratum_400[] = -AMD_OSVW_ERRATUM (1 ,AMD_MODEL_RANGE (0x0f ,0x4 ,0x2 ,0xff ,0xf ), +AMD_OSVW_ERRATUM (1 ,AMD_MODEL_RANGE (0xf ,0x41 ,0x2 ,0xff ,0xf ),AMD_MODEL_RANGE (0x10 ,0x2 ,0x1 ,0xff ,0xf ));EXPORT_SYMBOL_GPL (amd_erratum_400);
arch/x86/kernel/cpu/mcheck/mce_amd.c +1 -0
@@ -509,6 +509,7 @@ recurse: out_free:if (b) {kobject_put (&b->kobj); +list_del (&b->miscj);kfree (b); }return err;
arch/x86/kernel/cpu/mcheck/therm_throt.c +7 -5
@@ -446,18 +446,20 @@ void intel_init_thermal(struct cpuinfo_x86 *c)*/ rdmsr (MSR_IA32_MISC_ENABLE , l, h); + h = lvtthmr_init;/* * The initial value of thermal LVT entries on all APs always reads * 0x10000 because APs are woken up by BSP issuing INIT-SIPI-SIPI * sequence to them and LVT registers are reset to 0s except for * the mask bits which are set to 1s when APs receive INIT IPI. -* Always restore the value that BIOS has programmed on AP based on -* BSP's info we saved since BIOS is always setting the same value -* for all threads/cores +* If BIOS takes over the thermal interrupt and sets its interrupt +* delivery mode to SMI (not fixed), it restores the value that the +* BIOS has programmed on AP based on BSP's info we saved since BIOS +* is always setting the same value for all threads/cores. */ -apic_write (APIC_LVTTHMR , lvtthmr_init); +if ((h &APIC_DM_FIXED_MASK ) !=APIC_DM_FIXED ) +apic_write (APIC_LVTTHMR , lvtthmr_init); - h = lvtthmr_init;if ((l &MSR_IA32_MISC_ENABLE_TM1 ) && (h &APIC_DM_SMI )) { printk(KERN_DEBUG
arch/x86/kernel/ptrace.c +26 -10
@@ -608,6 +608,9 @@ static int ptrace_write_dr7(struct task_struct *tsk, unsigned long data)unsigned len, type;struct perf_event *bp; +if (ptrace_get_breakpoints (tsk) <0 ) +return -ESRCH ; + data &= ~DR_CONTROL_RESERVED ; old_dr7 =ptrace_get_dr7 (thread->ptrace_bps); restore:
@@ -655,6 +658,9 @@ restore: } goto restore; } + +ptrace_put_breakpoints (tsk); +return ((orig_ret <0 ) ? orig_ret : rc); }
@@ -668,10 +674,17 @@ static unsigned long ptrace_get_debugreg(struct task_struct *tsk, int n)if (n <HBP_NUM ) {struct perf_event *bp; + +if (ptrace_get_breakpoints (tsk) <0 ) +return -ESRCH ; + bp = thread->ptrace_bps[n];if (!bp) -return 0 ; - val = bp->hw.info.address; + val =0 ; +else + val = bp->hw.info.address; + +ptrace_put_breakpoints (tsk); }else if (n ==6 ) { val = thread->debugreg6; }else if (n ==7 ) {
@@ -686,6 +699,10 @@ static int ptrace_set_breakpoint_addr(struct task_struct *tsk, int nr,struct perf_event *bp;struct thread_struct *t = &tsk->thread;struct perf_event_attr attr; +int err =0 ; + +if (ptrace_get_breakpoints (tsk) <0 ) +return -ESRCH ;if (!t->ptrace_bps[nr]) {ptrace_breakpoint_init (&attr);
@@ -709,24 +726,23 @@ static int ptrace_set_breakpoint_addr(struct task_struct *tsk, int nr,* writing for the user. And anyway this is the previous * behaviour. */ -if (IS_ERR (bp)) -return PTR_ERR (bp); +if (IS_ERR (bp)) { + err =PTR_ERR (bp); + goto put; + } t->ptrace_bps[nr] = bp; }else { -int err; - bp = t->ptrace_bps[nr]; attr = bp->attr; attr.bp_addr = addr; err =modify_user_hw_breakpoint (bp, &attr); -if (err) -return err; } - -return 0 ; +put: +ptrace_put_breakpoints (tsk); +return err; }/*
arch/x86/platform/uv/tlb_uv.c +63 -29
198 lines not on this page · raw message
drivers/ata/libata-eh.c +1 -1
@@ -3276,7 +3276,7 @@ static int ata_eh_set_lpm(struct ata_link *link, enum ata_lpm_policy policy,struct ata_eh_context *ehc = &link->eh_context;struct ata_device *dev, *link_dev =NULL , *lpm_dev =NULL ;enum ata_lpm_policy old_policy = link->lpm_policy; -bool no_dipm = ap->flags &ATA_FLAG_NO_DIPM ; +bool no_dipm = link->ap->flags &ATA_FLAG_NO_DIPM ;unsigned int hints =ATA_LPM_EMPTY |ATA_LPM_HIPM ;unsigned int err_mask;int rc;
drivers/cdrom/cdrom.c +3 -3
@@ -986,6 +986,9 @@ int cdrom_open(struct cdrom_device_info *cdi, struct block_device *bdev, fmode_tcdinfo (CD_OPEN ,"entering cdrom_open\n" ); +/* open is event synchronization point, check events first */ +check_disk_change (bdev); +/* if this was a O_NONBLOCK open and we should honor the flags, * do a quick open without drive/disc integrity checks. */ cdi->use_count++;
@@ -1012,9 +1015,6 @@ int cdrom_open(struct cdrom_device_info *cdi, struct block_device *bdev, fmode_tcdinfo (CD_OPEN ,"Use count for \"/dev/%s\" now %d\n" , cdi->name, cdi->use_count); -/* Do this on open. Don't wait for mount, because they might -not be mounting, but opening with O_NONBLOCK */ -check_disk_change (bdev);return 0 ; err_release:if (CDROM_CAN (CDC_LOCK ) && cdi->options &CDO_LOCK ) {
drivers/gpu/drm/i915/intel_display.c +3 -1
@@ -6005,8 +6005,10 @@ intel_user_framebuffer_create(struct drm_device *dev,return ERR_PTR (-ENOENT ); intel_fb =kzalloc (sizeof (*intel_fb),GFP_KERNEL ); -if (!intel_fb) +if (!intel_fb) { +drm_gem_object_unreference_unlocked (&obj->base);return ERR_PTR (-ENOMEM ); + } ret =intel_framebuffer_init (dev, intel_fb, mode_cmd, obj);if (ret) {
drivers/gpu/drm/i915/intel_dp.c +15 -2
@@ -1455,7 +1455,8 @@ intel_dp_link_down(struct intel_dp *intel_dp)if (!HAS_PCH_CPT (dev) &&I915_READ (intel_dp->output_reg) &DP_PIPEB_SELECT ) { -struct intel_crtc *intel_crtc =to_intel_crtc (intel_dp->base.base.crtc); +struct drm_crtc *crtc = intel_dp->base.base.crtc; +/* Hardware workaround: leaving our transcoder select * set to transcoder B while it's off will prevent the * corresponding HDMI output on transcoder A.
@@ -1470,7 +1471,19 @@ intel_dp_link_down(struct intel_dp *intel_dp)/* Changes to enable or select take place the vblank * after being written. */ -intel_wait_for_vblank (dev, intel_crtc->pipe); +if (crtc ==NULL ) { +/* We can arrive here never having been attached +* to a CRTC, for instance, due to inheriting +* random state from the BIOS. +* +* If the pipe is not running, play safe and +* wait for the clocks to stabilise before +* continuing. +*/ +POSTING_READ (intel_dp->output_reg); +msleep (50 ); + }else +intel_wait_for_vblank (dev,to_intel_crtc (crtc)->pipe); }I915_WRITE (intel_dp->output_reg,DP & ~DP_PORT_EN );
drivers/gpu/drm/i915/intel_lvds.c +3 -0
@@ -540,6 +540,9 @@ static int intel_lid_notify(struct notifier_block *nb, unsigned long val,struct drm_device *dev = dev_priv->dev;struct drm_connector *connector = dev_priv->int_lvds_connector; +if (dev->switch_power_state !=DRM_SWITCH_POWER_ON ) +return NOTIFY_OK ; +/* * check and update the status of LVDS connector after receiving * the LID nofication event.
drivers/gpu/drm/radeon/evergreen.c +9 -8
@@ -869,9 +869,15 @@ int evergreen_pcie_gart_enable(struct radeon_device *rdev)SYSTEM_ACCESS_MODE_NOT_IN_SYS |SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU |EFFECTIVE_L1_TLB_SIZE (5 ) |EFFECTIVE_L1_QUEUE_SIZE (5 ); -WREG32 (MC_VM_MD_L1_TLB0_CNTL , tmp); -WREG32 (MC_VM_MD_L1_TLB1_CNTL , tmp); -WREG32 (MC_VM_MD_L1_TLB2_CNTL , tmp); +if (rdev->flags &RADEON_IS_IGP ) { +WREG32 (FUS_MC_VM_MD_L1_TLB0_CNTL , tmp); +WREG32 (FUS_MC_VM_MD_L1_TLB1_CNTL , tmp); +WREG32 (FUS_MC_VM_MD_L1_TLB2_CNTL , tmp); + }else { +WREG32 (MC_VM_MD_L1_TLB0_CNTL , tmp); +WREG32 (MC_VM_MD_L1_TLB1_CNTL , tmp); +WREG32 (MC_VM_MD_L1_TLB2_CNTL , tmp); + }WREG32 (MC_VM_MB_L1_TLB0_CNTL , tmp);WREG32 (MC_VM_MB_L1_TLB1_CNTL , tmp);WREG32 (MC_VM_MB_L1_TLB2_CNTL , tmp);
@@ -2930,11 +2936,6 @@ static int evergreen_startup(struct radeon_device *rdev) rdev->asic->copy =NULL ;dev_warn (rdev->dev,"failed blitter (%d) falling back to memcpy\n" , r); } -/* XXX: ontario has problems blitting to gart at the moment */ -if (rdev->family ==CHIP_PALM ) { - rdev->asic->copy =NULL ; -radeon_ttm_set_active_vram_size (rdev, rdev->mc.visible_vram_size); - }/* allocate wb buffer */ r =radeon_wb_init (rdev);
drivers/gpu/drm/radeon/evergreend.h +5 -0
@@ -221,6 +221,11 @@#define MC_VM_MD_L1_TLB0_CNTL 0x2654#define MC_VM_MD_L1_TLB1_CNTL 0x2658#define MC_VM_MD_L1_TLB2_CNTL 0x265C + +#define FUS_MC_VM_MD_L1_TLB0_CNTL 0x265C +#define FUS_MC_VM_MD_L1_TLB1_CNTL 0x2660 +#define FUS_MC_VM_MD_L1_TLB2_CNTL 0x2664 +#define MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR 0x203C#define MC_VM_SYSTEM_APERTURE_HIGH_ADDR 0x2038#define MC_VM_SYSTEM_APERTURE_LOW_ADDR 0x2034
drivers/gpu/drm/radeon/radeon_atombios.c +13 -5
@@ -431,7 +431,7 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev, } } -/* Acer laptop (Acer TravelMate 5730G) has an HDMI port +/* Acer laptop (Acer TravelMate 5730/5730G) has an HDMI port * on the laptop and a DVI port on the docking station and * both share the same encoder, hpd pin, and ddc line. * So while the bios table is technically correct,
@@ -440,7 +440,7 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,* with different crtcs which isn't possible on the hardware * side and leaves no crtcs for LVDS or VGA. */ -if ((dev->pdev->device ==0x95c4 ) && +if (((dev->pdev->device ==0x95c4 ) || (dev->pdev->device ==0x9591 )) && (dev->pdev->subsystem_vendor ==0x1025 ) && (dev->pdev->subsystem_device ==0x013c )) { if ((*connector_type == DRM_MODE_CONNECTOR_DVII) &&
@@ -1574,9 +1574,17 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(structATOM_FAKE_EDID_PATCH_RECORD *fake_edid_record;ATOM_PANEL_RESOLUTION_PATCH_RECORD *panel_res_record;bool bad_record = false; -u8 *record = (u8 *)(mode_info->atom_context->bios + - data_offset + -le16_to_cpu (lvds_info->info.usModePatchTableOffset)); +u8 *record; + +if ((frev ==1 ) && (crev <2 )) +/* absolute */ + record = (u8 *)(mode_info->atom_context->bios + +le16_to_cpu (lvds_info->info.usModePatchTableOffset)); +else +/* relative */ + record = (u8 *)(mode_info->atom_context->bios + + data_offset + +le16_to_cpu (lvds_info->info.usModePatchTableOffset));while (*record !=ATOM_RECORD_END_TYPE ) {switch (*record) {case LCD_MODE_PATCH_RECORD_MODE_TYPE :
drivers/gpu/drm/radeon/radeon_kms.c +3 -0
@@ -205,6 +205,9 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)/* return clock value in KHz */ value = rdev->clock.spll.reference_freq *10 ;break ; +case RADEON_INFO_FUSION_GART_WORKING : + value =1 ; +break ;default :DRM_DEBUG_KMS ("Invalid request %d\n" , info->request);return -EINVAL ;
drivers/media/video/cx88/cx88-input.c +1 -1
@@ -523,7 +523,7 @@ void cx88_ir_irq(struct cx88_core *core)for (todo =32 ; todo >0 ; todo -= bits) { ev.pulse = samples &0x80000000 ? false : true; bits =min (todo,32U -fls (ev.pulse ? samples : ~samples)); - ev.duration = (bits *NSEC_PER_SEC ) / (1000 * ir_samplerate); + ev.duration = (bits * (NSEC_PER_SEC /1000 )) / ir_samplerate;ir_raw_event_store_with_filter (ir->dev, &ev); samples <<= bits; }
drivers/media/video/v4l2-device.c +4 -1
@@ -131,14 +131,17 @@ int v4l2_device_register_subdev(struct v4l2_device *v4l2_dev, sd->v4l2_dev = v4l2_dev;if (sd->internal_ops && sd->internal_ops->registered) { err = sd->internal_ops->registered (sd); -if (err) +if (err) { +module_put (sd->owner);return err; + } }/* This just returns 0 if either of the two args is NULL */ err =v4l2_ctrl_add_handler (v4l2_dev->ctrl_handler, sd->ctrl_handler);if (err) {if (sd->internal_ops && sd->internal_ops->unregistered) sd->internal_ops->unregistered (sd); +module_put (sd->owner);return err; }spin_lock (&v4l2_dev->lock);
drivers/mmc/core/host.c +5 -4
@@ -94,7 +94,7 @@ static void mmc_host_clk_gate_delayed(struct mmc_host *host)spin_unlock_irqrestore (&host->clk_lock, flags);return ; } -mmc_claim_host (host); +mutex_lock (&host->clk_gate_mutex);spin_lock_irqsave (&host->clk_lock, flags);if (!host->clk_requests) {spin_unlock_irqrestore (&host->clk_lock, flags);
@@ -104,7 +104,7 @@ static void mmc_host_clk_gate_delayed(struct mmc_host *host)pr_debug ("%s: gated MCI clock\n" ,mmc_hostname (host)); }spin_unlock_irqrestore (&host->clk_lock, flags); -mmc_release_host (host); +mutex_unlock (&host->clk_gate_mutex); }/*
@@ -130,7 +130,7 @@ void mmc_host_clk_ungate(struct mmc_host *host) {unsigned long flags; -mmc_claim_host (host); +mutex_lock (&host->clk_gate_mutex);spin_lock_irqsave (&host->clk_lock, flags);if (host->clk_gated) {spin_unlock_irqrestore (&host->clk_lock, flags);
@@ -140,7 +140,7 @@ void mmc_host_clk_ungate(struct mmc_host *host) } host->clk_requests++;spin_unlock_irqrestore (&host->clk_lock, flags); -mmc_release_host (host); +mutex_unlock (&host->clk_gate_mutex); }/**
@@ -218,6 +218,7 @@ static inline void mmc_host_clk_init(struct mmc_host *host) host->clk_gated = false;INIT_WORK (&host->clk_gate_work, mmc_host_clk_gate_work);spin_lock_init (&host->clk_lock); +mutex_init (&host->clk_gate_mutex); }/**
drivers/net/Kconfig +7 -1
@@ -2533,7 +2533,7 @@ config S6GMAC source "drivers/net/stmmac/Kconfig" config PCH_GBE - tristate "PCH Gigabit Ethernet" + tristate "Intel EG20T PCH / OKI SEMICONDUCTOR ML7223 IOH GbE" depends on PCI select MII ---help---
@@ -2545,6 +2545,12 @@ config PCH_GBE to Gigabit Ethernet. This driver enables Gigabit Ethernet function. + This driver also can be used for OKI SEMICONDUCTOR IOH(Input/ + Output Hub), ML7223. + ML7223 IOH is for MP(Media Phone) use. + ML7223 is companion chip for Intel Atom E6xx series. + ML7223 is completely compatible for Intel EG20T PCH. + endif # NETDEV_1000 #
drivers/net/Makefile +3 -3
@@ -144,7 +144,7 @@ obj-$(CONFIG_NE3210) += ne3210.o 8390.o obj-$(CONFIG_SB1250_MAC) += sb1250-mac.o obj-$(CONFIG_B44) += b44.o obj-$(CONFIG_FORCEDETH) += forcedeth.o -obj-$(CONFIG_NE_H8300) += ne-h8300.o 8390.o +obj-$(CONFIG_NE_H8300) += ne-h8300.o obj-$(CONFIG_AX88796) += ax88796.o obj-$(CONFIG_BCM63XX_ENET) += bcm63xx_enet.o
@@ -217,7 +217,7 @@ obj-$(CONFIG_SC92031) += sc92031.o obj-$(CONFIG_LP486E) += lp486e.o obj-$(CONFIG_ETH16I) += eth16i.o -obj-$(CONFIG_ZORRO8390) += zorro8390.o 8390.o +obj-$(CONFIG_ZORRO8390) += zorro8390.o obj-$(CONFIG_HPLANCE) += hplance.o 7990.o obj-$(CONFIG_MVME147_NET) += mvme147.o 7990.o obj-$(CONFIG_EQUALIZER) += eql.o
@@ -229,7 +229,7 @@ obj-$(CONFIG_SGI_IOC3_ETH) += ioc3-eth.o obj-$(CONFIG_DECLANCE) += declance.o obj-$(CONFIG_ATARILANCE) += atarilance.o obj-$(CONFIG_A2065) += a2065.o -obj-$(CONFIG_HYDRA) += hydra.o 8390.o +obj-$(CONFIG_HYDRA) += hydra.o obj-$(CONFIG_ARIADNE) += ariadne.o obj-$(CONFIG_CS89x0) += cs89x0.o obj-$(CONFIG_MACSONIC) += macsonic.o
drivers/net/can/sja1000/sja1000.c +1 -1
@@ -346,10 +346,10 @@ static void sja1000_rx(struct net_device *dev) | (priv->read_reg(priv, REG_ID2) >> 5); } + cf->can_dlc =get_can_dlc (fi &0x0F );if (fi &FI_RTR ) { id |=CAN_RTR_FLAG ; }else { - cf->can_dlc =get_can_dlc (fi &0x0F );for (i =0 ; i < cf->can_dlc; i++) cf->data[i] = priv->read_reg (priv, dreg++); }
drivers/net/can/slcan.c +3 -1
@@ -583,7 +583,9 @@ static int slcan_open(struct tty_struct *tty)/* Done. We have linked the TTY line to a channel. */ rtnl_unlock (); tty->receive_room =65536 ;/* We don't flow control */ -return sl->dev->base_addr; + +/* TTY layer expects 0 on success */ +return 0 ; err_free_chan: sl->tty =NULL ;
drivers/net/ehea/ehea_ethtool.c +13 -8
@@ -55,15 +55,20 @@ static int ehea_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) cmd->duplex =-1 ; } - cmd->supported = (SUPPORTED_10000baseT_Full | SUPPORTED_1000baseT_Full - | SUPPORTED_100baseT_Full | SUPPORTED_100baseT_Half - | SUPPORTED_10baseT_Full | SUPPORTED_10baseT_Half - | SUPPORTED_Autoneg |SUPPORTED_FIBRE ); - - cmd->advertising = (ADVERTISED_10000baseT_Full | ADVERTISED_Autoneg - |ADVERTISED_FIBRE ); +if (cmd->speed ==SPEED_10000 ) { + cmd->supported = (SUPPORTED_10000baseT_Full |SUPPORTED_FIBRE ); + cmd->advertising = (ADVERTISED_10000baseT_Full |ADVERTISED_FIBRE ); + cmd->port =PORT_FIBRE ; + }else { + cmd->supported = (SUPPORTED_1000baseT_Full | SUPPORTED_100baseT_Full + | SUPPORTED_100baseT_Half | SUPPORTED_10baseT_Full + | SUPPORTED_10baseT_Half | SUPPORTED_Autoneg + |SUPPORTED_TP ); + cmd->advertising = (ADVERTISED_1000baseT_Full | ADVERTISED_Autoneg + |ADVERTISED_TP ); + cmd->port =PORT_TP ; + } - cmd->port =PORT_FIBRE ; cmd->autoneg = port->autoneg ==1 ?AUTONEG_ENABLE :AUTONEG_DISABLE ;return 0 ;
drivers/net/ehea/ehea_main.c +3 -3
@@ -2688,9 +2688,6 @@ static int ehea_open(struct net_device *dev)netif_start_queue (dev); } -init_waitqueue_head (&port->swqe_avail_wq); -init_waitqueue_head (&port->restart_wq); -mutex_unlock (&port->port_lock);return ret;
@@ -3273,6 +3270,9 @@ struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter,INIT_WORK (&port->reset_task, ehea_reset_port); +init_waitqueue_head (&port->swqe_avail_wq); +init_waitqueue_head (&port->restart_wq); + ret =register_netdev (dev);if (ret) {pr_err ("register_netdev failed. ret=%d\n" , ret);
drivers/net/hydra.c +7 -7
@@ -98,15 +98,15 @@ static const struct net_device_ops hydra_netdev_ops = { .ndo_open = hydra_open, .ndo_stop = hydra_close, - .ndo_start_xmit = ei_start_xmit, - .ndo_tx_timeout = ei_tx_timeout, - .ndo_get_stats = ei_get_stats, - .ndo_set_multicast_list = ei_set_multicast_list, + .ndo_start_xmit = __ei_start_xmit, + .ndo_tx_timeout = __ei_tx_timeout, + .ndo_get_stats = __ei_get_stats, + .ndo_set_multicast_list = __ei_set_multicast_list, .ndo_validate_addr = eth_validate_addr, - .ndo_set_mac_address = eth_mac_addr, + .ndo_set_mac_address = eth_mac_addr, .ndo_change_mtu = eth_change_mtu, #ifdef CONFIG_NET_POLL_CONTROLLER - .ndo_poll_controller = ei_poll, + .ndo_poll_controller = __ei_poll, #endif };
@@ -125,7 +125,7 @@ static int __devinit hydra_init(struct zorro_dev *z)0x10 ,0x12 ,0x14 ,0x16 ,0x18 ,0x1a ,0x1c ,0x1e , }; - dev =alloc_ei_netdev (); + dev =____alloc_ei_netdev (0 );if (!dev)return -ENOMEM ;
drivers/net/ne-h8300.c +8 -8
@@ -167,7 +167,7 @@ static void cleanup_card(struct net_device *dev)#ifndef MODULE struct net_device *__init ne_probe (int unit) { -struct net_device *dev =alloc_ei_netdev (); +struct net_device *dev =____alloc_ei_netdev (0 );int err;if (!dev)
@@ -197,15 +197,15 @@ static const struct net_device_ops ne_netdev_ops = { .ndo_open = ne_open, .ndo_stop = ne_close, - .ndo_start_xmit = ei_start_xmit, - .ndo_tx_timeout = ei_tx_timeout, - .ndo_get_stats = ei_get_stats, - .ndo_set_multicast_list = ei_set_multicast_list, + .ndo_start_xmit = __ei_start_xmit, + .ndo_tx_timeout = __ei_tx_timeout, + .ndo_get_stats = __ei_get_stats, + .ndo_set_multicast_list = __ei_set_multicast_list, .ndo_validate_addr = eth_validate_addr, - .ndo_set_mac_address = eth_mac_addr, + .ndo_set_mac_address = eth_mac_addr, .ndo_change_mtu = eth_change_mtu, #ifdef CONFIG_NET_POLL_CONTROLLER - .ndo_poll_controller = ei_poll, + .ndo_poll_controller = __ei_poll, #endif };
@@ -637,7 +637,7 @@ int init_module(void)int err;for (this_dev =0 ; this_dev <MAX_NE_CARDS ; this_dev++) { -struct net_device *dev =alloc_ei_netdev (); +struct net_device *dev =____alloc_ei_netdev (0 );if (!dev)break ;if (io[this_dev]) {
drivers/net/pch_gbe/pch_gbe_main.c +16 -7
@@ -34,6 +34,10 @@ const char pch_driver_version[] = DRV_VERSION;#define PCH_GBE_COPYBREAK_DEFAULT 256#define PCH_GBE_PCI_BAR 1 +/* Macros for ML7223 */ +#define PCI_VENDOR_ID_ROHM 0x10db +#define PCI_DEVICE_ID_ROHM_ML7223_GBE 0x8013 +#define PCH_GBE_TX_WEIGHT 64#define PCH_GBE_RX_WEIGHT 64#define PCH_GBE_RX_BUFFER_WRITE 16
@@ -43,8 +47,7 @@ const char pch_driver_version[] = DRV_VERSION;#define PCH_GBE_MAC_RGMII_CTRL_SETTING ( \ PCH_GBE_CHIP_TYPE_INTERNAL | \ - PCH_GBE_RGMII_MODE_RGMII | \ - PCH_GBE_CRS_SEL \ + PCH_GBE_RGMII_MODE_RGMII \ )/* Ethertype field values */
@@ -1494,12 +1497,11 @@ pch_gbe_clean_rx(struct pch_gbe_adapter *adapter,/* Write meta date of skb */ skb_put (skb, length); skb->protocol =eth_type_trans (skb, netdev); -if ((tcp_ip_status &PCH_GBE_RXD_ACC_STAT_TCPIPOK ) == -PCH_GBE_RXD_ACC_STAT_TCPIPOK ) { - skb->ip_summed =CHECKSUM_UNNECESSARY ; - }else { +if (tcp_ip_status &PCH_GBE_RXD_ACC_STAT_TCPIPOK ) skb->ip_summed =CHECKSUM_NONE ; - } +else + skb->ip_summed =CHECKSUM_UNNECESSARY ; +napi_gro_receive (&adapter->napi, skb); (*work_done)++; pr_debug("Receive skb->ip_summed: %d length: %d\n",
@@ -2420,6 +2422,13 @@ static DEFINE_PCI_DEVICE_TABLE(pch_gbe_pcidev_id) = { .class = (PCI_CLASS_NETWORK_ETHERNET << 8), .class_mask = (0xFFFF00 ) }, + {.vendor = PCI_VENDOR_ID_ROHM, + .device = PCI_DEVICE_ID_ROHM_ML7223_GBE, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .class = (PCI_CLASS_NETWORK_ETHERNET << 8), + .class_mask = (0xFFFF00 ) + },/* required last entry */ {0} };
drivers/net/slip.c +3 -1
@@ -853,7 +853,9 @@ static int slip_open(struct tty_struct *tty)/* Done. We have linked the TTY line to a channel. */ rtnl_unlock (); tty->receive_room =65536 ;/* We don't flow control */ -return sl->dev->base_addr; + +/* TTY layer expects 0 on success */ +return 0 ; err_free_bufs:sl_free_bufs (sl);
drivers/net/usb/ipheth.c +9 -5
@@ -65,6 +65,7 @@#define IPHETH_USBINTF_PROTO 1#define IPHETH_BUF_SIZE 1516 +#define IPHETH_IP_ALIGN 2/* padding at front of URB */ #define IPHETH_TX_TIMEOUT (5 * HZ)#define IPHETH_INTFNUM 2
@@ -202,18 +203,21 @@ static void ipheth_rcvbulk_callback(struct urb *urb)return ; } - len = urb->actual_length; - buf = urb->transfer_buffer; +if (urb->actual_length <=IPHETH_IP_ALIGN ) { + dev->net->stats.rx_length_errors++; +return ; + } + len = urb->actual_length -IPHETH_IP_ALIGN ; + buf = urb->transfer_buffer +IPHETH_IP_ALIGN ; - skb =dev_alloc_skb (NET_IP_ALIGN + len); + skb =dev_alloc_skb (len);if (!skb) {err ("%s: dev_alloc_skb: -ENOMEM" , __func__); dev->net->stats.rx_dropped++;return ; } -skb_reserve (skb,NET_IP_ALIGN ); -memcpy (skb_put (skb, len), buf +NET_IP_ALIGN , len -NET_IP_ALIGN ); +memcpy (skb_put (skb, len), buf, len); skb->dev = dev->net; skb->protocol =eth_type_trans (skb, dev->net);
drivers/net/vmxnet3/vmxnet3_drv.c +6 -4
@@ -178,6 +178,7 @@ static void vmxnet3_process_events(struct vmxnet3_adapter *adapter) {int i; +unsigned long flags;u32 events =le32_to_cpu (adapter->shared->ecr);if (!events)return ;
@@ -190,10 +191,10 @@ vmxnet3_process_events(struct vmxnet3_adapter *adapter)/* Check if there is an error on xmit/recv queues */ if (events & (VMXNET3_ECR_TQERR |VMXNET3_ECR_RQERR )) { -spin_lock (&adapter->cmd_lock); +spin_lock_irqsave (&adapter->cmd_lock, flags);VMXNET3_WRITE_BAR1_REG (adapter,VMXNET3_REG_CMD ,VMXNET3_CMD_GET_QUEUE_STATUS ); -spin_unlock (&adapter->cmd_lock); +spin_unlock_irqrestore (&adapter->cmd_lock, flags);for (i =0 ; i < adapter->num_tx_queues; i++)if (adapter->tqd_start[i].status.stopped)
@@ -2733,13 +2734,14 @@ static void vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter) {u32 cfg; +unsigned long flags;/* intr settings */ -spin_lock (&adapter->cmd_lock); +spin_lock_irqsave (&adapter->cmd_lock, flags);VMXNET3_WRITE_BAR1_REG (adapter,VMXNET3_REG_CMD ,VMXNET3_CMD_GET_CONF_INTR ); cfg =VMXNET3_READ_BAR1_REG (adapter,VMXNET3_REG_CMD ); -spin_unlock (&adapter->cmd_lock); +spin_unlock_irqrestore (&adapter->cmd_lock, flags); adapter->intr.type = cfg &0x3 ; adapter->intr.mask_mode = (cfg >>2 ) &0x3 ;
drivers/net/vmxnet3/vmxnet3_ethtool.c +3 -0
@@ -311,6 +311,9 @@ vmxnet3_set_flags(struct net_device *netdev, u32 data)/* toggle the LRO feature*/ netdev->features ^=NETIF_F_LRO ; +/* Update private LRO flag */ + adapter->lro = lro_requested; +/* update harware LRO capability accordingly */ if (lro_requested) adapter->shared->devRead.misc.uptFeatures |=
drivers/net/wireless/iwlwifi/iwl-agn-lib.c +1 -0
@@ -604,6 +604,7 @@ const u8 *iwlagn_eeprom_query_addr(const struct iwl_priv *priv,struct iwl_mod_params iwlagn_mod_params = { .amsdu_size_8K =1 , .restart_fw =1 , + .plcp_check = true,/* the rest are 0 by default */ };
drivers/net/wireless/iwlwifi/iwl-agn.c +6 -0
@@ -4586,3 +4586,9 @@ MODULE_PARM_DESC(antenna_coupling,module_param_named (bt_ch_inhibition, iwlagn_bt_ch_announce, bool,S_IRUGO );MODULE_PARM_DESC (bt_ch_inhibition,"Disable BT channel inhibition (default: enable)" ); + +module_param_named (plcp_check, iwlagn_mod_params.plcp_check, bool,S_IRUGO ); +MODULE_PARM_DESC (plcp_check,"Check plcp health (default: 1 [enabled])" ); + +module_param_named (ack_check, iwlagn_mod_params.ack_check, bool,S_IRUGO ); +MODULE_PARM_DESC (ack_check,"Check ack health (default: 0 [disabled])" );
drivers/net/wireless/iwlwifi/iwl-core.h +2 -0
@@ -263,6 +263,8 @@ struct iwl_mod_params {int amsdu_size_8K;/* def: 1 = enable 8K amsdu size */ int antenna;/* def: 0 = both antennas (use diversity) */ int restart_fw;/* def: 1 = restart firmware */ +bool plcp_check;/* def: true = enable plcp health check */ +bool ack_check;/* def: false = disable ack health check */ };/*
drivers/net/wireless/iwlwifi/iwl-legacy.c +7 -0
@@ -123,6 +123,13 @@ int iwl_legacy_mac_config(struct ieee80211_hw *hw, u32 changed) goto set_ch_out; } +if (priv->iw_mode ==NL80211_IFTYPE_ADHOC && + !is_channel_ibss (ch_info)) { +IWL_DEBUG_MAC80211 (priv,"leave - not IBSS channel\n" ); + ret = -EINVAL ; + goto set_ch_out; + } +spin_lock_irqsave (&priv->lock, flags);for_each_context (priv, ctx) {
drivers/net/wireless/iwlwifi/iwl-rx.c +6 -2
@@ -234,10 +234,13 @@ EXPORT_SYMBOL(iwl_rx_spectrum_measure_notif);void iwl_recover_from_statistics (struct iwl_priv *priv,struct iwl_rx_packet *pkt) { +const struct iwl_mod_params *mod_params = priv->cfg->mod_params; +if (test_bit (STATUS_EXIT_PENDING , &priv->status))return ;if (iwl_is_any_associated (priv)) { -if (priv->cfg->ops->lib->check_ack_health) { +if (mod_params->ack_check && + priv->cfg->ops->lib->check_ack_health) {if (!priv->cfg->ops->lib->check_ack_health ( priv, pkt)) {/*
@@ -250,7 +253,8 @@ void iwl_recover_from_statistics(struct iwl_priv *priv,return ; } } -if (priv->cfg->ops->lib->check_plcp_health) { +if (mod_params->plcp_check && + priv->cfg->ops->lib->check_plcp_health) {if (!priv->cfg->ops->lib->check_plcp_health ( priv, pkt)) {/*
drivers/net/wireless/libertas/cmd.c +4 -2
@@ -1335,8 +1335,8 @@ int lbs_execute_next_command(struct lbs_private *priv) cpu_to_le16(PS_MODE_ACTION_EXIT_PS)) {lbs_deb_host ("EXEC_NEXT_CMD: ignore ENTER_PS cmd\n" ); -list_del (&cmdnode->list);spin_lock_irqsave (&priv->driver_lock, flags); +list_del (&cmdnode->list);lbs_complete_command (priv, cmdnode,0 );spin_unlock_irqrestore (&priv->driver_lock, flags);
@@ -1348,8 +1348,8 @@ int lbs_execute_next_command(struct lbs_private *priv) (priv->psstate == PS_STATE_PRE_SLEEP)) {lbs_deb_host ("EXEC_NEXT_CMD: ignore EXIT_PS cmd in sleep\n" ); -list_del (&cmdnode->list);spin_lock_irqsave (&priv->driver_lock, flags); +list_del (&cmdnode->list);lbs_complete_command (priv, cmdnode,0 );spin_unlock_irqrestore (&priv->driver_lock, flags); priv->needtowakeup =1 ;
@@ -1362,7 +1362,9 @@ int lbs_execute_next_command(struct lbs_private *priv) "EXEC_NEXT_CMD: sending EXIT_PS\n"); } } +spin_lock_irqsave (&priv->driver_lock, flags);list_del (&cmdnode->list); +spin_unlock_irqrestore (&priv->driver_lock, flags);lbs_deb_host ("EXEC_NEXT_CMD: sending command 0x%04x\n" ,le16_to_cpu (cmd->command));lbs_submit_command (priv, cmdnode);
drivers/net/zorro8390.c +6 -6
@@ -126,7 +126,7 @@ static int __devinit zorro8390_init_one(struct zorro_dev *z, board = z->resource.start; ioaddr = board+cards[i].offset; - dev =alloc_ei_netdev (); + dev =____alloc_ei_netdev (0 );if (!dev)return -ENOMEM ;if (!request_mem_region (ioaddr,NE_IO_EXTENT *2 ,DRV_NAME )) {
@@ -146,15 +146,15 @@ static int __devinit zorro8390_init_one(struct zorro_dev *z,static const struct net_device_ops zorro8390_netdev_ops = { .ndo_open = zorro8390_open, .ndo_stop = zorro8390_close, - .ndo_start_xmit = ei_start_xmit, - .ndo_tx_timeout = ei_tx_timeout, - .ndo_get_stats = ei_get_stats, - .ndo_set_multicast_list = ei_set_multicast_list, + .ndo_start_xmit = __ei_start_xmit, + .ndo_tx_timeout = __ei_tx_timeout, + .ndo_get_stats = __ei_get_stats, + .ndo_set_multicast_list = __ei_set_multicast_list, .ndo_validate_addr = eth_validate_addr, .ndo_set_mac_address = eth_mac_addr, .ndo_change_mtu = eth_change_mtu, #ifdef CONFIG_NET_POLL_CONTROLLER - .ndo_poll_controller = ei_poll, + .ndo_poll_controller = __ei_poll, #endif };
drivers/platform/x86/thinkpad_acpi.c +4 -2
@@ -128,7 +128,8 @@ enum { };/* ACPI HIDs */ -#define TPACPI_ACPI_HKEY_HID "IBM0068" +#define TPACPI_ACPI_IBM_HKEY_HID "IBM0068" +#define TPACPI_ACPI_LENOVO_HKEY_HID "LEN0068"#define TPACPI_ACPI_EC_HID "PNP0C09"/* Input IDs */
@@ -3879,7 +3880,8 @@ errexit: }static const struct acpi_device_id ibm_htk_device_ids[] = { - {TPACPI_ACPI_HKEY_HID ,0 }, + {TPACPI_ACPI_IBM_HKEY_HID ,0 }, + {TPACPI_ACPI_LENOVO_HKEY_HID ,0 }, {"" ,0 }, };
drivers/rapidio/switches/idt_gen2.c +9 -0
@@ -95,6 +95,9 @@ idtg2_route_add_entry(struct rio_mport *mport, u16 destid, u8 hopcount,else table++; +if (route_port ==RIO_INVALID_ROUTE ) + route_port =IDT_DEFAULT_ROUTE ; +rio_mport_write_config_32 (mport, destid, hopcount,LOCAL_RTE_CONF_DESTID_SEL , table);
@@ -411,6 +414,12 @@ static int idtg2_switch_init(struct rio_dev *rdev, int do_enum) rdev->rswitch->em_handle = idtg2_em_handler; rdev->rswitch->sw_sysfs = idtg2_sysfs; +if (do_enum) { +/* Ensure that default routing is disabled on startup */ +rio_write_config_32 (rdev, +RIO_STD_RTE_DEFAULT_PORT ,IDT_NO_ROUTE ); + } +return 0 ; }
drivers/rapidio/switches/idtcps.c +6 -0
@@ -26,6 +26,9 @@ idtcps_route_add_entry(struct rio_mport *mport, u16 destid, u8 hopcount, {u32 result; +if (route_port ==RIO_INVALID_ROUTE ) + route_port =CPS_DEFAULT_ROUTE ; +if (table ==RIO_GLOBAL_TABLE ) {rio_mport_write_config_32 (mport, destid, hopcount,RIO_STD_RTE_CONF_DESTID_SEL_CSR , route_destid);
@@ -130,6 +133,9 @@ static int idtcps_switch_init(struct rio_dev *rdev, int do_enum)/* set TVAL = ~50us */ rio_write_config_32 (rdev, rdev->phys_efptr +RIO_PORT_LINKTO_CTL_CSR ,0x8e <<8 ); +/* Ensure that default routing is disabled on startup */ +rio_write_config_32 (rdev, +RIO_STD_RTE_DEFAULT_PORT ,CPS_NO_ROUTE ); }return 0 ;
drivers/rapidio/switches/tsi57x.c +6 -0
@@ -303,6 +303,12 @@ static int tsi57x_switch_init(struct rio_dev *rdev, int do_enum) rdev->rswitch->em_init = tsi57x_em_init; rdev->rswitch->em_handle = tsi57x_em_handler; +if (do_enum) { +/* Ensure that default routing is disabled on startup */ +rio_write_config_32 (rdev,RIO_STD_RTE_DEFAULT_PORT , +RIO_INVALID_ROUTE ); + } +return 0 ; }
drivers/rtc/rtc-s3c.c +10 -3
@@ -46,6 +46,7 @@ static struct clk *rtc_clk;static void __iomem *s3c_rtc_base;static int s3c_rtc_alarmno =NO_IRQ ;static int s3c_rtc_tickno =NO_IRQ ; +static bool wake_en;static enum s3c_cpu_type s3c_rtc_cpu_type;static DEFINE_SPINLOCK (s3c_rtc_pie_lock);
@@ -597,8 +598,12 @@ static int s3c_rtc_suspend(struct platform_device *pdev, pm_message_t state) }s3c_rtc_enable (pdev,0 ); -if (device_may_wakeup (&pdev->dev)) -enable_irq_wake (s3c_rtc_alarmno); +if (device_may_wakeup (&pdev->dev) && !wake_en) { +if (enable_irq_wake (s3c_rtc_alarmno) ==0 ) + wake_en = true; +else +dev_err (&pdev->dev,"enable_irq_wake failed\n" ); + }return 0 ; }
@@ -614,8 +619,10 @@ static int s3c_rtc_resume(struct platform_device *pdev)writew (tmp | ticnt_en_save, s3c_rtc_base +S3C2410_RTCCON ); } -if (device_may_wakeup (&pdev->dev)) +if (device_may_wakeup (&pdev->dev) && wake_en) {disable_irq_wake (s3c_rtc_alarmno); + wake_en = false; + }return 0 ; }
drivers/scsi/megaraid/megaraid_sas_base.c +3 -0
@@ -4611,6 +4611,9 @@ megasas_mgmt_fw_ioctl(struct megasas_instance *instance,* For each user buffer, create a mirror buffer and copy in */ for (i =0 ; i < ioc->sge_count; i++) { +if (!ioc->sgl[i].iov_len) +continue ; + kbuff_arr[i] =dma_alloc_coherent (&instance->pdev->dev, ioc->sgl[i].iov_len, &buf_handle,GFP_KERNEL );
drivers/scsi/sd.c +16 -47
86 lines not on this page · raw message
fs/cifs/cifs_unicode.c +23 -26
98 lines not on this page · raw message
fs/cifs/cifs_unicode.h +1 -1
@@ -44,7 +44,7 @@* reserved symbols (along with \ and /), otherwise illegal to store * in filenames in NTFS */ -#define UNI_ASTERIK (__u16) ('*' + 0xF000) +#define UNI_ASTERISK (__u16) ('*' + 0xF000)#define UNI_QUESTION (__u16) ('?' + 0xF000)#define UNI_COLON (__u16) (':' + 0xF000)#define UNI_GRTRTHAN (__u16) ('>' + 0xF000)
fs/cifs/connect.c +75 -55
194 lines not on this page · raw message
fs/cifs/sess.c +4 -15
@@ -277,7 +277,7 @@ static void ascii_ssetup_strings(char **pbcc_area, struct cifsSesInfo *ses, }static void -decode_unicode_ssetup (char **pbcc_area,__u16 bleft,struct cifsSesInfo *ses, +decode_unicode_ssetup (char **pbcc_area,int bleft,struct cifsSesInfo *ses,const struct nls_table *nls_cp) {int len;
@@ -285,19 +285,6 @@ decode_unicode_ssetup(char **pbcc_area, __u16 bleft, struct cifsSesInfo *ses,cFYI (1 ,"bleft %d" , bleft); -/* -* Windows servers do not always double null terminate their final -* Unicode string. Check to see if there are an uneven number of bytes -* left. If so, then add an extra NULL pad byte to the end of the -* response. -* -* See section 2.7.2 in "Implementing CIFS" for details -*/ -if (bleft %2 ) { - data[bleft] =0 ; - ++bleft; - } -kfree (ses->serverOS); ses->serverOS =cifs_strndup_from_ucs (data, bleft, true, nls_cp);cFYI (1 ,"serverOS=%s" , ses->serverOS);
@@ -930,7 +917,9 @@ ssetup_ntlmssp_authenticate: }/* BB check if Unicode and decode strings */ -if (smb_buf->Flags2 &SMBFLG2_UNICODE ) { +if (bytes_remaining ==0 ) { +/* no string area to decode, do nothing */ + }else if (smb_buf->Flags2 &SMBFLG2_UNICODE ) {/* unicode string area must be word-aligned */ if (((unsigned long ) bcc_ptr - (unsigned long ) smb_buf) %2 ) { ++bcc_ptr;
fs/partitions/efi.c +6 -0
@@ -348,6 +348,12 @@ static int is_gpt_valid(struct parsed_partitions *state, u64 lba, goto fail; } +/* Check that sizeof_partition_entry has the correct value */ +if (le32_to_cpu ((*gpt)->sizeof_partition_entry) !=sizeof (gpt_entry)) { +pr_debug ("GUID Partitition Entry Size check failed.\n" ); + goto fail; + } +if (!(*ptes =alloc_read_gpt_entries (state, *gpt))) goto fail;
fs/proc/task_mmu.c +7 -5
@@ -211,7 +211,7 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)int flags = vma->vm_flags;unsigned long ino =0 ;unsigned long long pgoff =0 ; -unsigned long start; +unsigned long start, end;dev_t dev =0 ;int len;
@@ -224,13 +224,15 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)/* We don't show the stack guard page in /proc/maps */ start = vma->vm_start; -if (vma->vm_flags &VM_GROWSDOWN ) -if (!vma_stack_continue (vma->vm_prev, vma->vm_start)) - start +=PAGE_SIZE ; +if (stack_guard_page_start (vma, start)) + start +=PAGE_SIZE ; + end = vma->vm_end; +if (stack_guard_page_end (vma, end)) + end -=PAGE_SIZE ; seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n", start, - vma->vm_end, + end, flags & VM_READ ? 'r' : '-', flags & VM_WRITE ? 'w' : '-', flags & VM_EXEC ? 'x' : '-',
include/drm/radeon_drm.h +1 -0
@@ -908,6 +908,7 @@ struct drm_radeon_cs {#define RADEON_INFO_WANT_HYPERZ 0x07#define RADEON_INFO_WANT_CMASK 0x08/* get access to CMASK on r300 */ #define RADEON_INFO_CLOCK_CRYSTAL_FREQ 0x09/* clock crystal frequency */ +#define RADEON_INFO_FUSION_GART_WORKING 0x0c/* fusion writes to GTT were broken before this */ struct drm_radeon_info {uint32_t request;
include/linux/bootmem.h +2 -0
@@ -115,6 +115,8 @@ extern void *__alloc_bootmem_low_node(pg_data_t *pgdat, __alloc_bootmem_nopanic(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))#define alloc_bootmem_node (pgdat, x) \ __alloc_bootmem_node(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) +#define alloc_bootmem_node_nopanic (pgdat, x) \ + __alloc_bootmem_node_nopanic(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))#define alloc_bootmem_pages_node (pgdat, x) \ __alloc_bootmem_node(pgdat, x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))#define alloc_bootmem_pages_node_nopanic (pgdat, x) \
include/linux/mm.h +23 -1
@@ -994,11 +994,33 @@ int set_page_dirty_lock(struct page *page);int clear_page_dirty_for_io (struct page *page);/* Is the vma a continuation of the stack vma above it? */ -static inline int vma_stack_continue (struct vm_area_struct *vma,unsigned long addr) +static inline int vma_growsdown (struct vm_area_struct *vma,unsigned long addr) {return vma && (vma->vm_end == addr) && (vma->vm_flags &VM_GROWSDOWN ); } +static inline int stack_guard_page_start (struct vm_area_struct *vma, +unsigned long addr) +{ +return (vma->vm_flags &VM_GROWSDOWN ) && + (vma->vm_start == addr) && + !vma_growsdown (vma->vm_prev, addr); +} + +/* Is the vma a continuation of the stack vma below it? */ +static inline int vma_growsup (struct vm_area_struct *vma,unsigned long addr) +{ +return vma && (vma->vm_start == addr) && (vma->vm_flags &VM_GROWSUP ); +} + +static inline int stack_guard_page_end (struct vm_area_struct *vma, +unsigned long addr) +{ +return (vma->vm_flags &VM_GROWSUP ) && + (vma->vm_end == addr) && + !vma_growsup (vma->vm_next, addr); +} +extern unsigned long move_page_tables (struct vm_area_struct *vma,unsigned long old_addr,struct vm_area_struct *new_vma,unsigned long new_addr,unsigned long len);
include/linux/mmc/host.h +1 -0
@@ -183,6 +183,7 @@ struct mmc_host {struct work_struct clk_gate_work;/* delayed clock gate */ unsigned int clk_old;/* old clock value cache */ spinlock_t clk_lock;/* lock for clk fields */ +struct mutex clk_gate_mutex;/* mutex for clock gating */ #endif /* host specific block data */
include/linux/ptrace.h +12 -1
@@ -189,6 +189,10 @@ static inline void ptrace_init_task(struct task_struct *child, bool ptrace) child->ptrace = current->ptrace;__ptrace_link (child, current->parent); } + +#ifdef CONFIG_HAVE_HW_BREAKPOINT +atomic_set (&child->ptrace_bp_refcnt,1 ); +#endif }/**
@@ -350,6 +354,13 @@ extern int task_current_syscall(struct task_struct *target, long *callno, unsigned long args[6], unsigned int maxargs, unsigned long *sp, unsigned long *pc); -#endif +#ifdef CONFIG_HAVE_HW_BREAKPOINT +extern int ptrace_get_breakpoints (struct task_struct *tsk); +extern void ptrace_put_breakpoints (struct task_struct *tsk); +#else +static inline void ptrace_put_breakpoints (struct task_struct *tsk) { } +#endif /* CONFIG_HAVE_HW_BREAKPOINT */ + +#endif /* __KERNEL */ #endif
include/linux/sched.h +3 -0
@@ -1531,6 +1531,9 @@ struct task_struct { unsigned long memsw_bytes; /* uncharged mem+swap usage */ } memcg_batch;#endif +#ifdef CONFIG_HAVE_HW_BREAKPOINT +atomic_t ptrace_bp_refcnt; +#endif };/* Future-safe accessor for struct task_struct's cpus_allowed. */
kernel/exit.c +1 -1
@@ -1015,7 +1015,7 @@ NORET_TYPE void do_exit(long code)/* * FIXME: do that only when needed, using sched_exit tracepoint */ -flush_ptrace_hw_breakpoint (tsk); +ptrace_put_breakpoints (tsk);exit_notify (tsk, group_dead);#ifdef CONFIG_NUMA
kernel/power/suspend.c +2 -2
@@ -209,7 +209,6 @@ int suspend_devices_and_enter(suspend_state_t state) goto Close; }suspend_console (); -pm_restrict_gfp_mask ();suspend_test_start (); error =dpm_suspend_start (PMSG_SUSPEND );if (error) {
@@ -226,7 +225,6 @@ int suspend_devices_and_enter(suspend_state_t state)suspend_test_start ();dpm_resume_end (PMSG_RESUME );suspend_test_finish ("resume devices" ); -pm_restore_gfp_mask ();resume_console (); Close:if (suspend_ops->end)
@@ -287,7 +285,9 @@ int enter_state(suspend_state_t state) goto Finish;pr_debug ("PM: Entering %s sleep\n" , pm_states[state]); +pm_restrict_gfp_mask (); error =suspend_devices_and_enter (state); +pm_restore_gfp_mask (); Finish:pr_debug ("PM: Finishing wakeup.\n" );
kernel/power/user.c +4 -1
@@ -135,8 +135,10 @@ static int snapshot_release(struct inode *inode, struct file *filp)free_basic_memory_bitmaps (); data = filp->private_data;free_all_swap_pages (data->swap); -if (data->frozen) +if (data->frozen) { +pm_restore_gfp_mask ();thaw_processes (); + }pm_notifier_call_chain (data->mode ==O_RDONLY ?PM_POST_HIBERNATION :PM_POST_RESTORE );atomic_inc (&snapshot_device_available);
@@ -379,6 +381,7 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd,* PM_HIBERNATION_PREPARE */ error =suspend_devices_and_enter (PM_SUSPEND_MEM ); + data->ready =0 ;break ;case SNAPSHOT_PLATFORM_SUPPORT :
kernel/ptrace.c +17 -0
@@ -22,6 +22,7 @@#include <linux/syscalls.h> #include <linux/uaccess.h> #include <linux/regset.h> +#include <linux/hw_breakpoint.h> /*
@@ -876,3 +877,19 @@ asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid, return ret; }#endif /* CONFIG_COMPAT */ + +#ifdef CONFIG_HAVE_HW_BREAKPOINT +int ptrace_get_breakpoints (struct task_struct *tsk) +{ +if (atomic_inc_not_zero (&tsk->ptrace_bp_refcnt)) +return 0 ; + +return -1 ; +} + +void ptrace_put_breakpoints (struct task_struct *tsk) +{ +if (atomic_dec_and_test (&tsk->ptrace_bp_refcnt)) +flush_ptrace_hw_breakpoint (tsk); +} +#endif /* CONFIG_HAVE_HW_BREAKPOINT */
kernel/time/clocksource.c +2 -2
@@ -685,8 +685,8 @@ int __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq)/* Add clocksource to the clcoksource list */ mutex_lock (&clocksource_mutex);clocksource_enqueue (cs); -clocksource_select ();clocksource_enqueue_watchdog (cs); +clocksource_select ();mutex_unlock (&clocksource_mutex);return 0 ; }
@@ -706,8 +706,8 @@ int clocksource_register(struct clocksource *cs)mutex_lock (&clocksource_mutex);clocksource_enqueue (cs); -clocksource_select ();clocksource_enqueue_watchdog (cs); +clocksource_select ();mutex_unlock (&clocksource_mutex);return 0 ; }
kernel/time/tick-broadcast.c +11 -1
@@ -523,10 +523,11 @@ static void tick_broadcast_init_next_event(struct cpumask *mask,*/ void tick_broadcast_setup_oneshot (struct clock_event_device *bc) { +int cpu =smp_processor_id (); +/* Set it up only once ! */ if (bc->event_handler != tick_handle_oneshot_broadcast) {int was_periodic = bc->mode ==CLOCK_EVT_MODE_PERIODIC ; -int cpu =smp_processor_id (); bc->event_handler = tick_handle_oneshot_broadcast;clockevents_set_mode (bc,CLOCK_EVT_MODE_ONESHOT );
@@ -552,6 +553,15 @@ void tick_broadcast_setup_oneshot(struct clock_event_device *bc)tick_broadcast_set_event (tick_next_period,1 ); }else bc->next_event.tv64 =KTIME_MAX ; + }else { +/* +* The first cpu which switches to oneshot mode sets +* the bit for all other cpus which are in the general +* (periodic) broadcast mask. So the bit is set and +* would prevent the first broadcast enter after this +* to program the bc device. +*/ +tick_broadcast_clear_oneshot (cpu); } }
mm/memory.c +7 -9
@@ -1412,9 +1412,8 @@ no_page_table:static inline int stack_guard_page (struct vm_area_struct *vma,unsigned long addr) { -return (vma->vm_flags &VM_GROWSDOWN ) && - (vma->vm_start == addr) && - !vma_stack_continue (vma->vm_prev, addr); +return stack_guard_page_start (vma, addr) || +stack_guard_page_end (vma, addr+PAGE_SIZE ); } int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
@@ -1502,12 +1501,6 @@ int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,continue ; } -/* -* For mlock, just skip the stack guard page. -*/ -if ((gup_flags &FOLL_MLOCK ) &&stack_guard_page (vma, start)) - goto next_page; - do { struct page *page; unsigned int foll_flags = gup_flags;
@@ -1524,6 +1517,11 @@ int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,int ret;unsigned int fault_flags =0 ; +/* For mlock, just skip the stack guard page. */ +if (foll_flags &FOLL_MLOCK ) { +if (stack_guard_page (vma, start)) + goto next_page; + }if (foll_flags &FOLL_WRITE ) fault_flags |=FAULT_FLAG_WRITE ;if (nonblocking)
mm/mmap.c +7 -4
@@ -1767,10 +1767,13 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) size = address - vma->vm_start; grow = (address - vma->vm_end) >>PAGE_SHIFT ; - error =acct_stack_growth (vma, size, grow); -if (!error) { - vma->vm_end = address; -perf_event_mmap (vma); + error = -ENOMEM ; +if (vma->vm_pgoff + (size >>PAGE_SHIFT ) >= vma->vm_pgoff) { + error =acct_stack_growth (vma, size, grow); +if (!error) { + vma->vm_end = address; +perf_event_mmap (vma); + } } }vma_unlock_anon_vma (vma);
mm/page_alloc.c +4 -3
@@ -3498,7 +3498,7 @@ int zone_wait_table_init(struct zone *zone, unsigned long zone_size_pages)if (!slab_is_available ()) { zone->wait_table = (wait_queue_head_t *) -alloc_bootmem_node (pgdat, alloc_size); +alloc_bootmem_node_nopanic (pgdat, alloc_size); }else {/* * This case means that a zone whose size was 0 gets new memory
@@ -4071,7 +4071,8 @@ static void __init setup_usemap(struct pglist_data *pgdat,unsigned long usemapsize =usemap_size (zonesize); zone->pageblock_flags =NULL ;if (usemapsize) - zone->pageblock_flags =alloc_bootmem_node (pgdat, usemapsize); + zone->pageblock_flags =alloc_bootmem_node_nopanic (pgdat, + usemapsize); }#else static inline void setup_usemap(struct pglist_data *pgdat,
@@ -4237,7 +4238,7 @@ static void __init_refok alloc_node_mem_map(struct pglist_data *pgdat) size = (end - start) *sizeof (struct page ); map =alloc_remap (pgdat->node_id, size);if (!map) - map =alloc_bootmem_node (pgdat, size); + map =alloc_bootmem_node_nopanic (pgdat, size); pgdat->node_mem_map = map + (pgdat->node_start_pfn - start); }#ifndef CONFIG_NEED_MULTIPLE_NODES
mm/shmem.c +87 -67
253 lines not on this page · raw message
net/core/dev.c +6 -4
@@ -1332,11 +1332,13 @@ int dev_close_many(struct list_head *head)*/ int dev_close (struct net_device *dev) { -LIST_HEAD (single); +if (dev->flags &IFF_UP ) { +LIST_HEAD (single); -list_add (&dev->unreg_list, &single); -dev_close_many (&single); -list_del (&single); +list_add (&dev->unreg_list, &single); +dev_close_many (&single); +list_del (&single); + }return 0 ; }EXPORT_SYMBOL (dev_close);
net/dccp/options.c +2 -0
@@ -123,6 +123,8 @@ int dccp_parse_options(struct sock *sk, struct dccp_request_sock *dreq, case DCCPO_CHANGE_L ... DCCPO_CONFIRM_R:if (pkt_type ==DCCP_PKT_DATA )/* RFC 4340, 6 */ break ; +if (len ==0 ) + goto out_invalid_option; rc =dccp_feat_parse_options (sk, dreq, mandatory, opt, *value, value +1 , len -1 );if (rc)
net/ipv4/ip_fragment.c +15 -16
@@ -223,31 +223,30 @@ static void ip_expire(unsigned long arg)if ((qp->q.last_in &INET_FRAG_FIRST_IN ) && qp->q.fragments !=NULL ) {struct sk_buff *head = qp->q.fragments; +const struct iphdr *iph; +int err;rcu_read_lock (); head->dev =dev_get_by_index_rcu (net, qp->iif);if (!head->dev) goto out_rcu_unlock; +/* skb dst is stale, drop it, and perform route lookup again */ +skb_dst_drop (head); + iph =ip_hdr (head); + err =ip_route_input_noref (head, iph->daddr, iph->saddr, + iph->tos, head->dev); +if (err) + goto out_rcu_unlock; +/* -* Only search router table for the head fragment, -* when defraging timeout at PRE_ROUTING HOOK. +* Only an end host needs to send an ICMP +* "Fragment Reassembly Timeout" message, per RFC792. */ -if (qp->user ==IP_DEFRAG_CONNTRACK_IN && !skb_dst (head)) { -const struct iphdr *iph =ip_hdr (head); -int err =ip_route_input (head, iph->daddr, iph->saddr, - iph->tos, head->dev); -if (unlikely (err)) - goto out_rcu_unlock; - -/* -* Only an end host needs to send an ICMP -* "Fragment Reassembly Timeout" message, per RFC792. -*/ -if (skb_rtable (head)->rt_type !=RTN_LOCAL ) - goto out_rcu_unlock; +if (qp->user ==IP_DEFRAG_CONNTRACK_IN && +skb_rtable (head)->rt_type !=RTN_LOCAL ) + goto out_rcu_unlock; - }/* Send an ICMP "Fragment Reassembly Timeout" message. */ icmp_send (head,ICMP_TIME_EXCEEDED ,ICMP_EXC_FRAGTIME ,0 );
sound/soc/codecs/ssm2602.c +1 -1
@@ -139,7 +139,7 @@ SOC_DOUBLE_R("Capture Volume", SSM2602_LINVOL, SSM2602_RINVOL, 0, 31, 0),SOC_DOUBLE_R ("Capture Switch" ,SSM2602_LINVOL ,SSM2602_RINVOL ,7 ,1 ,1 ),SOC_SINGLE ("Mic Boost (+20dB)" ,SSM2602_APANA ,0 ,1 ,0 ), -SOC_SINGLE ("Mic Boost2 (+20dB)" ,SSM2602_APANA ,7 ,1 ,0 ), +SOC_SINGLE ("Mic Boost2 (+20dB)" ,SSM2602_APANA ,8 ,1 ,0 ),SOC_SINGLE ("Mic Switch" ,SSM2602_APANA ,1 ,1 ,1 ), SOC_SINGLE("Sidetone Playback Volume", SSM2602_APANA, 6, 3, 1),
sound/soc/codecs/uda134x.c +0 -2
@@ -601,9 +601,7 @@ static struct snd_soc_codec_driver soc_codec_dev_uda134x = { .reg_cache_step = 1, .read = uda134x_read_reg_cache, .write = uda134x_write, -#ifdef POWER_OFF_ON_STANDBY .set_bias_level = uda134x_set_bias_level, -#endif };static int __devinit uda134x_codec_probe (struct platform_device *pdev)