Linux 3.4.14
I'm announcing the release of the 3.4.14 kernel.
All users of the 3.4 kernel series must upgrade.
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/alpha/kernel/process.c | 4 arch/cris/kernel/process.c | 3 arch/frv/kernel/process.c | 3 arch/h8300/kernel/process.c | 3 arch/ia64/kernel/process.c | 3 arch/m32r/kernel/process.c | 3 arch/m68k/kernel/process.c | 3 arch/mips/Makefile | 2 arch/mips/kernel/Makefile | 2 arch/mn10300/Makefile | 2 arch/mn10300/kernel/process.c | 3 arch/parisc/kernel/process.c | 3 arch/powerpc/include/asm/pci-bridge.h | 8 arch/powerpc/platforms/pseries/eeh.c | 2 arch/score/kernel/process.c | 4 arch/x86/Makefile | 2 arch/x86/boot/compressed/Makefile | 3 arch/x86/include/asm/pgtable.h | 11 - arch/x86/platform/efi/efi.c | 1 arch/xtensa/kernel/process.c | 3 drivers/acpi/bus.c | 8 drivers/base/power/main.c | 2 drivers/block/aoe/aoecmd.c | 1 drivers/dma/dmaengine.c | 2 drivers/gpu/drm/drm_crtc.c | 8 drivers/gpu/drm/radeon/radeon_irq_kms.c | 10 + drivers/gpu/drm/radeon/radeon_pm.c | 8 drivers/gpu/drm/savage/savage_bci.c | 2 drivers/iommu/intel-iommu.c | 4 drivers/media/rc/ite-cir.c | 2 drivers/media/video/gspca/pac7302.c | 1 drivers/mfd/max8925-core.c | 10 + drivers/mmc/host/omap_hsmmc.c | 3 drivers/mmc/host/sh_mmcif.c | 4 drivers/mtd/maps/autcpu12-nvram.c | 19 +- drivers/mtd/mtdpart.c | 5 drivers/mtd/nand/nand_bbt.c | 2 drivers/mtd/nand/nandsim.c | 1 drivers/mtd/nand/omap2.c | 3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 12 - drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | 4 drivers/net/ethernet/realtek/r8169.c | 21 ++ drivers/net/ethernet/ti/davinci_cpdma.c | 1 drivers/net/ppp/pppoe.c | 2 drivers/net/rionet.c | 20 +- drivers/net/usb/sierra_net.c | 2 drivers/net/wan/ixp4xx_hss.c | 1 drivers/pci/hotplug/acpiphp_glue.c | 13 - drivers/pci/probe.c | 6 drivers/s390/scsi/zfcp_aux.c | 1 drivers/s390/scsi/zfcp_ccw.c | 73 ++++++- drivers/s390/scsi/zfcp_cfdc.c | 2 drivers/s390/scsi/zfcp_dbf.c | 22 ++ drivers/s390/scsi/zfcp_dbf.h | 1 drivers/s390/scsi/zfcp_def.h | 2 drivers/s390/scsi/zfcp_ext.h | 2 drivers/s390/scsi/zfcp_fsf.c | 57 +++++- drivers/s390/scsi/zfcp_qdio.c | 16 + drivers/s390/scsi/zfcp_sysfs.c | 18 + drivers/s390/scsi/zfcp_unit.c | 36 ++- drivers/scsi/atp870u.c | 11 + fs/cifs/cifs_unicode.c | 22 ++ fs/cifs/connect.c | 9 fs/ext4/inode.c | 25 +- fs/ext4/move_extent.c | 174 +++++-------------- fs/ext4/namei.c | 2 fs/ext4/resize.c | 26 ++ fs/ext4/super.c | 2 fs/fs-writeback.c | 1 fs/jbd2/journal.c | 5 fs/jffs2/wbuf.c | 8 fs/proc/page.c | 8 fs/udf/super.c | 5 include/linux/mempolicy.h | 2 include/linux/xfrm.h | 2 include/net/xfrm.h | 3 kernel/cpuset.c | 3 kernel/rcutree.c | 4 kernel/sched/core.c | 40 +++- kernel/sched/stop_task.c | 22 ++ kernel/sys.c | 1 kernel/workqueue.c | 2 lib/gcd.c | 3 mm/hugetlb.c | 3 mm/mempolicy.c | 137 +++++++++----- mm/slab.c | 6 mm/truncate.c | 3 net/8021q/vlan_core.c | 3 net/core/dev.c | 14 - net/core/sock.c | 3 net/ipv4/raw.c | 14 - net/ipv4/tcp.c | 10 - net/ipv6/addrconf.c | 10 - net/ipv6/ip6_fib.c | 4 net/ipv6/mip6.c | 20 +- net/ipv6/raw.c | 21 +- net/ipv6/route.c | 11 - net/l2tp/l2tp_eth.c | 2 net/netrom/af_netrom.c | 7 net/sched/sch_cbq.c | 5 net/sched/sch_qfq.c | 5 net/sctp/output.c | 21 ++ net/xfrm/xfrm_input.c | 2 net/xfrm/xfrm_policy.c | 2 net/xfrm/xfrm_replay.c | 15 + net/xfrm/xfrm_user.c | 57 ++++-- scripts/Kbuild.include | 14 - scripts/gcc-version.sh | 6 scripts/gcc-x86_32-has-stack-protector.sh | 2 scripts/gcc-x86_64-has-stack-protector.sh | 2 scripts/kconfig/check.sh | 2 scripts/kconfig/lxdialog/check-lxdialog.sh | 2 scripts/kconfig/streamline_config.pl | 2 sound/drivers/aloop.c | 6 sound/pci/hda/patch_realtek.c | 12 - sound/soc/codecs/wm9712.c | 2 sound/usb/mixer.c | 7 sound/usb/quirks-table.h | 53 +++++ tools/lguest/lguest.c | 1 tools/perf/Makefile | 2 tools/power/cpupower/Makefile | 2 122 files changed, 958 insertions(+), 389 deletions(-)
Alan Cox (1):
netrom: copy_datagram_iovec can fail
Alex Deucher (3):
drm/radeon: only adjust default clocks on NI GPUs drm/radeon: Add MSI quirk for gateway RS690 drm/radeon: force MSIs on RS690 asics
Alex Williamson (1):
intel-iommu: Default to non-coherent for domains unattached to iommus
Alexander Shiyan (1):
mtd: autcpu12-nvram: Fix compile breakage
Alexandre Bounine (1):
rapidio/rionet: fix multicast packet transmit logic
Andrea Arcangeli (1):
mm: thp: fix pmd_present for split_huge_page and PROT_NONE with THP
Andreas Bießmann (2):
mtd: omap2: fix omap_nand_remove segfault
mtd: omap2: fix module loading
Antonio Quartulli (1):
8021q: fix mac_len recomputation in vlan_untag()
Ben Hutchings (1):
media: rc: ite-cir: Initialise ite_dev::rdev earlier
Bernd Schubert (1):
ext4: always set i_op in ext4_mknod()
Bjorn Helgaas (1):
PCI: acpiphp: check whether _ADR evaluation succeeded
Brian Norris (1):
JFFS2: don't fail on bitflips in OOB
Chema Gonzalez (1):
net: small bug on rxhash calculation
Chris Wilson (1):
drm: Destroy the planes prior to destroying the associated CRTC
David Henningsson (1):
ALSA: usb - disable broken hw volume for Tenx TP6911
Davidlohr Bueso (1):
lib/gcd.c: prevent possible div by 0
Dmitry Monakhov (2):
ext4: move_extent code cleanup
ext4: online defrag is not supported for journaled files
Ed L. Cashin (2):
net: do not disable sg for packets requiring no checksum
aoe: assert AoE packets marked as requiring no checksum
Eric Dumazet (6):
net-sched: sch_cbq: avoid infinite loop
net: guard tcp_set_keepalive() to tcp sockets
ipv4: raw: fix icmp_filter()
ipv6: raw: fix icmpv6_filter()
ipv6: mip6: fix mip6_mh_filter()
l2tp: fix a typo in l2tp_eth_dev_recv()
Eric Sandeen (1):
jbd2: don't write superblock when if its empty
Fabio Estevam (1):
drivers/dma/dmaengine.c: lower the priority of 'failed to get' dma channel message
Feng Hong (1):
PM / Sleep: use resume event when call dpm_resume_early
Florian Fainelli (1):
ixp4xx_hss: fix build failure due to missing linux/module.h inclusion
Florian Zumbiehl (1):
drm/savage: re-add busmaster enable, regression fix
Francois Romieu (2):
r8169: Config1 is read-only on 8168c and later.
r8169: 8168c and later require bit 0x20 to be set in Config2 for PME signaling.Frank Schäfer (1):
media: gspca_pac7302: add support for device 1ae7:2001 Speedlink Snappy Microphone SL-6825-SBK
Frederic Weisbecker (10):
h8300: Add missing RCU idle APIs on idle loop
parisc: Add missing RCU idle APIs on idle loop
xtensa: Add missing RCU idle APIs on idle loop
frv: Add missing RCU idle APIs on idle loop
mn10300: Add missing RCU idle APIs on idle loop
m68k: Add missing RCU idle APIs on idle loop
alpha: Add missing RCU idle APIs on idle loop
cris: Add missing RCU idle APIs on idle loop
m32r: Add missing RCU idle APIs on idle loop
score: Add missing RCU idle APIs on idle loop
Frediano Ziglio (1):
Convert properly UTF-8 to UTF-16
Gao feng (1):
ipv6: release reference of ip6_null_entry's dst entry in __ip6_del_rt
Gavin Shan (1):
powerpc/eeh: Fix crash on converting OF node to edev
Geert Uytterhoeven (1):
mn10300: only add -mmem-funcs to KBUILD_CFLAGS if gcc supports it
Greg Kroah-Hartman (1):
Linux 3.4.14
Guennadi Liakhovetski (1):
mmc: sh-mmcif: avoid oops on spurious interrupts
Herton Ronaldo Krzesinski (2):
ext4: fix crash when accessing /proc/mounts concurrently
ALSA: hda/realtek - Fix detection of ALC271X codec
Huang Shijie (1):
mtd: mtdpart: break it as soon as we parse out the partitions
Hugh Dickins (1):
mm: fix invalidate_complete_page2() lock ordering
Jan Kara (1):
ext4: fix fdatasync() for files with only i_size changes
Jean Delvare (1):
kbuild: Fix gcc -x syntax
Jeff Layton (1):
cifs: reinstate the forcegid option
Julia Lawall (1):
SCSI: zfcp: remove invalid reference to list iterator variable
KOSAKI Motohiro (3):
revert "mm: mempolicy: Let vma_merge and vma_split handle vma->vm_policy linkages"
mempolicy: remove mempolicy sharing
mempolicy: fix refcount leak in mpol_set_shared_policy()
Lennart Sorensen (1):
sierra_net: Endianess bug fix.
Li RongQing (1):
xfrm: fix a read lock imbalance in make_blackhole
Lin Ming (1):
ACPI: run _OSC after ACPI_FULL_INITIALIZATION
Mark Brown (2):
mfd: max8925: Move _IO resources out of ioport_ioresource
ASoC: wm9712: Fix name of Capture Switch
Marko Friedemann (1):
ALSA: USB: Support for (original) Xbox Communicator
Martin Michlmayr (1):
drivers/scsi/atp870u.c: fix bad use of udelay
Martin Peschke (1):
SCSI: zfcp: only access zfcp_scsi_dev for valid scsi_device
Mathias Krause (8):
xfrm_user: return error pointer instead of NULL
xfrm_user: return error pointer instead of NULL #2
xfrm_user: fix info leak in copy_to_user_auth()
xfrm_user: fix info leak in copy_to_user_state()
xfrm_user: fix info leak in copy_to_user_policy()
xfrm_user: fix info leak in copy_to_user_tmpl()
xfrm_user: don't copy esn replay window twice for new states
xfrm_user: ensure user supplied esn replay window is valid
Matthew Garrett (1):
efi: Build EFI stub with EFI-appropriate options
Mel Gorman (2):
mempolicy: fix a race in shared_policy_replace()
mempolicy: fix a memory corruption by refcount imbalance in alloc_pages_vma()
Michael Wang (1):
slab: fix the DEADLOCK issue on l3 alien lock
Michal Hocko (1):
hugetlb: do not use vma_hugecache_offset() for vma_prio_tree_foreach
Michal Kubeček (1):
tcp: flush DMA queue before sk_wait_data if rcv_wnd is zero
Michal Schmidt (1):
bnx2x: fix rx checksum validation for IPv6
Mike Galbraith (1):
sched: Fix migration thread runtime bogosity
Naoya Horiguchi (1):
kpageflags: fix wrong KPF_THP on non-huge compound pages
Nicolas Dichtel (1):
ipv6: del unreachable route when an addr is deleted on lo
Nikola Pajkovsky (1):
udf: fix retun value on error path in udf_load_logicalvol
Nikolay Aleksandrov (1):
netxen: check for root bus in netxen_mask_aer_correctable
Omair Mohammed Abdullah (1):
ALSA: aloop - add locking to timer access
Paolo Valente (1):
pkt_sched: fix virtual-start-time update in QFQ
Paul E. McKenney (2):
ia64: Add missing RCU idle APIs on idle loop
rcu: Fix day-one dyntick-idle stall-warning bug
Richard Genoud (1):
mtd: nandsim: bugfix: fail if overridesize is too big
Rusty Russell (1):
lguest: fix occasional crash in example launcher.
Sascha Hauer (1):
kbuild: make: fix if_changed when command contains backslashes
Seiji Aguchi (1):
efi: initialize efi.runtime_version to make query_variable_info/update_capsule workable
Shawn Guo (1):
kernel/sys.c: call disable_nonboot_cpus() in kernel_restart()
Shmulik Ladkani (1):
mtd: nand: Use the mirror BBT descriptor when reading its version
Srivatsa S. Bhat (1):
CPU hotplug, cpusets, suspend: Don't modify cpusets during suspend/resume
Steffen Klassert (1):
xfrm: Workaround incompatibility of ESN and async crypto
Steffen Maier (5):
SCSI: zfcp: Adapt to new FC_PORTSPEED semantics
SCSI: zfcp: Make trace record tags unique
SCSI: zfcp: Bounds checking for deferred error trace
SCSI: zfcp: Do not wakeup while suspended
SCSI: zfcp: restore refcount check on port_remove
Tejun Heo (1):
workqueue: add missing smp_wmb() in process_one_work()
Theodore Ts'o (1):
ext4: fix potential deadlock in ext4_nonda_switch()
Thomas Graf (1):
sctp: Don't charge for data in sndbuf again when transmitting packet
Vaibhav Bedia (1):
mmc: omap_hsmmc: Pass on the suspend failure to the PM core
Wei Yongjun (1):
ipv6: fix return value check in fib6_add()
Xiaodong Xu (1):
pppoe: drop PPPOX_ZOMBIEs in pppoe_release
Yinghai Lu (1):
PCI: Check P2P bridge for invalid secondary/subordinate range
Yongqiang Yang (3):
ext4: ignore last group w/o enough space when resizing instead of BUG'ing
ext4: don't copy non-existent gdt blocks when resizing
ext4: avoid duplicate writes of the backup bg descriptor blocks
Yuta Ando (1):
localmodconfig: Fix localyesconfig to set to 'y' not 'm'
htbegin (1):
net: ethernet: davinci_cpdma: decrease the desc count when cleaning up the remaining packets
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 4 -SUBLEVEL = 13 +SUBLEVEL = 14 EXTRAVERSION = NAME = Saber-toothed Squirrel
arch/alpha/kernel/process.c +4 -0
@@ -28,6 +28,7 @@#include <linux/tty.h> #include <linux/console.h> #include <linux/slab.h> +#include <linux/rcupdate.h> #include <asm/reg.h> #include <asm/uaccess.h>
@@ -54,8 +55,11 @@ cpu_idle(void)/* FIXME -- EV6 and LCA45 know how to power down the CPU. */ +rcu_idle_enter ();while (!need_resched ())cpu_relax (); + +rcu_idle_exit ();schedule (); } }
arch/cris/kernel/process.c +3 -0
@@ -25,6 +25,7 @@#include <linux/elfcore.h> #include <linux/mqueue.h> #include <linux/reboot.h> +#include <linux/rcupdate.h> //#define DEBUG
@@ -102,6 +103,7 @@ void cpu_idle (void) {/* endless idle loop with no priority at all */ while (1 ) { +rcu_idle_enter ();while (!need_resched ()) {void (*idle)(void );/*
@@ -114,6 +116,7 @@ void cpu_idle (void) idle = default_idle;idle (); } +rcu_idle_exit ();schedule_preempt_disabled (); } }
arch/frv/kernel/process.c +3 -0
@@ -25,6 +25,7 @@#include <linux/reboot.h> #include <linux/interrupt.h> #include <linux/pagemap.h> +#include <linux/rcupdate.h> #include <asm/asm-offsets.h> #include <asm/uaccess.h>
@@ -84,12 +85,14 @@ void cpu_idle(void) {/* endless idle loop with no priority at all */ while (1 ) { +rcu_idle_enter ();while (!need_resched ()) {check_pgt_cache ();if (!frv_dma_inprogress && idle)idle (); } +rcu_idle_exit ();schedule_preempt_disabled (); }
arch/h8300/kernel/process.c +3 -0
@@ -36,6 +36,7 @@#include <linux/reboot.h> #include <linux/fs.h> #include <linux/slab.h> +#include <linux/rcupdate.h> #include <asm/uaccess.h> #include <asm/traps.h>
@@ -78,8 +79,10 @@ void (*idle)(void) = default_idle;void cpu_idle (void ) {while (1 ) { +rcu_idle_enter ();while (!need_resched ())idle (); +rcu_idle_exit ();schedule_preempt_disabled (); } }
arch/ia64/kernel/process.c +3 -0
@@ -29,6 +29,7 @@#include <linux/kdebug.h> #include <linux/utsname.h> #include <linux/tracehook.h> +#include <linux/rcupdate.h> #include <asm/cpu.h> #include <asm/delay.h>
@@ -301,6 +302,7 @@ cpu_idle (void)/* endless idle loop with no priority at all */ while (1 ) { +rcu_idle_enter ();if (can_do_pal_halt) {current_thread_info ()->status &= ~TS_POLLING ;/*
@@ -331,6 +333,7 @@ cpu_idle (void)normal_xtp ();#endif } +rcu_idle_exit ();schedule_preempt_disabled ();check_pgt_cache ();if (cpu_is_offline (cpu))
arch/m32r/kernel/process.c +3 -0
@@ -26,6 +26,7 @@#include <linux/ptrace.h> #include <linux/unistd.h> #include <linux/hardirq.h> +#include <linux/rcupdate.h> #include <asm/io.h> #include <asm/uaccess.h>
@@ -82,6 +83,7 @@ void cpu_idle (void) {/* endless idle loop with no priority at all */ while (1 ) { +rcu_idle_enter ();while (!need_resched ()) {void (*idle)(void ) = pm_idle;
@@ -90,6 +92,7 @@ void cpu_idle (void)idle (); } +rcu_idle_exit ();schedule_preempt_disabled (); } }
arch/m68k/kernel/process.c +3 -0
@@ -25,6 +25,7 @@#include <linux/reboot.h> #include <linux/init_task.h> #include <linux/mqueue.h> +#include <linux/rcupdate.h> #include <asm/uaccess.h> #include <asm/traps.h>
@@ -75,8 +76,10 @@ void cpu_idle(void) {/* endless idle loop with no priority at all */ while (1 ) { +rcu_idle_enter ();while (!need_resched ())idle (); +rcu_idle_exit ();schedule_preempt_disabled (); } }
arch/mips/Makefile +1 -1
@@ -225,7 +225,7 @@ KBUILD_CPPFLAGS += -D"DATAOFFSET=$(if $(dataoffset-y),$(dataoffset-y),0)" LDFLAGS += -m $(ld-emul) ifdef CONFIG_MIPS -CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -xc /dev/null | \ +CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \ egrep -vw '__GNUC_(|MINOR_|PATCHLEVEL_)_' | \ sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/") ifdef CONFIG_64BIT
arch/mips/kernel/Makefile +1 -1
@@ -104,7 +104,7 @@ obj-$(CONFIG_MIPS_MACHINE) += mips_machine.o obj-$(CONFIG_OF) += prom.o -CFLAGS_cpu-bugs64.o = $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi) +CFLAGS_cpu-bugs64.o = $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -x c /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi) obj-$(CONFIG_HAVE_STD_PC_SERIAL_PORT) += 8250-platform.o
arch/mn10300/Makefile +1 -1
@@ -26,7 +26,7 @@ CHECKFLAGS += PROCESSOR := unset UNIT := unset -KBUILD_CFLAGS += -mam33 -mmem-funcs -DCPU=AM33 +KBUILD_CFLAGS += -mam33 -DCPU=AM33 $(call cc-option,-mmem-funcs,) KBUILD_AFLAGS += -mam33 -DCPU=AM33 ifeq ($(CONFIG_MN10300_CURRENT_IN_E2),y)
arch/mn10300/kernel/process.c +3 -0
@@ -25,6 +25,7 @@#include <linux/err.h> #include <linux/fs.h> #include <linux/slab.h> +#include <linux/rcupdate.h> #include <asm/uaccess.h> #include <asm/pgtable.h> #include <asm/io.h>
@@ -107,6 +108,7 @@ void cpu_idle(void) {/* endless idle loop with no priority at all */ for (;;) { +rcu_idle_enter ();while (!need_resched ()) {void (*idle)(void );
@@ -121,6 +123,7 @@ void cpu_idle(void) }idle (); } +rcu_idle_exit ();schedule_preempt_disabled (); }
arch/parisc/kernel/process.c +3 -0
@@ -48,6 +48,7 @@#include <linux/unistd.h> #include <linux/kallsyms.h> #include <linux/uaccess.h> +#include <linux/rcupdate.h> #include <asm/io.h> #include <asm/asm-offsets.h>
@@ -69,8 +70,10 @@ void cpu_idle(void)/* endless idle loop with no priority at all */ while (1 ) { +rcu_idle_enter ();while (!need_resched ())barrier (); +rcu_idle_exit ();schedule_preempt_disabled ();check_pgt_cache (); }
arch/powerpc/include/asm/pci-bridge.h +8 -0
@@ -181,6 +181,14 @@ static inline int pci_device_from_OF_node(struct device_node *np,#if defined(CONFIG_EEH )static inline struct eeh_dev *of_node_to_eeh_dev (struct device_node *dn) { +/* +* For those OF nodes whose parent isn't PCI bridge, they +* don't have PCI_DN actually. So we have to skip them for +* any EEH operations. +*/ +if (!dn || !PCI_DN (dn)) +return NULL ; +return PCI_DN (dn)->edev; }#endif
arch/powerpc/platforms/pseries/eeh.c +1 -1
@@ -1029,7 +1029,7 @@ static void eeh_add_device_early(struct device_node *dn) {struct pci_controller *phb; -if (!dn || !of_node_to_eeh_dev (dn)) +if (!of_node_to_eeh_dev (dn))return ; phb =of_node_to_eeh_dev (dn)->phb;
arch/score/kernel/process.c +3 -1
@@ -27,6 +27,7 @@#include <linux/reboot.h> #include <linux/elfcore.h> #include <linux/pm.h> +#include <linux/rcupdate.h> void (*pm_power_off)(void );EXPORT_SYMBOL (pm_power_off);
@@ -50,9 +51,10 @@ void __noreturn cpu_idle(void) {/* endless idle loop with no priority at all */ while (1 ) { +rcu_idle_enter ();while (!need_resched ())barrier (); - +rcu_idle_exit ();schedule_preempt_disabled (); } }
arch/x86/Makefile +1 -1
@@ -85,7 +85,7 @@ endif ifdef CONFIG_X86_X32 x32_ld_ok := $(call try-run,\ /bin/echo -e '1: .quad 1b' | \ - $(CC) $(KBUILD_AFLAGS) -c -xassembler -o "$$TMP" - && \ + $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" - && \ $(OBJCOPY) -O elf32-x86-64 "$$TMP" "$$TMPO" && \ $(LD) -m elf32_x86_64 "$$TMPO" -o "$$TMP",y,n) ifeq ($(x32_ld_ok),y)
arch/x86/boot/compressed/Makefile +3 -0
@@ -28,6 +28,9 @@ VMLINUX_OBJS = $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o \ $(obj)/string.o $(obj)/cmdline.o $(obj)/early_serial_console.o \ $(obj)/piggy.o +$(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone +$(obj)/efi_stub_$(BITS).o: KBUILD_CLFAGS += -fshort-wchar -mno-red-zone + ifeq ($(CONFIG_EFI_STUB), y) VMLINUX_OBJS += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o endif
arch/x86/include/asm/pgtable.h +8 -3
@@ -146,8 +146,7 @@ static inline unsigned long pmd_pfn(pmd_t pmd)static inline int pmd_large (pmd_t pte) { -return (pmd_flags (pte) & (_PAGE_PSE | _PAGE_PRESENT)) == - (_PAGE_PSE | _PAGE_PRESENT); +return pmd_flags (pte) & _PAGE_PSE; }#ifdef CONFIG_TRANSPARENT_HUGEPAGE
@@ -415,7 +414,13 @@ static inline int pte_hidden(pte_t pte)static inline int pmd_present (pmd_t pmd) { -return pmd_flags (pmd) & _PAGE_PRESENT; +/* +* Checking for _PAGE_PSE is needed too because +* split_huge_page will temporarily clear the present bit (but +* the _PAGE_PSE flag will remain set at all times while the +* _PAGE_PRESENT bit is clear). +*/ +return pmd_flags (pmd) & (_PAGE_PRESENT | _PAGE_PROTNONE | _PAGE_PSE); }static inline int pmd_none (pmd_t pmd)
arch/x86/platform/efi/efi.c +1 -0
@@ -890,6 +890,7 @@ void __init efi_enter_virtual_mode(void)* * Call EFI services through wrapper functions. */ + efi.runtime_version = efi_systab.fw_revision; efi.get_time = virt_efi_get_time; efi.set_time = virt_efi_set_time; efi.get_wakeup_time = virt_efi_get_wakeup_time;
arch/xtensa/kernel/process.c +3 -0
@@ -31,6 +31,7 @@#include <linux/mqueue.h> #include <linux/fs.h> #include <linux/slab.h> +#include <linux/rcupdate.h> #include <asm/pgtable.h> #include <asm/uaccess.h>
@@ -110,8 +111,10 @@ void cpu_idle(void)/* endless idle loop with no priority at all */ while (1 ) { +rcu_idle_enter ();while (!need_resched ())platform_idle (); +rcu_idle_exit ();schedule_preempt_disabled (); } }
drivers/acpi/bus.c +6 -2
@@ -954,8 +954,6 @@ static int __init acpi_bus_init(void) status =acpi_ec_ecdt_probe ();/* Ignore result. Not having an ECDT is not fatal. */ -acpi_bus_osc_support (); - status =acpi_initialize_objects (ACPI_FULL_INITIALIZATION );if (ACPI_FAILURE (status)) { printk(KERN_ERR PREFIX "Unable to initialize ACPI objects\n");
@@ -963,6 +961,12 @@ static int __init acpi_bus_init(void) }/* +* _OSC method may exist in module level code, +* so it must be run after ACPI_FULL_INITIALIZATION +*/ +acpi_bus_osc_support (); + +/* * _PDC control method may load dynamic SSDT tables, * and we need to install the table handler before that. */
drivers/base/power/main.c +1 -1
@@ -984,7 +984,7 @@ int dpm_suspend_end(pm_message_t state) error =dpm_suspend_noirq (state);if (error) { -dpm_resume_early (state); +dpm_resume_early (resume_event (state));return error; }
drivers/block/aoe/aoecmd.c +1 -0
@@ -35,6 +35,7 @@ new_skb(ulong len)skb_reset_mac_header (skb);skb_reset_network_header (skb); skb->protocol =__constant_htons (ETH_P_AOE ); +skb_checksum_none_assert (skb); }return skb; }
drivers/dma/dmaengine.c +1 -1
@@ -578,7 +578,7 @@ void dmaengine_get(void)list_del_rcu (&device->global_node);break ; }else if (err) -pr_err ("%s: failed to get %s: (%d)\n" , +pr_debug ("%s: failed to get %s: (%d)\n" , __func__,dma_chan_name (chan), err); } }
drivers/gpu/drm/drm_crtc.c +4 -4
@@ -1028,15 +1028,15 @@ void drm_mode_config_cleanup(struct drm_device *dev) fb->funcs->destroy (fb); } -list_for_each_entry_safe (crtc, ct, &dev->mode_config.crtc_list, head) { - crtc->funcs->destroy (crtc); - } -list_for_each_entry_safe (plane, plt, &dev->mode_config.plane_list, head) { plane->funcs->destroy (plane); } +list_for_each_entry_safe (crtc, ct, &dev->mode_config.crtc_list, head) { + crtc->funcs->destroy (crtc); + } +idr_remove_all (&dev->mode_config.crtc_idr);idr_destroy (&dev->mode_config.crtc_idr); }
drivers/gpu/drm/radeon/radeon_irq_kms.c +10 -0
@@ -147,6 +147,16 @@ static bool radeon_msi_ok(struct radeon_device *rdev) (rdev->pdev->subsystem_device == 0x01fd))return true; +/* Gateway RS690 only seems to work with MSIs. */ +if ((rdev->pdev->device ==0x791f ) && + (rdev->pdev->subsystem_vendor ==0x107b ) && + (rdev->pdev->subsystem_device ==0x0185 )) +return true; + +/* try and enable MSIs by default on all RS690s */ +if (rdev->family ==CHIP_RS690 ) +return true; +/* RV515 seems to have MSI issues where it loses * MSI rearms occasionally. This leads to lockups and freezes. * disable it by default.
drivers/gpu/drm/radeon/radeon_pm.c +6 -2
@@ -567,7 +567,9 @@ void radeon_pm_suspend(struct radeon_device *rdev)void radeon_pm_resume (struct radeon_device *rdev) {/* set up the default clocks if the MC ucode is loaded */ -if (ASIC_IS_DCE5 (rdev) && rdev->mc_fw) { +if ((rdev->family >=CHIP_BARTS ) && + (rdev->family <=CHIP_CAYMAN ) && + rdev->mc_fw) {if (rdev->pm.default_vddc)radeon_atom_set_voltage (rdev, rdev->pm.default_vddc,SET_VOLTAGE_TYPE_ASIC_VDDC );
@@ -622,7 +624,9 @@ int radeon_pm_init(struct radeon_device *rdev)radeon_pm_print_states (rdev);radeon_pm_init_profile (rdev);/* set up the default clocks if the MC ucode is loaded */ -if (ASIC_IS_DCE5 (rdev) && rdev->mc_fw) { +if ((rdev->family >=CHIP_BARTS ) && + (rdev->family <=CHIP_CAYMAN ) && + rdev->mc_fw) {if (rdev->pm.default_vddc)radeon_atom_set_voltage (rdev, rdev->pm.default_vddc,SET_VOLTAGE_TYPE_ASIC_VDDC );
drivers/gpu/drm/savage/savage_bci.c +2 -0
@@ -547,6 +547,8 @@ int savage_driver_load(struct drm_device *dev, unsigned long chipset) dev_priv->chipset = (enum savage_family )chipset; +pci_set_master (dev->pdev); +return 0 ; }
drivers/iommu/intel-iommu.c +3 -1
@@ -588,7 +588,9 @@ static void domain_update_iommu_coherency(struct dmar_domain *domain) {int i; - domain->iommu_coherency =1 ; + i =find_first_bit (domain->iommu_bmp, g_num_of_iommus); + + domain->iommu_coherency = i < g_num_of_iommus ?1 :0 ;for_each_set_bit (i, domain->iommu_bmp, g_num_of_iommus) {if (!ecap_coherent (g_iommus[i]->ecap)) {
drivers/media/rc/ite-cir.c +1 -1
@@ -1473,6 +1473,7 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id rdev =rc_allocate_device ();if (!rdev) goto failure; + itdev->rdev = rdev; ret = -ENODEV ;
@@ -1604,7 +1605,6 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_idif (ret) goto failure; - itdev->rdev = rdev;ite_pr (KERN_NOTICE ,"driver has been successfully loaded\n" );return 0 ;
drivers/media/video/gspca/pac7302.c +1 -0
@@ -945,6 +945,7 @@ static const struct usb_device_id device_table[] = { {USB_DEVICE(0x093a, 0x262a)}, {USB_DEVICE(0x093a, 0x262c)}, {USB_DEVICE(0x145f, 0x013c)}, + {USB_DEVICE(0x1ae7, 0x2001)}, /* SpeedLink Snappy Mic SL-6825-SBK */ {} };MODULE_DEVICE_TABLE (usb, device_table);
drivers/mfd/max8925-core.c +10 -0
@@ -18,12 +18,19 @@#include <linux/mfd/core.h> #include <linux/mfd/max8925.h> +static struct resource io_parent = { + .start =0 , + .end =0xffffffff , + .flags =IORESOURCE_IO , +}; +static struct resource backlight_resources[] = { { .name ="max8925-backlight" , .start =MAX8925_WLED_MODE_CNTL , .end =MAX8925_WLED_CNTL , .flags =IORESOURCE_IO , + .parent = &io_parent, }, };
@@ -42,6 +49,7 @@ static struct resource touch_resources[] = { .start = MAX8925_TSC_IRQ, .end = MAX8925_ADC_RES_END, .flags = IORESOURCE_IO, + .parent = &io_parent, }, };
@@ -60,6 +68,7 @@ static struct resource power_supply_resources[] = { .start = MAX8925_CHG_IRQ1, .end = MAX8925_CHG_IRQ1_MASK, .flags = IORESOURCE_IO, + .parent = &io_parent, }, };
@@ -118,6 +127,7 @@ static struct mfd_cell onkey_devs[] = { .start = MAX8925_##_start, \ .end = MAX8925_##_end, \ .flags = IORESOURCE_IO, \ + .parent = &io_parent, \ }static struct resource regulator_resources[] = {
drivers/mmc/host/omap_hsmmc.c +1 -2
@@ -2097,8 +2097,7 @@ static int omap_hsmmc_suspend(struct device *dev)if (ret) { host->suspended =0 ;if (host->pdata->resume) { - ret = host->pdata->resume (dev, host->slot_id); -if (ret) +if (host->pdata->resume (dev, host->slot_id))dev_dbg (dev,"Unmask interrupt failed\n" ); } goto err;
drivers/mmc/host/sh_mmcif.c +4 -0
@@ -1191,6 +1191,10 @@ static irqreturn_t sh_mmcif_intr(int irq, void *dev_id) host->sd_error = true;dev_dbg (&host->pd->dev,"int err state = %08x\n" , state); } +if (host->state ==STATE_IDLE ) { +dev_info (&host->pd->dev,"Spurious IRQ status 0x%x" , state); +return IRQ_HANDLED ; + }if (state & ~(INT_CMD12RBE |INT_CMD12CRE )) {if (!host->dma_active)return IRQ_WAKE_THREAD ;
drivers/mtd/maps/autcpu12-nvram.c +11 -8
@@ -43,7 +43,8 @@ struct map_info autcpu12_sram_map = {static int __init init_autcpu12_sram (void ) { -int err, save0, save1; +map_word tmp, save0, save1; +int err; autcpu12_sram_map.virt =ioremap (0x12000000 ,SZ_128K );if (!autcpu12_sram_map.virt) {
@@ -51,7 +52,7 @@ static int __init init_autcpu12_sram (void) err = -EIO ; goto out; } -simple_map_init (&autcpu_sram_map); +simple_map_init (&autcpu12_sram_map);/* * Check for 32K/128K
@@ -61,20 +62,22 @@ static int __init init_autcpu12_sram (void)* Read and check result on ofs 0x0 * Restore contents */ - save0 =map_read32 (&autcpu12_sram_map,0 ); - save1 =map_read32 (&autcpu12_sram_map,0x10000 ); -map_write32 (&autcpu12_sram_map,~save0,0x10000 ); + save0 =map_read (&autcpu12_sram_map,0 ); + save1 =map_read (&autcpu12_sram_map,0x10000 ); + tmp.x[0 ] = ~save0.x[0 ]; +map_write (&autcpu12_sram_map, tmp,0x10000 );/* if we find this pattern on 0x0, we have 32K size * restore contents and exit */ -if (map_read32 (&autcpu12_sram_map,0 ) != save0) { -map_write32 (&autcpu12_sram_map,save0,0x0 ); + tmp =map_read (&autcpu12_sram_map,0 ); +if (!map_word_equal (&autcpu12_sram_map, tmp, save0)) { +map_write (&autcpu12_sram_map, save0,0x0 ); goto map; }/* We have a 128K found, restore 0x10000 and set size * to 128K */ -map_write32 (&autcpu12_sram_map,save1,0x10000 ); +map_write (&autcpu12_sram_map, save1,0x10000 ); autcpu12_sram_map.size =SZ_128K ; map:
drivers/mtd/mtdpart.c +4 -1
@@ -709,6 +709,8 @@ static const char *default_mtd_part_types[] = {* partition parsers, specified in @types. However, if @types is %NULL, then * the default list of parsers is used. The default list contains only the * "cmdlinepart" and "ofpart" parsers ATM. +* Note: If there are more then one parser in @types, the kernel only takes the +* partitions parsed out by the first parser. * * This function may return: * o a negative error code in case of failure
@@ -733,11 +735,12 @@ int parse_mtd_partitions(struct mtd_info *master, const char **types,if (!parser)continue ; ret = (*parser->parse_fn)(master, pparts, data); +put_partition_parser (parser);if (ret >0 ) {printk (KERN_NOTICE "%d %s partitions found on MTD device %s\n" , ret, parser->name, master->name); +break ; } -put_partition_parser (parser); }return ret; }
drivers/mtd/nand/nand_bbt.c +1 -1
@@ -390,7 +390,7 @@ static int read_abs_bbts(struct mtd_info *mtd, uint8_t *buf,/* Read the mirror version, if available */ if (md && (md->options &NAND_BBT_VERSION )) {scan_read_raw (mtd, buf, (loff_t )md->pages[0 ] << this->page_shift, - mtd->writesize, td); + mtd->writesize, md); md->version[0 ] = buf[bbt_get_ver_offs (mtd, md)];pr_info ("Bad block table at page %d, version 0x%02X\n" , md->pages[0 ], md->version[0 ]);
drivers/mtd/nand/nandsim.c +1 -0
@@ -2355,6 +2355,7 @@ static int __init ns_init_module(void)uint64_t new_size = (uint64_t )nsmtd->erasesize << overridesize;if (new_size >> overridesize != nsmtd->erasesize) {NS_ERR ("overridesize is too big\n" ); + retval = -EINVAL ; goto err_exit; }/* N.B. This relies on nand_scan not doing anything with the size before we change it */
drivers/mtd/nand/omap2.c +2 -1
@@ -1133,7 +1133,8 @@ static int omap_nand_remove(struct platform_device *pdev)/* Release NAND device, its internal structures and partitions */ nand_release (&info->mtd);iounmap (info->nand.IO_ADDR_R); -kfree (&info->mtd); +release_mem_region (info->phys_base,NAND_IO_SIZE ); +kfree (info);return 0 ; }
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +7 -5
@@ -571,14 +571,16 @@ drop:static void bnx2x_csum_validate (struct sk_buff *skb,union eth_rx_cqe *cqe,struct bnx2x_fastpath *fp) { -/* Do nothing if no IP/L4 csum validation was done */ - +/* Do nothing if no L4 csum validation was done. +* We do not check whether IP csum was validated. For IPv4 we assume +* that if the card got as far as validating the L4 csum, it also +* validated the IP csum. IPv6 has no IP csum. +*/ if (cqe->fast_path_cqe.status_flags & - (ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG | -ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG )) +ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG )return ; -/* If both IP/L4 validation were done, check if an error was found. */ +/* If L4 validation was done, check if an error was found. */ if (cqe->fast_path_cqe.type_error_flags & (ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG |
drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c +4 -0
@@ -1370,6 +1370,10 @@ static void netxen_mask_aer_correctable(struct netxen_adapter *adapter)struct pci_dev *root = pdev->bus->self;u32 aer_pos; +/* root bus? */ +if (!root) +return ; +if (adapter->ahw.board_type !=NETXEN_BRDTYPE_P3_4_GB_MM && adapter->ahw.board_type !=NETXEN_BRDTYPE_P3_10G_TP )return ;
drivers/net/ethernet/realtek/r8169.c +19 -2
@@ -319,6 +319,8 @@ enum rtl_registers { Config0 =0x51 , Config1 =0x52 , Config2 =0x53 , +#define PME_SIGNAL (1 << 5) /* 8168c and later */ + Config3 =0x54 , Config4 =0x55 , Config5 = 0x56,
@@ -1400,7 +1402,6 @@ static void __rtl8169_set_wol(struct rtl8169_private *tp, u32 wolopts)u16 reg;u8 mask; } cfg[] = { - { WAKE_ANY, Config1, PMEnable }, { WAKE_PHY, Config3, LinkUp }, { WAKE_MAGIC, Config3, MagicPacket }, { WAKE_UCAST, Config5, UWF },
@@ -1408,16 +1409,32 @@ static void __rtl8169_set_wol(struct rtl8169_private *tp, u32 wolopts) { WAKE_MCAST, Config5, MWF }, { WAKE_ANY, Config5, LanWake } }; +u8 options;RTL_W8 (Cfg9346, Cfg9346_Unlock);for (i =0 ; i <ARRAY_SIZE (cfg); i++) { -u8 options =RTL_R8 (cfg[i].reg) & ~cfg[i].mask; + options =RTL_R8 (cfg[i].reg) & ~cfg[i].mask;if (wolopts & cfg[i].opt) options |= cfg[i].mask;RTL_W8 (cfg[i].reg, options); } +switch (tp->mac_version) { + case RTL_GIGA_MAC_VER_01 ... RTL_GIGA_MAC_VER_17: + options =RTL_R8 (Config1) & ~PMEnable; +if (wolopts) + options |= PMEnable; +RTL_W8 (Config1, options); +break ; +default : + options =RTL_R8 (Config2) & ~PME_SIGNAL ; +if (wolopts) + options |=PME_SIGNAL ; +RTL_W8 (Config2, options); +break ; + } +RTL_W8 (Cfg9346, Cfg9346_Lock); }
drivers/net/ethernet/ti/davinci_cpdma.c +1 -0
@@ -851,6 +851,7 @@ int cpdma_chan_stop(struct cpdma_chan *chan) next_dma =desc_read (desc, hw_next); chan->head =desc_from_phys (pool, next_dma); + chan->count--; chan->stats.teardown_dequeue++;/* issue callback without locks held */
drivers/net/ppp/pppoe.c +1 -1
@@ -576,7 +576,7 @@ static int pppoe_release(struct socket *sock) po =pppox_sk (sk); -if (sk->sk_state & (PPPOX_CONNECTED |PPPOX_BOUND )) { +if (sk->sk_state & (PPPOX_CONNECTED |PPPOX_BOUND |PPPOX_ZOMBIE )) {dev_put (po->pppoe_dev); po->pppoe_dev =NULL ; }
drivers/net/rionet.c +17 -3
@@ -79,6 +79,7 @@ static int rionet_capable = 1;* on system trade-offs. */ static struct rio_dev **rionet_active; +static int nact;/* total number of active rionet peers */ #define is_rionet_capable (src_ops, dst_ops) \ ((src_ops & RIO_SRC_OPS_DATA_MSG) && \
@@ -175,6 +176,7 @@ static int rionet_start_xmit(struct sk_buff *skb, struct net_device *ndev)struct ethhdr *eth = (struct ethhdr *)skb->data;u16 destid;unsigned long flags; +int add_num =1 ;local_irq_save (flags);if (!spin_trylock (&rnet->tx_lock)) {
@@ -182,7 +184,10 @@ static int rionet_start_xmit(struct sk_buff *skb, struct net_device *ndev)return NETDEV_TX_LOCKED ; } -if ((rnet->tx_cnt +1 ) >RIONET_TX_RING_SIZE ) { +if (is_multicast_ether_addr (eth->h_dest)) + add_num = nact; + +if ((rnet->tx_cnt + add_num) >RIONET_TX_RING_SIZE ) {netif_stop_queue (ndev);spin_unlock_irqrestore (&rnet->tx_lock, flags); printk(KERN_ERR "%s: BUG! Tx Ring full when queue awake!\n",
@@ -191,11 +196,16 @@ static int rionet_start_xmit(struct sk_buff *skb, struct net_device *ndev) }if (is_multicast_ether_addr (eth->h_dest)) { +int count =0 ;for (i =0 ; i <RIO_MAX_ROUTE_ENTRIES (rnet->mport->sys_size); i++) -if (rionet_active[i]) +if (rionet_active[i]) {rionet_queue_tx_msg (skb, ndev, rionet_active[i]); +if (count) +atomic_inc (&skb->users); + count++; + } }else if (RIONET_MAC_MATCH (eth->h_dest)) { destid =RIONET_GET_DESTID (eth->h_dest);if (rionet_active[destid])
@@ -220,14 +230,17 @@ static void rionet_dbell_event(struct rio_mport *mport, void *dev_id, u16 sid, uif (info ==RIONET_DOORBELL_JOIN ) {if (!rionet_active[sid]) {list_for_each_entry (peer, &rionet_peers, node) { -if (peer->rdev->destid == sid) +if (peer->rdev->destid == sid) { rionet_active[sid] = peer->rdev; + nact++; + } }rio_mport_send_doorbell (mport, sid,RIONET_DOORBELL_JOIN ); } }else if (info ==RIONET_DOORBELL_LEAVE ) { rionet_active[sid] =NULL ; + nact--; }else {if (netif_msg_intr (rnet)) printk(KERN_WARNING "%s: unhandled doorbell\n",
@@ -523,6 +536,7 @@ static int rionet_probe(struct rio_dev *rdev, const struct rio_device_id *id) rc =rionet_setup_netdev (rdev->net->hport, ndev); rionet_check =1 ; + nact =0 ; }/*
drivers/net/usb/sierra_net.c +1 -1
@@ -678,7 +678,7 @@ static int sierra_net_get_fw_attr(struct usbnet *dev, u16 *datap)return -EIO ; } - *datap = *attrdata; + *datap =le16_to_cpu (*attrdata);kfree (attrdata);return result;
drivers/net/wan/ixp4xx_hss.c +1 -0
@@ -10,6 +10,7 @@#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt +#include <linux/module.h> #include <linux/bitops.h> #include <linux/cdev.h> #include <linux/dma-mapping.h>
drivers/pci/hotplug/acpiphp_glue.c +9 -4
@@ -132,6 +132,15 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)if (!acpi_pci_check_ejectable (pbus, handle) && !is_dock_device (handle))return AE_OK ; + status =acpi_evaluate_integer (handle,"_ADR" ,NULL , &adr); +if (ACPI_FAILURE (status)) { +warn ("can't evaluate _ADR (%#x)\n" , status); +return AE_OK ; + } + + device = (adr >>16 ) &0xffff ; + function = adr &0xffff ; + pdev = pbus->self;if (pdev &&pci_is_pcie (pdev)) { tmp =acpi_find_root_bridge_handle (pdev);
@@ -144,10 +153,6 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv) } } -acpi_evaluate_integer (handle,"_ADR" ,NULL , &adr); - device = (adr >>16 ) &0xffff ; - function = adr &0xffff ; - newfunc =kzalloc (sizeof (struct acpiphp_func ),GFP_KERNEL );if (!newfunc)return AE_NO_MEMORY ;
drivers/pci/probe.c +4 -2
@@ -749,8 +749,10 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,/* Check if setup is sensible at all */ if (!pass && - (primary != bus->number || secondary <= bus->number)) { -dev_dbg (&dev->dev,"bus configuration invalid, reconfiguring\n" ); + (primary != bus->number || secondary <= bus->number || + secondary > subordinate)) { +dev_info (&dev->dev,"bridge configuration invalid ([bus %02x-%02x]), reconfiguring\n" , + secondary, subordinate); broken =1 ; }
drivers/s390/scsi/zfcp_aux.c +1 -0
@@ -519,6 +519,7 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,rwlock_init (&port->unit_list_lock);INIT_LIST_HEAD (&port->unit_list); +atomic_set (&port->units,0 );INIT_WORK (&port->gid_pn_work, zfcp_fc_port_did_lookup);INIT_WORK (&port->test_link_work, zfcp_fc_link_test_work);
drivers/s390/scsi/zfcp_ccw.c +63 -10
137 lines not on this page · raw message
drivers/s390/scsi/zfcp_cfdc.c +1 -1
@@ -293,7 +293,7 @@ void zfcp_cfdc_adapter_access_changed(struct zfcp_adapter *adapter) }read_unlock_irqrestore (&adapter->port_list_lock, flags); -shost_for_each_device (sdev, port->adapter->scsi_host) { +shost_for_each_device (sdev, adapter->scsi_host) { zfcp_sdev =sdev_to_zfcp (sdev); status =atomic_read (&zfcp_sdev->status); if ((status & ZFCP_STATUS_COMMON_ACCESS_DENIED) ||
drivers/s390/scsi/zfcp_dbf.c +21 -1
@@ -191,7 +191,7 @@ void zfcp_dbf_hba_def_err(struct zfcp_adapter *adapter, u64 req_id, u16 scount, length =min ((u16 )sizeof (struct qdio_buffer ), (u16 )ZFCP_DBF_PAY_MAX_REC ); -while ((char *)pl[payload->counter] && payload->counter < scount) { +while (payload->counter < scount && (char *)pl[payload->counter]) {memcpy (payload->data, (char *)pl[payload->counter], length);debug_event (dbf->pay,1 , payload,zfcp_dbf_plen (length)); payload->counter++;
@@ -200,6 +200,26 @@ void zfcp_dbf_hba_def_err(struct zfcp_adapter *adapter, u64 req_id, u16 scount,spin_unlock_irqrestore (&dbf->pay_lock, flags); } +/** +* zfcp_dbf_hba_basic - trace event for basic adapter events +* @adapter: pointer to struct zfcp_adapter +*/ +void zfcp_dbf_hba_basic (char *tag,struct zfcp_adapter *adapter) +{ +struct zfcp_dbf *dbf = adapter->dbf; +struct zfcp_dbf_hba *rec = &dbf->hba_buf; +unsigned long flags; + +spin_lock_irqsave (&dbf->hba_lock, flags); +memset (rec,0 ,sizeof (*rec)); + +memcpy (rec->tag, tag,ZFCP_DBF_TAG_LEN ); + rec->id =ZFCP_DBF_HBA_BASIC ; + +debug_event (dbf->hba,1 , rec,sizeof (*rec)); +spin_unlock_irqrestore (&dbf->hba_lock, flags); +} + static void zfcp_dbf_set_common(struct zfcp_dbf_rec *rec, struct zfcp_adapter *adapter, struct zfcp_port *port,
drivers/s390/scsi/zfcp_dbf.h +1 -0
@@ -154,6 +154,7 @@ enum zfcp_dbf_hba_id {ZFCP_DBF_HBA_RES =1 ,ZFCP_DBF_HBA_USS =2 ,ZFCP_DBF_HBA_BIT =3 , + ZFCP_DBF_HBA_BASIC = 4, };/**
drivers/s390/scsi/zfcp_def.h +2 -0
@@ -77,6 +77,7 @@ struct zfcp_reqlist;#define ZFCP_STATUS_ADAPTER_SIOSL_ISSUED 0x00000004#define ZFCP_STATUS_ADAPTER_XCONFIG_OK 0x00000008#define ZFCP_STATUS_ADAPTER_HOST_CON_INIT 0x00000010 +#define ZFCP_STATUS_ADAPTER_SUSPENDED 0x00000040#define ZFCP_STATUS_ADAPTER_ERP_PENDING 0x00000100#define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200#define ZFCP_STATUS_ADAPTER_DATA_DIV_ENABLED 0x00000400
@@ -204,6 +205,7 @@ struct zfcp_port {struct zfcp_adapter *adapter;/* adapter used to access port */ struct list_head unit_list;/* head of logical unit list */ rwlock_t unit_list_lock;/* unit list lock */ +atomic_t units;/* zfcp_unit count */ atomic_t status;/* status of this remote port */ u64 wwnn;/* WWNN if known */ u64 wwpn;/* WWPN */
drivers/s390/scsi/zfcp_ext.h +2 -0
@@ -54,6 +54,7 @@ extern void zfcp_dbf_hba_fsf_res(char *, struct zfcp_fsf_req *);extern void zfcp_dbf_hba_bit_err (char *,struct zfcp_fsf_req *);extern void zfcp_dbf_hba_berr (struct zfcp_dbf *,struct zfcp_fsf_req *);extern void zfcp_dbf_hba_def_err (struct zfcp_adapter *,u64 ,u16 ,void **); +extern void zfcp_dbf_hba_basic (char *,struct zfcp_adapter *);extern void zfcp_dbf_san_req (char *,struct zfcp_fsf_req *,u32 );extern void zfcp_dbf_san_res (char *,struct zfcp_fsf_req *);extern void zfcp_dbf_san_in_els (char *,struct zfcp_fsf_req *);
@@ -158,6 +159,7 @@ extern void zfcp_scsi_dif_sense_error(struct scsi_cmnd *, int);extern struct attribute_group zfcp_sysfs_unit_attrs;extern struct attribute_group zfcp_sysfs_adapter_attrs;extern struct attribute_group zfcp_sysfs_port_attrs; +extern struct mutex zfcp_sysfs_port_units_mutex;extern struct device_attribute *zfcp_sysfs_sdev_attrs[];extern struct device_attribute *zfcp_sysfs_shost_attrs[];
drivers/s390/scsi/zfcp_fsf.c +48 -9
143 lines not on this page · raw message
drivers/s390/scsi/zfcp_qdio.c +10 -6
@@ -102,18 +102,22 @@ static void zfcp_qdio_int_resp(struct ccw_device *cdev, unsigned int qdio_err, {struct zfcp_qdio *qdio = (struct zfcp_qdio *) parm;struct zfcp_adapter *adapter = qdio->adapter; -struct qdio_buffer_element *sbale;int sbal_no, sbal_idx; -void *pl[ZFCP_QDIO_MAX_SBALS_PER_REQ +1 ]; -u64 req_id; -u8 scount;if (unlikely (qdio_err)) { -memset (pl,0 ,ZFCP_QDIO_MAX_SBALS_PER_REQ *sizeof (void *));if (zfcp_adapter_multi_buffer_active (adapter)) { +void *pl[ZFCP_QDIO_MAX_SBALS_PER_REQ +1 ]; +struct qdio_buffer_element *sbale; +u64 req_id; +u8 scount; + +memset (pl,0 , +ZFCP_QDIO_MAX_SBALS_PER_REQ *sizeof (void *)); sbale = qdio->res_q[idx]->element; req_id = (u64 ) sbale->addr; - scount = sbale->scount +1 ;/* incl. signaling SBAL */ + scount =min (sbale->scount +1 , +ZFCP_QDIO_MAX_SBALS_PER_REQ +1 ); +/* incl. signaling SBAL */ for (sbal_no =0 ; sbal_no < scount; sbal_no++) { sbal_idx = (idx + sbal_no) %
drivers/s390/scsi/zfcp_sysfs.c +16 -2
@@ -227,6 +227,8 @@ static ssize_t zfcp_sysfs_port_rescan_store(struct device *dev, static ZFCP_DEV_ATTR(adapter, port_rescan, S_IWUSR, NULL, zfcp_sysfs_port_rescan_store); +DEFINE_MUTEX (zfcp_sysfs_port_units_mutex); +static ssize_t zfcp_sysfs_port_remove_store (struct device *dev,struct device_attribute *attr,const char *buf,size_t count)
@@ -249,6 +251,16 @@ static ssize_t zfcp_sysfs_port_remove_store(struct device *dev,else retval =0 ; +mutex_lock (&zfcp_sysfs_port_units_mutex); +if (atomic_read (&port->units) >0 ) { + retval = -EBUSY ; +mutex_unlock (&zfcp_sysfs_port_units_mutex); + goto out; + } +/* port is about to be removed, so no more unit_add */ +atomic_set (&port->units,-1 ); +mutex_unlock (&zfcp_sysfs_port_units_mutex); +write_lock_irq (&adapter->port_list_lock);list_del (&port->list);write_unlock_irq (&adapter->port_list_lock);
@@ -289,12 +301,14 @@ static ssize_t zfcp_sysfs_unit_add_store(struct device *dev, { struct zfcp_port *port = container_of(dev, struct zfcp_port, dev);u64 fcp_lun; +int retval;if (strict_strtoull (buf,0 , (unsigned long long *) &fcp_lun))return -EINVAL ; -if (zfcp_unit_add (port, fcp_lun)) -return -EINVAL ; + retval =zfcp_unit_add (port, fcp_lun); +if (retval) +return retval;return count; }
drivers/s390/scsi/zfcp_unit.c +26 -10
@@ -104,7 +104,7 @@ static void zfcp_unit_release(struct device *dev) { struct zfcp_unit *unit = container_of(dev, struct zfcp_unit, dev); -put_device (&unit->port->dev); +atomic_dec (&unit->port->units);kfree (unit); }
@@ -119,16 +119,27 @@ static void zfcp_unit_release(struct device *dev)int zfcp_unit_add (struct zfcp_port *port,u64 fcp_lun) {struct zfcp_unit *unit; +int retval =0 ; + +mutex_lock (&zfcp_sysfs_port_units_mutex); +if (atomic_read (&port->units) ==-1 ) { +/* port is already gone */ + retval = -ENODEV ; + goto out; + } unit =zfcp_unit_find (port, fcp_lun);if (unit) {put_device (&unit->dev); -return -EEXIST ; + retval = -EEXIST ; + goto out; } unit =kzalloc (sizeof (struct zfcp_unit ),GFP_KERNEL ); -if (!unit) -return -ENOMEM ; +if (!unit) { + retval = -ENOMEM ; + goto out; + } unit->port = port; unit->fcp_lun = fcp_lun;
@@ -139,28 +150,33 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun)if (dev_set_name (&unit->dev,"0x%016llx" , (unsigned long long ) fcp_lun)) {kfree (unit); -return -ENOMEM ; + retval = -ENOMEM ; + goto out; } -get_device (&port->dev); -if (device_register (&unit->dev)) {put_device (&unit->dev); -return -ENOMEM ; + retval = -ENOMEM ; + goto out; }if (sysfs_create_group (&unit->dev.kobj, &zfcp_sysfs_unit_attrs)) {device_unregister (&unit->dev); -return -EINVAL ; + retval = -EINVAL ; + goto out; } +atomic_inc (&port->units);/* under zfcp_sysfs_port_units_mutex ! */ +write_lock_irq (&port->unit_list_lock);list_add_tail (&unit->list, &port->unit_list);write_unlock_irq (&port->unit_list_lock);zfcp_unit_scsi_scan (unit); -return 0 ; +out: +mutex_unlock (&zfcp_sysfs_port_units_mutex); +return retval; }/**
drivers/scsi/atp870u.c +10 -1
@@ -1173,7 +1173,16 @@ wait_io1:outw (val, tmport);outb (2 ,0x80 ); TCM_SYNC: -udelay (0x800 ); +/* +* The funny division into multiple delays is to accomodate +* arches like ARM where udelay() multiplies its argument by +* a large number to initialize a loop counter. To avoid +* overflow, the maximum supported udelay is 2000 microseconds. +* +* XXX it would be more polite to find a way to use msleep() +*/ +mdelay (2 ); +udelay (48 );if ((inb (tmport) &0x80 ) ==0x00 ) {/* bsy ? */ outw (0 , tmport--);outb (0 , tmport);
fs/cifs/cifs_unicode.c +22 -0
@@ -203,6 +203,27 @@ cifs_strtoUTF16(__le16 *to, const char *from, int len,int i;wchar_t wchar_to;/* needed to quiet sparse */ +/* special case for utf8 to handle no plane0 chars */ +if (!strcmp (codepage->charset,"utf8" )) { +/* +* convert utf8 -> utf16, we assume we have enough space +* as caller should have assumed conversion does not overflow +* in destination len is length in wchar_t units (16bits) +*/ + i =utf8s_to_utf16s (from, len,UTF16_LITTLE_ENDIAN , + (wchar_t *) to, len); + +/* if success terminate and exit */ +if (i >=0 ) + goto success; +/* +* if fails fall back to UCS encoding as this +* function should not return negative values +* currently can fail only if source contains +* invalid encoded characters +*/ + } +for (i =0 ; len && *from; i++, from += charlen, len -= charlen) { charlen = codepage->char2uni (from, len, &wchar_to);if (charlen <1 ) {
@@ -215,6 +236,7 @@ cifs_strtoUTF16(__le16 *to, const char *from, int len,put_unaligned_le16 (wchar_to, &to[i]); } +success:put_unaligned_le16 (0 , &to[i]);return i; }
fs/cifs/connect.c +9 -0
@@ -70,6 +70,7 @@ enum {/* Mount options that take no arguments */ Opt_user_xattr, Opt_nouser_xattr, Opt_forceuid, Opt_noforceuid, + Opt_forcegid, Opt_noforcegid, Opt_noblocksend, Opt_noautotune, Opt_hard, Opt_soft, Opt_perm, Opt_noperm, Opt_mapchars, Opt_nomapchars, Opt_sfu,
@@ -121,6 +122,8 @@ static const match_table_t cifs_mount_option_tokens = { { Opt_nouser_xattr, "nouser_xattr" }, { Opt_forceuid, "forceuid" }, { Opt_noforceuid, "noforceuid" }, + { Opt_forcegid, "forcegid" }, + { Opt_noforcegid, "noforcegid" }, { Opt_noblocksend, "noblocksend" }, { Opt_noautotune, "noautotune" }, { Opt_hard, "hard" },
@@ -1287,6 +1290,12 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,case Opt_noforceuid: override_uid =0 ;break ; +case Opt_forcegid: + override_gid =1 ; +break ; +case Opt_noforcegid: + override_gid =0 ; +break ;case Opt_noblocksend: vol->noblocksnd =1 ;break ;
fs/ext4/inode.c +16 -9
@@ -2386,6 +2386,16 @@ static int ext4_nonda_switch(struct super_block *sb) free_blocks =EXT4_C2B (sbi,percpu_counter_read_positive (&sbi->s_freeclusters_counter)); dirty_blocks =percpu_counter_read_positive (&sbi->s_dirtyclusters_counter); +/* +* Start pushing delalloc when 1/2 of free blocks are dirty. +*/ +if (dirty_blocks && (free_blocks <2 * dirty_blocks) && + !writeback_in_progress (sb->s_bdi) && +down_read_trylock (&sb->s_umount)) { +writeback_inodes_sb (sb,WB_REASON_FS_FREE_SPACE ); +up_read (&sb->s_umount); + } +if (2 * free_blocks <3 * dirty_blocks || free_blocks < (dirty_blocks +EXT4_FREECLUSTERS_WATERMARK )) {/*
@@ -2394,13 +2404,6 @@ static int ext4_nonda_switch(struct super_block *sb)*/ return 1 ; } -/* -* Even if we don't switch but are nearing capacity, -* start pushing delalloc when 1/2 of free blocks are dirty. -*/ -if (free_blocks <2 * dirty_blocks) -writeback_inodes_sb_if_idle (sb,WB_REASON_FS_FREE_SPACE ); -return 0 ; }
@@ -3889,6 +3892,7 @@ static int ext4_do_update_inode(handle_t *handle,struct ext4_inode_info *ei =EXT4_I (inode);struct buffer_head *bh = iloc->bh;int err =0 , rc, block; +int need_datasync =0 ;/* For fields not not tracking in the in-memory inode, * initialise them to zero for new inodes. */
@@ -3937,7 +3941,10 @@ static int ext4_do_update_inode(handle_t *handle, raw_inode->i_file_acl_high =cpu_to_le16 (ei->i_file_acl >>32 ); raw_inode->i_file_acl_lo =cpu_to_le32 (ei->i_file_acl); -ext4_isize_set (raw_inode, ei->i_disksize); +if (ei->i_disksize !=ext4_isize (raw_inode)) { +ext4_isize_set (raw_inode, ei->i_disksize); + need_datasync =1 ; + } if (ei->i_disksize > 0x7fffffffULL) { struct super_block *sb = inode->i_sb; if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
@@ -3988,7 +3995,7 @@ static int ext4_do_update_inode(handle_t *handle, err = rc;ext4_clear_inode_state (inode,EXT4_STATE_NEW ); -ext4_update_inode_fsync_trans (handle, inode,0 ); +ext4_update_inode_fsync_trans (handle, inode, need_datasync); out_brelse:brelse (bh);ext4_std_error (inode->i_sb, err);
fs/ext4/move_extent.c +53 -121
311 lines not on this page · raw message
fs/ext4/namei.c +0 -2
@@ -1801,9 +1801,7 @@ retry: err =PTR_ERR (inode);if (!IS_ERR (inode)) {init_special_inode (inode, inode->i_mode, rdev); -#ifdef CONFIG_EXT4_FS_XATTR inode->i_op = &ext4_special_inode_operations; -#endif err =ext4_add_nondir (handle, dentry, inode); }ext4_journal_stop (handle);
fs/ext4/resize.c +19 -7
@@ -200,8 +200,11 @@ static void free_flex_gd(struct ext4_new_flex_group_data *flex_gd)* be a partial of a flex group. * * @sb: super block of fs to which the groups belongs +* +* Returns 0 on a successful allocation of the metadata blocks in the +* block group. */ -static void ext4_alloc_group_tables (struct super_block *sb, +static int ext4_alloc_group_tables (struct super_block *sb,struct ext4_new_flex_group_data *flex_gd,int flexbg_size) {
@@ -226,6 +229,8 @@ static void ext4_alloc_group_tables(struct super_block *sb, (last_group & ~(flexbg_size - 1)))); next_group: group = group_data[0 ].group; +if (src_group >= group_data[0 ].group + flex_gd->count) +return -ENOSPC ; start_blk =ext4_group_first_block_no (sb, src_group); last_blk = start_blk + group_data[src_group - group].blocks_count;
@@ -235,7 +240,6 @@ next_group: start_blk += overhead; -BUG_ON (src_group >= group_data[0 ].group + flex_gd->count);/* We collect contiguous blocks as much as possible. */ src_group++;for (; src_group <= last_group; src_group++)
@@ -300,6 +304,7 @@ next_group: group_data[i].free_blocks_count); } } +return 0 ; } static struct buffer_head *bclean(handle_t *handle, struct super_block *sb,
@@ -451,6 +456,9 @@ static int setup_new_flex_group_blocks(struct super_block *sb, gdblocks =ext4_bg_num_gdb (sb, group); start =ext4_group_first_block_no (sb, group); +if (!ext4_bg_has_super (sb, group)) + goto handle_itb; +/* Copy all of the GDT blocks into the backup in this group */ for (j =0 , block = start +1 ; j < gdblocks; j++, block++) {struct buffer_head *gdb;
@@ -493,6 +501,7 @@ static int setup_new_flex_group_blocks(struct super_block *sb, goto out; } +handle_itb:/* Initialize group tables of the grop @group */ if (!(bg_flags[i] &EXT4_BG_INODE_ZEROED )) goto handle_bb;
@@ -1293,13 +1302,15 @@ exit_journal: err = err2;if (!err) { -int i; +int gdb_num = group /EXT4_DESC_PER_BLOCK (sb); +int gdb_num_end = ((group + flex_gd->count -1 ) / +EXT4_DESC_PER_BLOCK (sb)); +update_backups (sb, sbi->s_sbh->b_blocknr, (char *)es,sizeof (struct ext4_super_block )); -for (i =0 ; i < flex_gd->count; i++, group++) { +for (; gdb_num <= gdb_num_end; gdb_num++) {struct buffer_head *gdb_bh; -int gdb_num; - gdb_num = group /EXT4_BLOCKS_PER_GROUP (sb); + gdb_bh = sbi->s_group_desc[gdb_num];update_backups (sb, gdb_bh->b_blocknr, gdb_bh->b_data, gdb_bh->b_size);
@@ -1676,7 +1687,8 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)*/ while (ext4_setup_next_flex_gd (sb, flex_gd, n_blocks_count, flexbg_size)) { -ext4_alloc_group_tables (sb, flex_gd, flexbg_size); +if (ext4_alloc_group_tables (sb, flex_gd, flexbg_size) !=0 ) +break ; err =ext4_flex_group_add (sb, resize_inode, flex_gd);if (unlikely (err))break ;
fs/ext4/super.c +1 -1
@@ -1692,7 +1692,7 @@ static inline void ext4_show_quota_options(struct seq_file *seq,static const char *token2str (int token) { -static const struct match_token *t; +const struct match_token *t;for (t = tokens; t->token != Opt_err; t++)if (t->token == token && !strchr (t->pattern,'=' ))
fs/fs-writeback.c +1 -0
@@ -68,6 +68,7 @@ int writeback_in_progress(struct backing_dev_info *bdi) {return test_bit (BDI_writeback_running, &bdi->state); } +EXPORT_SYMBOL (writeback_in_progress);static inline struct backing_dev_info *inode_to_bdi (struct inode *inode) {
fs/jbd2/journal.c +5 -0
@@ -1317,6 +1317,11 @@ static void jbd2_mark_journal_empty(journal_t *journal)BUG_ON (!mutex_is_locked (&journal->j_checkpoint_mutex));read_lock (&journal->j_state_lock); +/* Is it already empty? */ +if (sb->s_start ==0 ) { +read_unlock (&journal->j_state_lock); +return ; + }jbd_debug (1 ,"JBD2: Marking journal as empty (seq %d)\n" , journal->j_tail_sequence);
fs/jffs2/wbuf.c +4 -4
@@ -1043,10 +1043,10 @@ int jffs2_check_oob_empty(struct jffs2_sb_info *c, ops.datbuf =NULL ; ret =mtd_read_oob (c->mtd, jeb->offset, &ops); -if (ret || ops.oobretlen != ops.ooblen) { +if ((ret && !mtd_is_bitflip (ret)) || ops.oobretlen != ops.ooblen) {pr_err ("cannot read OOB for EB at %08x, requested %zd bytes, read %zd bytes, error %d\n" , jeb->offset, ops.ooblen, ops.oobretlen, ret); -if (!ret) +if (!ret ||mtd_is_bitflip (ret)) ret = -EIO ;return ret; }
@@ -1085,10 +1085,10 @@ int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c, ops.datbuf =NULL ; ret =mtd_read_oob (c->mtd, jeb->offset, &ops); -if (ret || ops.oobretlen != ops.ooblen) { +if ((ret && !mtd_is_bitflip (ret)) || ops.oobretlen != ops.ooblen) {pr_err ("cannot read OOB for EB at %08x, requested %zd bytes, read %zd bytes, error %d\n" , jeb->offset, ops.ooblen, ops.oobretlen, ret); -if (!ret) +if (!ret ||mtd_is_bitflip (ret)) ret = -EIO ;return ret; }
fs/proc/page.c +7 -1
@@ -115,7 +115,13 @@ u64 stable_page_flags(struct page *page) u |=1 <<KPF_COMPOUND_TAIL ;if (PageHuge (page)) u |=1 <<KPF_HUGE ; -else if (PageTransCompound (page)) +/* +* PageTransCompound can be true for non-huge compound pages (slab +* pages or pages allocated by drivers with __GFP_COMP) because it +* just checks PG_head/PG_tail, so we need to check PageLRU to make +* sure a given page is a thp, not a non-huge compound page. +*/ +else if (PageTransCompound (page) &&PageLRU (compound_trans_head (page))) u |=1 <<KPF_THP ;/*
fs/udf/super.c +4 -1
@@ -1287,6 +1287,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,udf_err (sb,"error loading logical volume descriptor: " "Partition table too long (%u > %lu)\n" , table_len, sb->s_blocksize -sizeof (*lvd)); + ret =1 ; goto out_bh; }
@@ -1331,8 +1332,10 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block, UDF_ID_SPARABLE, strlen(UDF_ID_SPARABLE))) {if (udf_load_sparable_map (sb, map, - (struct sparablePartitionMap *)gpm) <0 ) + (struct sparablePartitionMap *)gpm) <0 ) { + ret =1 ; goto out_bh; + } } else if (!strncmp(upm2->partIdent.ident, UDF_ID_METADATA, strlen(UDF_ID_METADATA))) {
include/linux/mempolicy.h +1 -1
@@ -188,7 +188,7 @@ struct sp_node {struct shared_policy {struct rb_root root; -spinlock_t lock; +struct mutex mutex; };void mpol_shared_policy_init (struct shared_policy *sp,struct mempolicy *mpol);
include/linux/xfrm.h +2 -0
@@ -84,6 +84,8 @@ struct xfrm_replay_state {__u32 bitmap; }; +#define XFRMA_REPLAY_ESN_MAX 4096 +struct xfrm_replay_state_esn {unsigned int bmp_len;__u32 oseq;
include/net/xfrm.h +3 -0
@@ -269,6 +269,9 @@ struct xfrm_replay {int (*check)(struct xfrm_state *x,struct sk_buff *skb,__be32 net_seq); +int (*recheck)(struct xfrm_state *x, +struct sk_buff *skb, +__be32 net_seq);void (*notify)(struct xfrm_state *x,int event);int (*overflow)(struct xfrm_state *x,struct sk_buff *skb); };
kernel/cpuset.c +3 -0
@@ -2065,6 +2065,9 @@ static void scan_for_empty_cpusets(struct cpuset *root)* (of no affect) on systems that are actively using CPU hotplug * but making no active use of cpusets. * +* The only exception to this is suspend/resume, where we don't +* modify cpusets at all. +* * This routine ensures that top_cpuset.cpus_allowed tracks * cpu_active_mask on each CPU hotplug (cpuhp) event. *
kernel/rcutree.c +3 -1
@@ -295,7 +295,9 @@ cpu_has_callbacks_ready_to_invoke(struct rcu_data *rdp)static int cpu_needs_another_gp (struct rcu_state *rsp,struct rcu_data *rdp) { -return *rdp->nxttail[RCU_DONE_TAIL ] && !rcu_gp_in_progress (rsp); +return *rdp->nxttail[RCU_DONE_TAIL + +ACCESS_ONCE (rsp->completed) != rdp->completed] && + !rcu_gp_in_progress (rsp); }/*
kernel/sched/core.c +36 -4
@@ -6937,34 +6937,66 @@ int __init sched_create_sysfs_power_savings_entries(struct device *dev) }#endif /* CONFIG_SCHED_MC || CONFIG_SCHED_SMT */ +static int num_cpus_frozen;/* used to mark begin/end of suspend/resume */ +/* * Update cpusets according to cpu_active mask. If cpusets are * disabled, cpuset_update_active_cpus() becomes a simple wrapper * around partition_sched_domains(). +* +* If we come here as part of a suspend/resume, don't touch cpusets because we +* want to restore it back to its original state upon resume anyway. */ static int cpuset_cpu_active (struct notifier_block *nfb,unsigned long action,void *hcpu) { -switch (action & ~CPU_TASKS_FROZEN ) { +switch (action) { +case CPU_ONLINE_FROZEN : +case CPU_DOWN_FAILED_FROZEN : + +/* +* num_cpus_frozen tracks how many CPUs are involved in suspend +* resume sequence. As long as this is not the last online +* operation in the resume sequence, just build a single sched +* domain, ignoring cpusets. +*/ + num_cpus_frozen--; +if (likely (num_cpus_frozen)) { +partition_sched_domains (1 ,NULL ,NULL ); +break ; + } + +/* +* This is the last CPU online operation. So fall through and +* restore the original sched domains by considering the +* cpuset configurations. +*/ +case CPU_ONLINE :case CPU_DOWN_FAILED :cpuset_update_active_cpus (); -return NOTIFY_OK ; +break ;default :return NOTIFY_DONE ; } +return NOTIFY_OK ; }static int cpuset_cpu_inactive (struct notifier_block *nfb,unsigned long action,void *hcpu) { -switch (action & ~CPU_TASKS_FROZEN ) { +switch (action) {case CPU_DOWN_PREPARE :cpuset_update_active_cpus (); -return NOTIFY_OK ; +break ; +case CPU_DOWN_PREPARE_FROZEN : + num_cpus_frozen++; +partition_sched_domains (1 ,NULL ,NULL ); +break ;default :return NOTIFY_DONE ; } +return NOTIFY_OK ; }void __init sched_init_smp (void )
kernel/sched/stop_task.c +21 -1
@@ -27,8 +27,10 @@ static struct task_struct *pick_next_task_stop(struct rq *rq) {struct task_struct *stop = rq->stop; -if (stop && stop->on_rq) +if (stop && stop->on_rq) { + stop->se.exec_start = rq->clock_task;return stop; + }return NULL ; }
@@ -52,6 +54,21 @@ static void yield_task_stop(struct rq *rq)static void put_prev_task_stop (struct rq *rq,struct task_struct *prev) { +struct task_struct *curr = rq->curr; +u64 delta_exec; + + delta_exec = rq->clock_task - curr->se.exec_start; +if (unlikely ((s64 )delta_exec <0 )) + delta_exec =0 ; + +schedstat_set (curr->se.statistics.exec_max, +max (curr->se.statistics.exec_max, delta_exec)); + + curr->se.sum_exec_runtime += delta_exec; +account_group_exec_runtime (curr, delta_exec); + + curr->se.exec_start = rq->clock_task; +cpuacct_charge (curr, delta_exec); }static void task_tick_stop (struct rq *rq,struct task_struct *curr,int queued)
@@ -60,6 +77,9 @@ static void task_tick_stop(struct rq *rq, struct task_struct *curr, int queued)static void set_curr_task_stop (struct rq *rq) { +struct task_struct *stop = rq->stop; + + stop->se.exec_start = rq->clock_task; }static void switched_to_stop (struct rq *rq,struct task_struct *p)
kernel/sys.c +1 -0
@@ -365,6 +365,7 @@ EXPORT_SYMBOL(unregister_reboot_notifier);void kernel_restart (char *cmd) {kernel_restart_prepare (cmd); +disable_nonboot_cpus ();if (!cmd)printk (KERN_EMERG "Restarting system.\n" );else
kernel/workqueue.c +2 -0
@@ -1864,7 +1864,9 @@ __acquires(&gcwq->lock)spin_unlock_irq (&gcwq->lock); +smp_wmb ();/* paired with test_and_set_bit(PENDING) */ work_clear_pending (work); +lock_map_acquire_read (&cwq->wq->lockdep_map);lock_map_acquire (&lockdep_map);trace_workqueue_execute_start (work);
lib/gcd.c +3 -0
@@ -9,6 +9,9 @@ unsigned long gcd(unsigned long a, unsigned long b)if (a < b)swap (a, b); + +if (!b) +return a;while ((r = a % b) !=0 ) { a = b; b = r;
mm/hugetlb.c +2 -1
@@ -2431,7 +2431,8 @@ static int unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,* from page cache lookup which is in HPAGE_SIZE units. */ address = address &huge_page_mask (h); - pgoff =vma_hugecache_offset (h, vma, address); + pgoff = ((address - vma->vm_start) >>PAGE_SHIFT ) + + vma->vm_pgoff; mapping = vma->vm_file->f_dentry->d_inode->i_mapping;/*
mm/mempolicy.c +88 -49
236 lines not on this page · raw message
mm/slab.c +3 -3
@@ -1685,9 +1685,6 @@ void __init kmem_cache_init_late(void) g_cpucache_up =LATE ; -/* Annotate slab for lockdep -- annotate the malloc caches */ -init_lock_keys (); -/* 6) resize the head arrays to their final sizes */ mutex_lock (&cache_chain_mutex);list_for_each_entry (cachep, &cache_chain, next)
@@ -1695,6 +1692,9 @@ void __init kmem_cache_init_late(void)BUG ();mutex_unlock (&cache_chain_mutex); +/* Annotate slab for lockdep -- annotate the malloc caches */ +init_lock_keys (); +/* Done! */ g_cpucache_up =FULL ;
mm/truncate.c +2 -1
@@ -394,11 +394,12 @@ invalidate_complete_page2(struct address_space *mapping, struct page *page)if (page_has_private (page) && !try_to_release_page (page,GFP_KERNEL ))return 0 ; +clear_page_mlock (page); +spin_lock_irq (&mapping->tree_lock);if (PageDirty (page)) goto failed; -clear_page_mlock (page);BUG_ON (page_has_private (page));__delete_from_page_cache (page);spin_unlock_irq (&mapping->tree_lock);
net/8021q/vlan_core.c +2 -1
@@ -106,7 +106,6 @@ static struct sk_buff *vlan_reorder_header(struct sk_buff *skb)return NULL ;memmove (skb->data -ETH_HLEN , skb->data -VLAN_ETH_HLEN ,2 *ETH_ALEN ); skb->mac_header +=VLAN_HLEN ; -skb_reset_mac_len (skb);return skb; }
@@ -140,6 +139,8 @@ struct sk_buff *vlan_untag(struct sk_buff *skb)skb_reset_network_header (skb);skb_reset_transport_header (skb); +skb_reset_mac_len (skb); +return skb; err_free:
net/core/dev.c +8 -6
@@ -2121,7 +2121,8 @@ static bool can_checksum_protocol(netdev_features_t features, __be16 protocol)static netdev_features_t harmonize_features (struct sk_buff *skb,__be16 protocol,netdev_features_t features) { -if (!can_checksum_protocol (features, protocol)) { +if (skb->ip_summed !=CHECKSUM_NONE && + !can_checksum_protocol (features, protocol)) { features &= ~NETIF_F_ALL_CSUM ; features &= ~NETIF_F_SG ; }else if (illegal_highdma (skb->dev, skb)) {
@@ -2617,15 +2618,16 @@ void __skb_get_rxhash(struct sk_buff *skb)if (!skb_flow_dissect (skb, &keys))return ; -if (keys.ports) { -if ((__force u16 )keys.port16[1 ] < (__force u16 )keys.port16[0 ]) -swap (keys.port16[0 ], keys.port16[1 ]); +if (keys.ports) skb->l4_rxhash =1 ; - }/* get a consistent hash (same value on both flow directions) */ -if ((__force u32 )keys.dst < (__force u32 )keys.src) +if (((__force u32 )keys.dst < (__force u32 )keys.src) || + (((__force u32 )keys.dst == (__force u32 )keys.src) && + ((__force u16 )keys.port16[1 ] < (__force u16 )keys.port16[0 ]))) {swap (keys.dst, keys.src); +swap (keys.port16[0 ], keys.port16[1 ]); + } hash = jhash_3words((__force u32)keys.dst, (__force u32)keys.src,
net/core/sock.c +2 -1
@@ -644,7 +644,8 @@ set_rcvbuf:case SO_KEEPALIVE :#ifdef CONFIG_INET -if (sk->sk_protocol ==IPPROTO_TCP ) +if (sk->sk_protocol ==IPPROTO_TCP && + sk->sk_type ==SOCK_STREAM )tcp_set_keepalive (sk, valbool);#endif sock_valbool_flag (sk,SOCK_KEEPOPEN , valbool);
net/ipv4/raw.c +8 -6
@@ -131,18 +131,20 @@ found:* 0 - deliver * 1 - block */ -static __inline__int icmp_filter (struct sock *sk,struct sk_buff *skb) +static int icmp_filter (const struct sock *sk,const struct sk_buff *skb) { -int type; +struct icmphdr _hdr; +const struct icmphdr *hdr; -if (!pskb_may_pull (skb,sizeof (struct icmphdr ))) + hdr =skb_header_pointer (skb,skb_transport_offset (skb), +sizeof (_hdr), &_hdr); +if (!hdr)return 1 ; - type =icmp_hdr (skb)->type; -if (type <32 ) { +if (hdr->type <32 ) {__u32 data =raw_sk (sk)->filter.data; -return ((1 << type) & data) !=0 ; +return ((1U << hdr->type) & data) !=0 ; }/* Do not block unknown ICMP types */
net/ipv4/tcp.c +8 -2
@@ -1594,8 +1594,14 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, }#ifdef CONFIG_NET_DMA -if (tp->ucopy.dma_chan) -dma_async_memcpy_issue_pending (tp->ucopy.dma_chan); +if (tp->ucopy.dma_chan) { +if (tp->rcv_wnd ==0 && + !skb_queue_empty (&sk->sk_async_wait_queue)) { +tcp_service_net_dma (sk, true); +tcp_cleanup_rbuf (sk, copied); + }else +dma_async_memcpy_issue_pending (tp->ucopy.dma_chan); + }#endif if (copied >= target) {/* Do not sleep, just process backlog. */
net/ipv6/addrconf.c +8 -2
@@ -793,10 +793,16 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)struct in6_addr prefix;struct rt6_info *rt;struct net *net =dev_net (ifp->idev->dev); +struct flowi6 fl6 = {}; +ipv6_addr_prefix (&prefix, &ifp->addr, ifp->prefix_len); - rt =rt6_lookup (net, &prefix,NULL , ifp->idev->dev->ifindex,1 ); + fl6.flowi6_oif = ifp->idev->dev->ifindex; + fl6.daddr = prefix; + rt = (struct rt6_info *)ip6_route_lookup (net, &fl6, +RT6_LOOKUP_F_IFACE ); -if (rt &&addrconf_is_prefix_route (rt)) { +if (rt != net->ipv6.ip6_null_entry && +addrconf_is_prefix_route (rt)) {if (onlink ==0 ) {ip6_del_rt (rt); rt =NULL ;
net/ipv6/ip6_fib.c +4 -0
@@ -818,6 +818,10 @@ int fib6_add(struct fib6_node *root, struct rt6_info *rt, struct nl_info *info) offsetof(struct rt6_info , rt6i_src), allow_create, replace_required); +if (IS_ERR (sn)) { + err =PTR_ERR (sn); + sn =NULL ; + }if (!sn) {/* If it is failed, discard just allocated root, and then (in st_failure) stale node
net/ipv6/mip6.c +11 -9
@@ -84,28 +84,30 @@ static int mip6_mh_len(int type)static int mip6_mh_filter (struct sock *sk,struct sk_buff *skb) { -struct ip6_mh *mh; +struct ip6_mh _hdr; +const struct ip6_mh *mh; -if (!pskb_may_pull (skb, (skb_transport_offset (skb)) +8 ) || - !pskb_may_pull (skb, (skb_transport_offset (skb) + - ((skb_transport_header (skb)[1 ] +1 ) <<3 )))) + mh =skb_header_pointer (skb,skb_transport_offset (skb), +sizeof (_hdr), &_hdr); +if (!mh)return -1 ; - mh = (struct ip6_mh *)skb_transport_header (skb); +if (((mh->ip6mh_hdrlen +1 ) <<3 ) > skb->len) +return -1 ;if (mh->ip6mh_hdrlen <mip6_mh_len (mh->ip6mh_type)) {LIMIT_NETDEBUG (KERN_DEBUG "mip6: MH message too short: %d vs >=%d\n" , mh->ip6mh_hdrlen,mip6_mh_len (mh->ip6mh_type)); -mip6_param_prob (skb,0 , ((&mh->ip6mh_hdrlen) - -skb_network_header (skb))); +mip6_param_prob (skb,0 , offsetof(struct ip6_mh , ip6mh_hdrlen) + +skb_network_header_len (skb));return -1 ; }if (mh->ip6mh_proto !=IPPROTO_NONE ) {LIMIT_NETDEBUG (KERN_DEBUG "mip6: MH invalid payload proto = %d\n" , mh->ip6mh_proto); -mip6_param_prob (skb,0 , ((&mh->ip6mh_proto) - -skb_network_header (skb))); +mip6_param_prob (skb,0 , offsetof(struct ip6_mh , ip6mh_proto) + +skb_network_header_len (skb));return -1 ; }
net/ipv6/raw.c +10 -11
@@ -107,21 +107,20 @@ found:* 0 - deliver * 1 - block */ -static __inline__int icmpv6_filter (struct sock *sk,struct sk_buff *skb) +static int icmpv6_filter (const struct sock *sk,const struct sk_buff *skb) { -struct icmp6hdr *icmph; -struct raw6_sock *rp =raw6_sk (sk); - -if (pskb_may_pull (skb,sizeof (struct icmp6hdr ))) { -__u32 *data = &rp->filter.data[0 ]; -int bit_nr; +struct icmp6hdr *_hdr; +const struct icmp6hdr *hdr; - icmph = (struct icmp6hdr *) skb->data; - bit_nr = icmph->icmp6_type; + hdr =skb_header_pointer (skb,skb_transport_offset (skb), +sizeof (_hdr), &_hdr); +if (hdr) { +const __u32 *data = &raw6_sk (sk)->filter.data[0 ]; +unsigned int type = hdr->icmp6_type; -return (data[bit_nr >>5 ] & (1 << (bit_nr &31 ))) !=0 ; +return (data[type >>5 ] & (1U << (type &31 ))) !=0 ; } -return 0 ; +return 1 ; }#if defined(CONFIG_IPV6_MIP6 ) || defined(CONFIG_IPV6_MIP6_MODULE )
net/ipv6/route.c +6 -5
@@ -1485,17 +1485,18 @@ static int __ip6_del_rt(struct rt6_info *rt, struct nl_info *info)struct fib6_table *table;struct net *net =dev_net (rt->dst.dev); -if (rt == net->ipv6.ip6_null_entry) -return -ENOENT ; +if (rt == net->ipv6.ip6_null_entry) { + err = -ENOENT ; + goto out; + } table = rt->rt6i_table;write_lock_bh (&table->tb6_lock); - err =fib6_del (rt, info); -dst_release (&rt->dst); -write_unlock_bh (&table->tb6_lock); +out: +dst_release (&rt->dst);return err; }
net/l2tp/l2tp_eth.c +1 -1
@@ -132,7 +132,7 @@ static void l2tp_eth_dev_recv(struct l2tp_session *session, struct sk_buff *skb,printk ("\n" ); } -if (!pskb_may_pull (skb,sizeof (ETH_HLEN ))) +if (!pskb_may_pull (skb,ETH_HLEN )) goto error;secpath_reset (skb);
net/netrom/af_netrom.c +6 -1
@@ -1169,7 +1169,12 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock, msg->msg_flags |=MSG_TRUNC ; } -skb_copy_datagram_iovec (skb,0 , msg->msg_iov, copied); + er =skb_copy_datagram_iovec (skb,0 , msg->msg_iov, copied); +if (er <0 ) { +skb_free_datagram (sk, skb); +release_sock (sk); +return er; + }if (sax !=NULL ) { sax->sax25_family =AF_NETROM ;
net/sched/sch_cbq.c +3 -2
@@ -250,10 +250,11 @@ cbq_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)else if ((cl = defmap[res.classid &TC_PRIO_MAX ]) ==NULL ) cl = defmap[TC_PRIO_BESTEFFORT ]; -if (cl ==NULL || cl->level >= head->level) +if (cl ==NULL ) goto fallback; } - +if (cl->level >= head->level) + goto fallback;#ifdef CONFIG_NET_CLS_ACT switch (result) {case TC_ACT_QUEUED :
net/sched/sch_qfq.c +4 -1
@@ -830,7 +830,10 @@ static void qfq_update_start(struct qfq_sched *q, struct qfq_class *cl)if (mask) {struct qfq_group *next =qfq_ffs (q, mask);if (qfq_gt (roundedF, next->F)) { - cl->S = next->F; +if (qfq_gt (limit, next->F)) + cl->S = next->F; +else /* preserve timestamp correctness */ + cl->S = limit;return ; } }
net/sctp/output.c +20 -1
@@ -334,6 +334,25 @@ finish:return retval; } +static void sctp_packet_release_owner (struct sk_buff *skb) +{ +sk_free (skb->sk); +} + +static void sctp_packet_set_owner_w (struct sk_buff *skb,struct sock *sk) +{ +skb_orphan (skb); + skb->sk = sk; + skb->destructor = sctp_packet_release_owner; + +/* +* The data chunks have already been accounted for in sctp_sendmsg(), +* therefore only reserve a single byte to keep socket around until +* the packet has been transmitted. +*/ +atomic_inc (&sk->sk_wmem_alloc); +} +/* All packets are sent to the network through this function from * sctp_outq_tail(). *
@@ -375,7 +394,7 @@ int sctp_packet_transmit(struct sctp_packet *packet)/* Set the owning socket so that we know where to get the * destination IP address. */ -skb_set_owner_w (nskb, sk); +sctp_packet_set_owner_w (nskb, sk);if (!sctp_transport_dst_check (tp)) {sctp_transport_route (tp,NULL ,sctp_sk (sk));
net/xfrm/xfrm_input.c +1 -1
@@ -212,7 +212,7 @@ resume:/* only the first xfrm gets the encap type */ encap_type =0 ; -if (async && x->repl->check (x, skb, seq)) { +if (async && x->repl->recheck (x, skb, seq)) {XFRM_INC_STATS (net,LINUX_MIB_XFRMINSTATESEQERROR ); goto drop_unlock; }
net/xfrm/xfrm_policy.c +1 -1
@@ -1761,7 +1761,7 @@ static struct dst_entry *make_blackhole(struct net *net, u16 family,if (!afinfo) {dst_release (dst_orig); - ret =ERR_PTR (-EINVAL ); +return ERR_PTR (-EINVAL ); }else { ret = afinfo->blackhole_route (net, dst_orig); }
net/xfrm/xfrm_replay.c +15 -0
@@ -420,6 +420,18 @@ err:return -EINVAL ; } +static int xfrm_replay_recheck_esn (struct xfrm_state *x, +struct sk_buff *skb,__be32 net_seq) +{ +if (unlikely (XFRM_SKB_CB (skb)->seq.input.hi != +htonl (xfrm_replay_seqhi (x, net_seq)))) { + x->stats.replay_window++; +return -EINVAL ; + } + +return xfrm_replay_check_esn (x, skb, net_seq); +} +static void xfrm_replay_advance_esn (struct xfrm_state *x,__be32 net_seq) {unsigned int bitnr, nr, i;
@@ -479,6 +491,7 @@ static void xfrm_replay_advance_esn(struct xfrm_state *x, __be32 net_seq)static struct xfrm_replay xfrm_replay_legacy = { .advance = xfrm_replay_advance, .check = xfrm_replay_check, + .recheck = xfrm_replay_check, .notify = xfrm_replay_notify, .overflow = xfrm_replay_overflow, };
@@ -486,6 +499,7 @@ static struct xfrm_replay xfrm_replay_legacy = {static struct xfrm_replay xfrm_replay_bmp = { .advance = xfrm_replay_advance_bmp, .check = xfrm_replay_check_bmp, + .recheck = xfrm_replay_check_bmp, .notify = xfrm_replay_notify_bmp, .overflow = xfrm_replay_overflow_bmp, };
@@ -493,6 +507,7 @@ static struct xfrm_replay xfrm_replay_bmp = {static struct xfrm_replay xfrm_replay_esn = { .advance = xfrm_replay_advance_esn, .check = xfrm_replay_check_esn, + .recheck = xfrm_replay_recheck_esn, .notify = xfrm_replay_notify_bmp, .overflow = xfrm_replay_overflow_esn, };
net/xfrm/xfrm_user.c +42 -15
166 lines not on this page · raw message
scripts/Kbuild.include +7 -7
@@ -98,24 +98,24 @@ try-run = $(shell set -e; \ # Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,) as-option = $(call try-run,\ - $(CC) $(KBUILD_CFLAGS) $(1) -c -xassembler /dev/null -o "$$TMP",$(1),$(2)) + $(CC) $(KBUILD_CFLAGS) $(1) -c -x assembler /dev/null -o "$$TMP",$(1),$(2)) # as-instr # Usage: cflags-y += $(call as-instr,instr,option1,option2) as-instr = $(call try-run,\ - printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -xassembler -o "$$TMP" -,$(2),$(3)) + printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3)) # cc-option # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) cc-option = $(call try-run,\ - $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",$(1),$(2)) + $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2)) # cc-option-yn # Usage: flag := $(call cc-option-yn,-march=winchip-c6) cc-option-yn = $(call try-run,\ - $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",y,n) + $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n) # cc-option-align # Prefix align with either -falign or -malign
@@ -125,7 +125,7 @@ cc-option-align = $(subst -functions=0,,\ # cc-disable-warning # Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable) cc-disable-warning = $(call try-run,\ - $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -xc /dev/null -o "$$TMP",-Wno-$(strip $(1))) + $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) # cc-version # Usage gcc-ver := $(call cc-version)
@@ -143,7 +143,7 @@ cc-ifversion = $(shell [ $(call cc-version, $(CC)) $(1) $(2) ] && echo $(3)) # cc-ldoption # Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both) cc-ldoption = $(call try-run,\ - $(CC) $(1) -nostdlib -xc /dev/null -o "$$TMP",$(1),$(2)) + $(CC) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2)) # ld-option # Usage: LDFLAGS += $(call ld-option, -X)
@@ -209,7 +209,7 @@ endif # >$< substitution to preserve $ when reloading .cmd file # note: when using inline perl scripts [perl -e '...$$t=1;...'] # in $(cmd_xxx) double $$ your perl vars -make-cmd = $(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1))))) +make-cmd = $(subst \\,\\\\,$(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1)))))) # Find any prerequisites that is newer than target or that does not exist. # PHONY targets skipped in both cases.
scripts/gcc-version.sh +3 -3
@@ -22,10 +22,10 @@ if [ ${#compiler} -eq 0 ]; then exit 1 fi -MAJOR=$(echo __GNUC__ | $compiler -E -xc - | tail -n 1) -MINOR=$(echo __GNUC_MINOR__ | $compiler -E -xc - | tail -n 1) +MAJOR=$(echo __GNUC__ | $compiler -E -x c - | tail -n 1) +MINOR=$(echo __GNUC_MINOR__ | $compiler -E -x c - | tail -n 1) if [ "x$with_patchlevel" != "x" ] ; then - PATCHLEVEL=$(echo __GNUC_PATCHLEVEL__ | $compiler -E -xc - | tail -n 1) + PATCHLEVEL=$(echo __GNUC_PATCHLEVEL__ | $compiler -E -x c - | tail -n 1) printf "%02d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL else printf "%02d%02d\\n" $MAJOR $MINOR
scripts/gcc-x86_32-has-stack-protector.sh +1 -1
@@ -1,6 +1,6 @@ #!/bin/sh -echo "int foo(void) { char X[200]; return 3; }" | $* -S -xc -c -O0 -fstack-protector - -o - 2> /dev/null | grep -q "%gs" +echo "int foo(void) { char X[200]; return 3; }" | $* -S -x c -c -O0 -fstack-protector - -o - 2> /dev/null | grep -q "%gs" if [ "$?" -eq "0" ] ; then echo y else
scripts/gcc-x86_64-has-stack-protector.sh +1 -1
@@ -1,6 +1,6 @@ #!/bin/sh -echo "int foo(void) { char X[200]; return 3; }" | $* -S -xc -c -O0 -mcmodel=kernel -fstack-protector - -o - 2> /dev/null | grep -q "%gs" +echo "int foo(void) { char X[200]; return 3; }" | $* -S -x c -c -O0 -mcmodel=kernel -fstack-protector - -o - 2> /dev/null | grep -q "%gs" if [ "$?" -eq "0" ] ; then echo y else
scripts/kconfig/check.sh +1 -1
@@ -1,6 +1,6 @@ #!/bin/sh # Needed for systems without gettext -$* -xc -o /dev/null - > /dev/null 2>&1 << EOF +$* -x c -o /dev/null - > /dev/null 2>&1 << EOF #include <libintl.h> int main() {
scripts/kconfig/lxdialog/check-lxdialog.sh +1 -1
@@ -38,7 +38,7 @@ trap "rm -f $tmp" 0 1 2 3 15 # Check if we can link to ncurses check() { - $cc -xc - -o $tmp 2>/dev/null <<'EOF' + $cc -x c - -o $tmp 2>/dev/null <<'EOF' #include CURSES_LOC main() {} EOF
scripts/kconfig/streamline_config.pl +2 -0
@@ -463,6 +463,8 @@ while(<CIN>) { if (defined($configs{$1})) { if ($localyesconfig) { $setconfigs{$1} = 'y'; + print "$1=y\n";
Lines of this file are not shown. View the raw message.
sound/usb/quirks-table.h +53 -0
53 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.