Linux 3.6.2
I'm announcing the release of the 3.6.2 kernel.
All users of the 3.6 kernel series must upgrade.
The updated 3.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.6.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 | 3 arch/arm/include/asm/syscall.h | 1 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/ath79/clock.c | 4 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/kernel/iommu.c | 5 arch/powerpc/lib/memcpy_power7.S | 4 arch/powerpc/platforms/pseries/eeh.c | 2 arch/powerpc/sysdev/dart_iommu.c | 12 + arch/score/kernel/process.c | 4 arch/x86/Makefile | 4 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/dma/dmaengine.c | 2 drivers/gpu/drm/drm_crtc.c | 8 - drivers/gpu/drm/i915/i915_irq.c | 16 +- drivers/gpu/drm/i915/i915_reg.h | 7 drivers/gpu/drm/i915/intel_display.c | 26 +++ drivers/gpu/drm/i915/intel_hdmi.c | 15 + drivers/gpu/drm/i915/intel_pm.c | 5 drivers/gpu/drm/nouveau/nvc0_fence.c | 25 +++ drivers/gpu/drm/radeon/evergreen_cs.c | 59 ++++++- drivers/gpu/drm/radeon/r600_cs.c | 3 drivers/gpu/drm/radeon/radeon_drv.c | 4 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/hid/hidraw.c | 69 +++------ drivers/i2c/busses/i2c-piix4.c | 1 drivers/iommu/intel-iommu.c | 4 drivers/media/dvb/frontends/drxk.h | 2 drivers/media/dvb/frontends/drxk_hard.c | 20 +- drivers/media/rc/ite-cir.c | 2 drivers/media/video/em28xx/em28xx-cards.c | 22 +- drivers/media/video/em28xx/em28xx-dvb.c | 5 drivers/media/video/gspca/pac7302.c | 3 drivers/mfd/88pm860x-core.c | 92 ++++++++---- drivers/mfd/max8925-core.c | 10 + drivers/mmc/core/slot-gpio.c | 8 - 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/intel/ixgbe/ixgbe_ethtool.c | 5 drivers/net/ethernet/ti/davinci_cpdma.c | 1 drivers/net/rionet.c | 20 ++ drivers/net/usb/asix_devices.c | 4 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/buffer.c | 13 - fs/cifs/cifs_unicode.c | 22 ++ fs/cifs/connect.c | 9 + fs/ext4/inode.c | 26 ++- 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/super.c | 4 fs/jffs2/wbuf.c | 8 - fs/nilfs2/file.c | 1 fs/proc/page.c | 8 - include/linux/mempolicy.h | 2 include/net/ip_fib.h | 1 kernel/rcutree.c | 4 kernel/sched/core.c | 2 kernel/sys.c | 1 kernel/workqueue.c | 27 +++ 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/ipv4/fib_semantics.c | 2 net/ipv6/addrconf.c | 10 + net/ipv6/route.c | 11 - scripts/Kbuild.include | 14 - scripts/Makefile.fwinst | 4 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 scripts/package/buildtar | 2 sound/drivers/aloop.c | 6 sound/pci/hda/hda_codec.c | 10 - sound/pci/hda/hda_intel.c | 37 ++++ sound/pci/hda/patch_conexant.c | 1 sound/pci/hda/patch_realtek.c | 12 - sound/pci/hda/patch_via.c | 32 ++++ sound/soc/codecs/wm5110.c | 4 sound/soc/codecs/wm9712.c | 2 sound/soc/codecs/wm_hubs.c | 5 sound/usb/card.h | 2 sound/usb/endpoint.c | 8 + sound/usb/helper.c | 5 sound/usb/mixer.c | 7 sound/usb/quirks-table.h | 53 +++++++ sound/usb/quirks.c | 24 +++ sound/usb/quirks.h | 10 + tools/lguest/lguest.c | 1 tools/perf/Makefile | 2 tools/power/cpupower/Makefile | 2 135 files changed, 1168 insertions(+), 456 deletions(-)
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
Anton Blanchard (1):
powerpc/iommu: Fix multiple issues with IOMMU pools code
Antonio Quartulli (1):
8021q: fix mac_len recomputation in vlan_untag()
Artem Bityutskiy (1):
JFFS2: fix unmount regression
Ben Hutchings (1):
media: rc: ite-cir: Initialise ite_dev::rdev earlier
Ben Skeggs (1):
drm/nvc0/fence: restore pre-suspend fence buffer context on resume
Ben Widawsky (1):
drm/i915: Fix GT_MODE default value
Bernd Schubert (1):
ext4: always set i_op in ext4_mknod()
Brian Norris (1):
JFFS2: don't fail on bitflips in OOB
Charles Keepax (1):
ASoC: wm5110: Adding missing volume update bits
Chris Ball (1):
mmc: slot-gpio: Fix missing assignment to ctx->ro_gpio
Chris Wilson (2):
drm: Destroy the planes prior to destroying the associated CRTC drm/i915: Flush the pending flips on the CRTC before modification
Daniel J Blueman (1):
i2c-piix4: Fix build failure
Daniel Mack (1):
ALSA: snd-usb: Add quirks for Playback Designs devices
Daniel Vetter (1):
drm/i915: call drm_handle_vblank before finish_page_flip
David Henningsson (2):
ALSA: hda - limit internal mic boost for Asus X202E
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
Dylan Reid (1):
ALSA: hda - Fix hang caused by race during suspend.
Eric Dumazet (1):
ipv4: add a fib_type to fib_info
Eric Sandeen (1):
jbd2: don't write superblock when if its empty
Eugeni Dodonov (1):
drm/i915: prevent possible pin leak on error path
Fabio Estevam (1):
drivers/dma/dmaengine.c: lower the priority of 'failed to get' dma channel message
Felix Kaechele (1):
ALSA: hda - Add inverted internal mic quirk for Lenovo IdeaPad U310
Feng Hong (1):
PM / Sleep: use resume event when call dpm_resume_early
Florian Zumbiehl (1):
drm/savage: re-add busmaster enable, regression fix
Frank Schäfer (2):
media: gspca_pac7302: add support for device 1ae7:2001 Speedlink Snappy Microphone SL-6825-SBK
media: gspca_pac7302: make red balance and blue balance controls work again
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
Gabor Juhos (1):
MIPS: ath79: use correct fractional dividers for {CPU,DDR}_PLL on AR934x
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.6.2
Guennadi Liakhovetski (1):
mmc: sh-mmcif: avoid oops on spurious interrupts
Herton Ronaldo Krzesinski (3):
ext4: fix crash when accessing /proc/mounts concurrently
ALSA: hda/via - don't report presence on HPs with no presence support
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
Jacob Keller (1):
ixgbe: fix PTP ethtool timestamping function
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()
Lai Jiangshan (1):
workqueue: fix possible stall on try_to_grab_pending() of a delayed work item
Lin Ming (1):
ACPI: run _OSC after ACPI_FULL_INITIALIZATION
Marek Olšák (2):
drm/radeon/kms: allow STRMOUT_BASE_UPDATE on RS780 and RS880 drm/radeon: allow MIP_ADDRESS=0 for MSAA textures on Evergreen
Mark Brown (4):
mfd: max8925: Move _IO resources out of ioport_ioresource
mfd: 88pm860x: Move _IO resources out of ioport_ioresource
ASoC: wm_hubs: Ensure volume updates are handled during class W startup
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
Matthew Garrett (1):
efi: Build EFI stub with EFI-appropriate options
Mauro Carvalho Chehab (3):
em28xx: Make all em28xx extensions to be initialized asynchronously
drxk: allow loading firmware synchrousnously
em28xx: regression fix: use DRX-K sync firmware requests on em28xx
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 Marek (1):
kbuild: Do not package /boot and /lib in make tar-pkg
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
Nishanth Aravamudan (1):
powerpc: Fix VMX fix for memcpy case
Omair Mohammed Abdullah (1):
ALSA: aloop - add locking to timer access
Paul E. McKenney (2):
ia64: Add missing RCU idle APIs on idle loop
rcu: Fix day-one dyntick-idle stall-warning bug
Paulo Zanoni (1):
drm/i915: make sure we write all the DIP data bytes
Peter Zijlstra (1):
sched: Fix load avg vs. cpu-hotplug
Pierre-Louis Bossart (1):
ALSA: hda - use LPIB for delay estimation
Quinlan Pfiffer (1):
asix: Adds support for Lenovo 10/100 USB dongle.
Ratan Nalumasu (1):
HID: hidraw: don't deallocate memory when it is in use
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
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
Tao Hou (1):
net: ethernet: davinci_cpdma: decrease the desc count when cleaning up the remaining packets
Tejun Heo (1):
workqueue: add missing smp_wmb() in process_one_work()
Theodore Ts'o (2):
ext4: fix potential deadlock in ext4_nonda_switch()
ext4: fix mtime update in nodelalloc mode
Vaibhav Bedia (1):
mmc: omap_hsmmc: Pass on the suspend failure to the PM core
Wade Farnsworth (1):
ARM: 7548/1: include linux/sched.h in syscall.h
Wang Xingchao (1):
ALSA: hda - Add another pci id for Haswell board
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'
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 6 -SUBLEVEL = 1 +SUBLEVEL = 2 EXTRAVERSION = NAME = Terrified Chipmunk
arch/alpha/kernel/process.c +3 -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,10 @@ 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/arm/include/asm/syscall.h +1 -0
@@ -8,6 +8,7 @@#define _ASM_ARM_SYSCALL_H#include <linux/err.h> +#include <linux/sched.h> extern const unsigned long sys_call_table[];
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
@@ -74,6 +75,7 @@ void cpu_idle (void) {/* endless idle loop with no priority at all */ while (1 ) { +rcu_idle_enter ();while (!need_resched ()) {void (*idle)(void );/*
@@ -86,6 +88,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>
@@ -69,12 +70,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>
@@ -279,6 +280,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 ;/*
@@ -309,6 +311,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 += -DDATAOFFSET=$(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/ath79/clock.c +2 -2
@@ -189,7 +189,7 @@ static void __init ar934x_clocks_init(void)AR934X_PLL_CPU_CONFIG_NFRAC_MASK ; cpu_pll = nint * ath79_ref_clk.rate / ref_div; - cpu_pll += frac * ath79_ref_clk.rate / (ref_div * (2 <<6 )); + cpu_pll += frac * ath79_ref_clk.rate / (ref_div * (1 <<6 )); cpu_pll /= (1 << out_div); pll =ath79_pll_rr (AR934X_PLL_DDR_CONFIG_REG );
@@ -203,7 +203,7 @@ static void __init ar934x_clocks_init(void)AR934X_PLL_DDR_CONFIG_NFRAC_MASK ; ddr_pll = nint * ath79_ref_clk.rate / ref_div; - ddr_pll += frac * ath79_ref_clk.rate / (ref_div * (2 <<10 )); + ddr_pll += frac * ath79_ref_clk.rate / (ref_div * (1 <<10 )); ddr_pll /= (1 << out_div); clk_ctrl =ath79_pll_rr (AR934X_PLL_CPU_DDR_CLK_CTRL_REG );
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
@@ -182,6 +182,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/kernel/iommu.c +4 -1
@@ -215,7 +215,8 @@ static unsigned long iommu_range_alloc(struct device *dev,spin_lock_irqsave (&(pool->lock), flags); again: -if ((pass ==0 ) && handle && *handle) +if ((pass ==0 ) && handle && *handle && + (*handle >= pool->start) && (*handle < pool->end)) start = *handle;else start = pool->hint;
@@ -236,7 +237,9 @@ again:* but on second pass, start at 0 in pool 0. */ if ((start & mask) >= limit || pass >0 ) { +spin_unlock (&(pool->lock)); pool = &(tbl->pools[0 ]); +spin_lock (&(pool->lock)); start = pool->start; }else { start &= mask;
arch/powerpc/lib/memcpy_power7.S +2 -2
@@ -239,8 +239,8 @@ _GLOBAL(memcpy_power7) ori r9,r9,1 /* stream=1 */ srdi r7,r5,7 /* length in cachelines, capped at 0x3FF */ - cmpldi cr1,r7,0x3FF - ble cr1,1f + cmpldi r7,0x3FF + ble 1f li r7,0x3FF 1: lis r0,0x0E00 /* depth=7 */ sldi r7,r7,7
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/powerpc/sysdev/dart_iommu.c +12 -0
@@ -74,11 +74,16 @@ static int dart_is_u4;#define DBG (...) +static DEFINE_SPINLOCK (invalidate_lock); +static inline void dart_tlb_invalidate_all (void ) {unsigned long l =0 ;unsigned int reg, inv_bit;unsigned long limit; +unsigned long flags; + +spin_lock_irqsave (&invalidate_lock, flags);DBG ("dart: flush\n" );
@@ -111,12 +116,17 @@ retry:panic ("DART: TLB did not flush after waiting a long " "time. Buggy U3 ?" ); } + +spin_unlock_irqrestore (&invalidate_lock, flags); }static inline void dart_tlb_invalidate_one (unsigned long bus_rpn) {unsigned int reg;unsigned int l, limit; +unsigned long flags; + +spin_lock_irqsave (&invalidate_lock, flags); reg =DART_CNTL_U4_ENABLE |DART_CNTL_U4_IONE | (bus_rpn &DART_CNTL_U4_IONE_MASK );
@@ -138,6 +148,8 @@ wait_more:panic ("DART: TLB did not flush after waiting a long " "time. Buggy U4 ?" ); } + +spin_unlock_irqrestore (&invalidate_lock, flags); }static void dart_flush (struct iommu_table *tbl)
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 +2 -2
@@ -92,7 +92,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)
@@ -142,7 +142,7 @@ KBUILD_CFLAGS += $(call cc-option,-mno-avx,) KBUILD_CFLAGS += $(mflags-y) KBUILD_AFLAGS += $(mflags-y) -archscripts: scripts_basic +archscripts: $(Q)$(MAKE) $(build)=arch/x86/tools relocs ###
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
@@ -994,8 +994,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");
@@ -1003,6 +1001,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
@@ -996,7 +996,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/dma/dmaengine.c +1 -1
@@ -582,7 +582,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
@@ -1034,15 +1034,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/i915/i915_irq.c +8 -8
@@ -680,12 +680,12 @@ static irqreturn_t ivybridge_irq_handler(DRM_IRQ_ARGS)intel_opregion_gse_intr (dev);for (i =0 ; i <3 ; i++) { +if (de_iir & (DE_PIPEA_VBLANK_IVB << (5 * i))) +drm_handle_vblank (dev, i);if (de_iir & (DE_PLANEA_FLIP_DONE_IVB << (5 * i))) {intel_prepare_page_flip (dev, i);intel_finish_page_flip_plane (dev, i); } -if (de_iir & (DE_PIPEA_VBLANK_IVB << (5 * i))) -drm_handle_vblank (dev, i); }/* check event from PCH */
@@ -767,6 +767,12 @@ static irqreturn_t ironlake_irq_handler(DRM_IRQ_ARGS)if (de_iir &DE_GSE )intel_opregion_gse_intr (dev); +if (de_iir &DE_PIPEA_VBLANK ) +drm_handle_vblank (dev,0 ); + +if (de_iir &DE_PIPEB_VBLANK ) +drm_handle_vblank (dev,1 ); +if (de_iir &DE_PLANEA_FLIP_DONE ) {intel_prepare_page_flip (dev,0 );intel_finish_page_flip_plane (dev,0 );
@@ -777,12 +783,6 @@ static irqreturn_t ironlake_irq_handler(DRM_IRQ_ARGS)intel_finish_page_flip_plane (dev,1 ); } -if (de_iir &DE_PIPEA_VBLANK ) -drm_handle_vblank (dev,0 ); - -if (de_iir &DE_PIPEB_VBLANK ) -drm_handle_vblank (dev,1 ); -/* check event from PCH */ if (de_iir &DE_PCH_EVENT ) {if (pch_iir & hotplug_mask)
drivers/gpu/drm/i915/i915_reg.h +7 -0
@@ -519,6 +519,9 @@# define VS_TIMER_DISPATCH (1 << 6)# define MI_FLUSH_ENABLE (1 << 12) +#define GEN6_GT_MODE 0x20d0 +#define GEN6_GT_MODE_HI (1 << 9) +#define GFX_MODE 0x02520#define GFX_MODE_GEN7 0x0229c#define RING_MODE_GEN7 (ring) ((ring)->mmio_base+0x29c)
@@ -1753,6 +1756,10 @@/* Video Data Island Packet control */ #define VIDEO_DIP_DATA 0x61178 +/* Read the description of VIDEO_DIP_DATA (before Haswel) or VIDEO_DIP_ECC +* (Haswell and newer) to see which VIDEO_DIP_DATA byte corresponds to each byte +* of the infoframe structure specified by CEA-861. */ +#define VIDEO_DIP_DATA_SIZE 32#define VIDEO_DIP_CTL 0x61170/* Pre HSW: */ #define VIDEO_DIP_ENABLE (1 << 31)
drivers/gpu/drm/i915/intel_display.c +23 -3
@@ -2823,13 +2823,34 @@ static void ironlake_fdi_disable(struct drm_crtc *crtc)udelay (100 ); } +static bool intel_crtc_has_pending_flip (struct drm_crtc *crtc) +{ +struct drm_device *dev = crtc->dev; +struct drm_i915_private *dev_priv = dev->dev_private; +unsigned long flags; +bool pending; + +if (atomic_read (&dev_priv->mm.wedged)) +return false; + +spin_lock_irqsave (&dev->event_lock, flags); + pending =to_intel_crtc (crtc)->unpin_work !=NULL ; +spin_unlock_irqrestore (&dev->event_lock, flags); + +return pending; +} +static void intel_crtc_wait_for_pending_flips (struct drm_crtc *crtc) {struct drm_device *dev = crtc->dev; +struct drm_i915_private *dev_priv = dev->dev_private;if (crtc->fb ==NULL )return ; +wait_event (dev_priv->pending_flip_queue, + !intel_crtc_has_pending_flip (crtc)); +mutex_lock (&dev->struct_mutex);intel_finish_fb (crtc->fb);mutex_unlock (&dev->struct_mutex);
@@ -6149,9 +6170,8 @@ static void do_intel_finish_page_flip(struct drm_device *dev,atomic_clear_mask (1 << intel_crtc->plane, &obj->pending_flip.counter); -if (atomic_read (&obj->pending_flip) ==0 ) -wake_up (&dev_priv->pending_flip_queue); +wake_up (&dev_priv->pending_flip_queue);schedule_work (&work->work);trace_i915_flip_complete (intel_crtc->plane, work->pending_flip_obj);
@@ -6394,7 +6414,7 @@ static int intel_gen7_queue_flip(struct drm_device *dev,default :WARN_ONCE (1 ,"unknown plane in flip command\n" ); ret = -ENODEV ; - goto err; + goto err_unpin; } ret =intel_ring_begin (ring,4 );
drivers/gpu/drm/i915/intel_hdmi.c +15 -0
@@ -151,6 +151,9 @@ static void g4x_write_infoframe(struct drm_encoder *encoder,I915_WRITE (VIDEO_DIP_DATA , *data); data++; } +/* Write every possible data byte to force correct ECC calculation. */ +for (; i <VIDEO_DIP_DATA_SIZE ; i +=4 ) +I915_WRITE (VIDEO_DIP_DATA ,0 );mmiowb (); val |=g4x_infoframe_enable (frame);
@@ -186,6 +189,9 @@ static void ibx_write_infoframe(struct drm_encoder *encoder,I915_WRITE (TVIDEO_DIP_DATA (intel_crtc->pipe), *data); data++; } +/* Write every possible data byte to force correct ECC calculation. */ +for (; i <VIDEO_DIP_DATA_SIZE ; i +=4 ) +I915_WRITE (TVIDEO_DIP_DATA (intel_crtc->pipe),0 );mmiowb (); val |=g4x_infoframe_enable (frame);
@@ -224,6 +230,9 @@ static void cpt_write_infoframe(struct drm_encoder *encoder,I915_WRITE (TVIDEO_DIP_DATA (intel_crtc->pipe), *data); data++; } +/* Write every possible data byte to force correct ECC calculation. */ +for (; i <VIDEO_DIP_DATA_SIZE ; i +=4 ) +I915_WRITE (TVIDEO_DIP_DATA (intel_crtc->pipe),0 );mmiowb (); val |=g4x_infoframe_enable (frame);
@@ -259,6 +268,9 @@ static void vlv_write_infoframe(struct drm_encoder *encoder,I915_WRITE (VLV_TVIDEO_DIP_DATA (intel_crtc->pipe), *data); data++; } +/* Write every possible data byte to force correct ECC calculation. */ +for (; i <VIDEO_DIP_DATA_SIZE ; i +=4 ) +I915_WRITE (VLV_TVIDEO_DIP_DATA (intel_crtc->pipe),0 );mmiowb (); val |=g4x_infoframe_enable (frame);
@@ -292,6 +304,9 @@ static void hsw_write_infoframe(struct drm_encoder *encoder,I915_WRITE (data_reg + i, *data); data++; } +/* Write every possible data byte to force correct ECC calculation. */ +for (; i <VIDEO_DIP_DATA_SIZE ; i +=4 ) +I915_WRITE (data_reg + i,0 );mmiowb (); val |=hsw_infoframe_enable (frame);
drivers/gpu/drm/i915/intel_pm.c +5 -0
@@ -3387,6 +3387,11 @@ static void gen6_init_clock_gating(struct drm_device *dev) DISPPLANE_TRICKLE_FEED_DISABLE);intel_flush_display_plane (dev_priv, pipe); } + +/* The default value should be 0x200 according to docs, but the two +* platforms I checked have a 0 for this. (Maybe BIOS overrides?) */ +I915_WRITE (GEN6_GT_MODE ,_MASKED_BIT_DISABLE (0xffff )); +I915_WRITE (GEN6_GT_MODE ,_MASKED_BIT_ENABLE (GEN6_GT_MODE_HI )); }static void gen7_setup_fixed_func_scheduler (struct drm_i915_private *dev_priv)
drivers/gpu/drm/nouveau/nvc0_fence.c +25 -0
@@ -32,6 +32,7 @@struct nvc0_fence_priv {struct nouveau_fence_priv base;struct nouveau_bo *bo; +u32 *suspend; };struct nvc0_fence_chan {
@@ -125,12 +126,36 @@ nvc0_fence_context_new(struct nouveau_channel *chan, int engine)static int nvc0_fence_fini (struct drm_device *dev,int engine,bool suspend) { +struct nouveau_fifo_priv *pfifo =nv_engine (dev,NVOBJ_ENGINE_FIFO ); +struct nvc0_fence_priv *priv =nv_engine (dev, engine); +int i; + +if (suspend) { + priv->suspend =vmalloc (pfifo->channels *sizeof (u32)); +if (!priv->suspend) +return -ENOMEM ; + +for (i =0 ; i < pfifo->channels; i++) + priv->suspend[i] =nouveau_bo_rd32 (priv->bo, i); + } +return 0 ; }static int nvc0_fence_init (struct drm_device *dev,int engine) { +struct nouveau_fifo_priv *pfifo =nv_engine (dev,NVOBJ_ENGINE_FIFO ); +struct nvc0_fence_priv *priv =nv_engine (dev, engine); +int i; + +if (priv->suspend) { +for (i =0 ; i < pfifo->channels; i++) +nouveau_bo_wr32 (priv->bo, i, priv->suspend[i]); +vfree (priv->suspend); + priv->suspend =NULL ; + } +return 0 ; }
drivers/gpu/drm/radeon/evergreen_cs.c +52 -7
85 lines not on this page · raw message
drivers/gpu/drm/radeon/r600_cs.c +2 -1
@@ -2180,7 +2180,8 @@ static int r600_packet3_check(struct radeon_cs_parser *p, }break ;case PACKET3_STRMOUT_BASE_UPDATE : -if (p->family <CHIP_RV770 ) { +/* RS780 and RS880 also need this */ +if (p->family <CHIP_RS780 ) {DRM_ERROR ("STRMOUT_BASE_UPDATE only supported on 7xx\n" );return -EINVAL ; }
drivers/gpu/drm/radeon/radeon_drv.c +3 -1
@@ -64,9 +64,11 @@* 2.20.0 - r600-si: RADEON_INFO_TIMESTAMP query * 2.21.0 - r600-r700: FMASK and CMASK * 2.22.0 - r600 only: RESOLVE_BOX allowed +* 2.23.0 - allow STRMOUT_BASE_UPDATE on RS780 and RS880 +* 2.24.0 - eg only: allow MIP_ADDRESS=0 for MSAA textures */ #define KMS_DRIVER_MAJOR 2 -#define KMS_DRIVER_MINOR 22 +#define KMS_DRIVER_MINOR 24#define KMS_DRIVER_PATCHLEVEL 0int radeon_driver_load_kms (struct drm_device *dev,unsigned long flags);int radeon_driver_unload_kms (struct drm_device *dev);
drivers/gpu/drm/radeon/radeon_irq_kms.c +10 -0
@@ -204,6 +204,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
@@ -547,7 +547,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 );
@@ -602,7 +604,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/hid/hidraw.c +26 -43
106 lines not on this page · raw message
drivers/i2c/busses/i2c-piix4.c +1 -0
@@ -37,6 +37,7 @@#include <linux/stddef.h> #include <linux/ioport.h> #include <linux/i2c.h> +#include <linux/slab.h> #include <linux/init.h> #include <linux/dmi.h> #include <linux/acpi.h>
drivers/iommu/intel-iommu.c +3 -1
@@ -589,7 +589,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/dvb/frontends/drxk.h +2 -0
@@ -28,6 +28,7 @@* A value of 0 (default) or lower indicates that * the correct number of parameters will be * automatically detected. +* @load_firmware_sync: Force the firmware load to be synchronous. * * On the *_gpio vars, bit 0 is UIO-1, bit 1 is UIO-2 and bit 2 is * UIO-3.
@@ -39,6 +40,7 @@ struct drxk_config {bool parallel_ts;bool dynamic_clk;bool enable_merr_cfg; +bool load_firmware_sync;bool antenna_dvbt;u16 antenna_gpio;
drivers/media/dvb/frontends/drxk_hard.c +15 -5
@@ -6609,15 +6609,25 @@ struct dvb_frontend *drxk_attach(const struct drxk_config *config,/* Load firmware and initialize DRX-K */ if (state->microcode_name) { - status =request_firmware_nowait (THIS_MODULE ,1 , +if (config->load_firmware_sync) { +const struct firmware *fw =NULL ; + + status =request_firmware (&fw, state->microcode_name, + state->i2c->dev.parent); +if (status <0 ) + fw =NULL ; +load_firmware_cb (fw, state); + }else { + status =request_firmware_nowait (THIS_MODULE ,1 , state->microcode_name, state->i2c->dev.parent,GFP_KERNEL , state, load_firmware_cb); -if (status <0 ) { -printk (KERN_ERR -"drxk: failed to request a firmware\n" ); -return NULL ; +if (status <0 ) { +printk (KERN_ERR +"drxk: failed to request a firmware\n" ); +return NULL ; + } } }else if (init_drxk (state) <0 ) goto error;
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 failure3; - itdev->rdev = rdev;ite_pr (KERN_NOTICE ,"driver has been successfully loaded\n" );return 0 ;
drivers/media/video/em28xx/em28xx-cards.c +10 -12
@@ -2875,12 +2875,20 @@ static void em28xx_card_setup(struct em28xx *dev) } -#if defined(CONFIG_MODULES ) && defined(MODULE )static void request_module_async (struct work_struct *work) {struct em28xx *dev =container_of (work, struct em28xx, request_module_wk); +/* +* The em28xx extensions can be modules or builtin. If the +* modules are already loaded or are built in, those extensions +* can be initialised right now. Otherwise, the module init +* code will do it. +*/ +em28xx_init_extension (dev); + +#if defined(CONFIG_MODULES ) && defined(MODULE )if (dev->has_audio_class)request_module ("snd-usb-audio" );else if (dev->has_alsa_audio)
@@ -2890,6 +2898,7 @@ static void request_module_async(struct work_struct *work)request_module ("em28xx-dvb" );if (dev->board.ir_codes && !disable_ir)request_module ("em28xx-rc" ); +#endif /* CONFIG_MODULES */ }static void request_modules (struct em28xx *dev)
@@ -2902,10 +2911,6 @@ static void flush_request_modules(struct em28xx *dev) {flush_work_sync (&dev->request_module_wk); } -#else -#define request_modules (dev) -#define flush_request_modules (dev) -#endif /* CONFIG_MODULES */ /* * em28xx_release_resources()
@@ -3324,13 +3329,6 @@ static int em28xx_usb_probe(struct usb_interface *interface,*/ mutex_unlock (&dev->lock); -/* -* These extensions can be modules. If the modules are already -* loaded then we can initialise the device now, otherwise we -* will initialise it when the modules load instead. -*/ -em28xx_init_extension (dev); -return 0 ; unlock_and_free:
drivers/media/video/em28xx/em28xx-dvb.c +5 -0
@@ -316,6 +316,7 @@ static struct drxk_config terratec_h5_drxk = { .no_i2c_bridge = 1, .microcode_name = "dvb-usb-terratec-h5-drxk.fw", .qam_demod_parameter_count = 2, + .load_firmware_sync = true, };static struct drxk_config hauppauge_930c_drxk = {
@@ -325,6 +326,7 @@ static struct drxk_config hauppauge_930c_drxk = { .microcode_name = "dvb-usb-hauppauge-hvr930c-drxk.fw", .chunk_size = 56, .qam_demod_parameter_count = 2, + .load_firmware_sync = true, };struct drxk_config terratec_htc_stick_drxk = {
@@ -338,12 +340,14 @@ struct drxk_config terratec_htc_stick_drxk = { .antenna_dvbt = true, /* The windows driver uses the same. This will disable LNA. */ .antenna_gpio = 0x6, + .load_firmware_sync = true, };static struct drxk_config maxmedia_ub425_tc_drxk = { .adr =0x29 , .single_master =1 , .no_i2c_bridge =1 , + .load_firmware_sync = true, };static struct drxk_config pctv_520e_drxk = {
@@ -354,6 +358,7 @@ static struct drxk_config pctv_520e_drxk = { .chunk_size = 58, .antenna_dvbt = true, /* disable LNA */ .antenna_gpio = (1 << 2), /* disable LNA */ + .load_firmware_sync = true, };static int drxk_gate_ctrl (struct dvb_frontend *fe,int enable)
drivers/media/video/gspca/pac7302.c +2 -1
@@ -616,7 +616,7 @@ static int sd_init_controls(struct gspca_dev *gspca_dev) sd->red_balance =v4l2_ctrl_new_std (hdl, &sd_ctrl_ops,V4L2_CID_RED_BALANCE ,0 ,3 ,1 ,1 ); sd->blue_balance =v4l2_ctrl_new_std (hdl, &sd_ctrl_ops, -V4L2_CID_RED_BALANCE ,0 ,3 ,1 ,1 ); +V4L2_CID_BLUE_BALANCE ,0 ,3 ,1 ,1 ); gspca_dev->autogain =v4l2_ctrl_new_std (hdl, &sd_ctrl_ops,V4L2_CID_AUTOGAIN ,0 ,1 ,1 ,1 );
@@ -905,6 +905,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/88pm860x-core.c +63 -29
114 lines not on this page · raw message
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/core/slot-gpio.c +7 -1
@@ -100,7 +100,13 @@ int mmc_gpio_request_ro(struct mmc_host *host, unsigned int gpio) ctx = host->slot.handler_priv; -return gpio_request_one (gpio,GPIOF_DIR_IN , ctx->ro_label); + ret =gpio_request_one (gpio,GPIOF_DIR_IN , ctx->ro_label); +if (ret <0 ) +return ret; + + ctx->ro_gpio = gpio; + +return 0 ; }EXPORT_SYMBOL (mmc_gpio_request_ro);
drivers/mmc/host/omap_hsmmc.c +1 -2
@@ -2106,8 +2106,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
@@ -1229,6 +1229,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
@@ -711,6 +711,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
@@ -735,11 +737,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
@@ -2333,6 +2333,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
@@ -1387,7 +1387,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/intel/ixgbe/ixgbe_ethtool.c +1 -4
@@ -2690,10 +2690,7 @@ static int ixgbe_get_ts_info(struct net_device *dev, (1 <<HWTSTAMP_FILTER_NONE ) | (1 <<HWTSTAMP_FILTER_PTP_V1_L4_SYNC ) | (1 <<HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ ) | - (1 <<HWTSTAMP_FILTER_PTP_V2_SYNC ) | - (1 <<HWTSTAMP_FILTER_PTP_V2_DELAY_REQ ) | - (1 <<HWTSTAMP_FILTER_PTP_V2_EVENT ) | - (1 <<HWTSTAMP_FILTER_SOME ); + (1 <<HWTSTAMP_FILTER_PTP_V2_EVENT );break ;#endif /* CONFIG_IXGBE_PTP */ default :
drivers/net/ethernet/ti/davinci_cpdma.c +1 -0
@@ -863,6 +863,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/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/asix_devices.c +4 -0
@@ -930,6 +930,10 @@ static const struct usb_device_id products [] = { USB_DEVICE (0x04f1, 0x3008), .driver_info = (unsigned long ) &ax8817x_info, }, { +// Lenovo U2L100P 10/100 +USB_DEVICE (0x17ef ,0x7203 ), + .driver_info = (unsigned long) &ax88772_info, +}, {// ASIX AX88772B 10/100 USB_DEVICE (0x0b95 ,0x772b ), .driver_info = (unsigned long) &ax88772_info,
drivers/pci/probe.c +4 -2
@@ -729,8 +729,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/buffer.c +7 -6
@@ -2312,12 +2312,6 @@ int __block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,loff_t size;int ret; -/* -* Update file times before taking page lock. We may end up failing the -* fault so this update may be superfluous but who really cares... -*/ -file_update_time (vma->vm_file); -lock_page (page); size =i_size_read (inode); if ((page->mapping != inode->i_mapping) ||
@@ -2355,6 +2349,13 @@ int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,struct super_block *sb = vma->vm_file->f_path.dentry->d_inode->i_sb;sb_start_pagefault (sb); + +/* +* Update file times before taking page lock. We may end up failing the +* fault so this update may be superfluous but who really cares... +*/ +file_update_time (vma->vm_file); + ret =__block_page_mkwrite (vma, vmf, get_block);sb_end_pagefault (sb);return block_page_mkwrite_return (ret);
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
@@ -67,6 +67,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,
@@ -118,6 +119,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" },
@@ -1190,6 +1193,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 +17 -9
@@ -2463,6 +2463,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 )) {/*
@@ -2471,13 +2481,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 ; }
@@ -4052,6 +4055,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 ;uid_t i_uid;gid_t i_gid;
@@ -4102,7 +4106,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,
@@ -4155,7 +4162,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);
@@ -4780,6 +4787,7 @@ int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)int retries =0 ;sb_start_pagefault (inode->i_sb); +file_update_time (vma->vm_file);/* Delalloc case is easy... */ if (test_opt(inode->i_sb, DELALLOC) && !ext4_should_journal_data(inode) &&
fs/ext4/move_extent.c +53 -121
311 lines not on this page · raw message
fs/ext4/namei.c +0 -2
@@ -2149,9 +2149,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;
@@ -1349,13 +1358,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);
@@ -1729,7 +1740,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
@@ -1735,7 +1735,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
@@ -63,6 +63,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
@@ -1354,6 +1354,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/super.c +4 -0
@@ -100,6 +100,10 @@ static int jffs2_sync_fs(struct super_block *sb, int wait) {struct jffs2_sb_info *c =JFFS2_SB_INFO (sb); +#ifdef CONFIG_JFFS2_FS_WRITEBUFFER +cancel_delayed_work_sync (&c->wbuf_dwork); +#endif +mutex_lock (&c->alloc_sem);jffs2_flush_wbuf_pad (c);mutex_unlock (&c->alloc_sem);
fs/jffs2/wbuf.c +4 -4
@@ -1044,10 +1044,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; }
@@ -1086,10 +1086,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/nilfs2/file.c +1 -0
@@ -116,6 +116,7 @@ static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)if (unlikely (ret)) goto out; +file_update_time (vma->vm_file); ret =__block_page_mkwrite (vma, vmf, nilfs_get_block);if (ret) {nilfs_transaction_abort (inode->i_sb);
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 ;/*
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/net/ip_fib.h +1 -0
@@ -102,6 +102,7 @@ struct fib_info {unsigned char fib_dead;unsigned char fib_protocol;unsigned char fib_scope; +unsigned char fib_type;__be32 fib_prefsrc;u32 fib_priority;u32 *fib_metrics;
kernel/rcutree.c +3 -1
@@ -305,7 +305,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 +2 -0
@@ -5604,7 +5604,9 @@ migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)migrate_tasks (cpu);BUG_ON (rq->nr_running !=1 );/* the migration thread */ raw_spin_unlock_irqrestore (&rq->lock, flags); +break ; +case CPU_DEAD :calc_load_migrate (rq);break ;#endif
kernel/sys.c +1 -0
@@ -368,6 +368,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 +24 -3
@@ -1927,10 +1927,9 @@ static void move_linked_works(struct work_struct *work, struct list_head *head, *nextp = n; } -static void cwq_activate_first_delayed (struct cpu_workqueue_struct *cwq) +static void cwq_activate_delayed_work (struct work_struct *work) { -struct work_struct *work =list_first_entry (&cwq->delayed_works, - struct work_struct, entry); +struct cpu_workqueue_struct *cwq =get_work_cwq (work);trace_workqueue_activate_work (work);move_linked_works (work, &cwq->pool->worklist,NULL );
@@ -1938,6 +1937,14 @@ static void cwq_activate_first_delayed(struct cpu_workqueue_struct *cwq) cwq->nr_active++; } +static void cwq_activate_first_delayed (struct cpu_workqueue_struct *cwq) +{ +struct work_struct *work =list_first_entry (&cwq->delayed_works, + struct work_struct, entry); + +cwq_activate_delayed_work (work); +} +/** * cwq_dec_nr_in_flight - decrement cwq's nr_in_flight * @cwq: cwq of interest
@@ -2073,7 +2080,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);
@@ -2844,6 +2853,18 @@ static int try_to_grab_pending(struct work_struct *work)smp_rmb ();if (gcwq ==get_work_gcwq (work)) {debug_work_deactivate (work); + +/* +* A delayed work item cannot be grabbed directly +* because it might have linked NO_COLOR work items +* which, if left on the delayed_list, will confuse +* cwq->nr_active management later on and cause +* stall. Make sure the work item is activated +* before grabbing. +*/ +if (*work_data_bits (work) &WORK_STRUCT_DELAYED ) +cwq_activate_delayed_work (work); +list_del_init (&work->entry); cwq_dec_nr_in_flight(get_work_cwq(work), get_work_color(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
@@ -2481,7 +2481,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
@@ -1781,9 +1781,6 @@ void __init kmem_cache_init_late(void) slab_state =UP ; -/* Annotate slab for lockdep -- annotate the malloc caches */ -init_lock_keys (); -/* 6) resize the head arrays to their final sizes */ mutex_lock (&slab_mutex);list_for_each_entry (cachep, &slab_caches, list)
@@ -1791,6 +1788,9 @@ void __init kmem_cache_init_late(void)BUG ();mutex_unlock (&slab_mutex);
Lines of this file are not shown. View the raw message.
scripts/gcc-x86_32-has-stack-protector.sh +1 -1
Lines of this file are not shown. View the raw message.
scripts/gcc-x86_64-has-stack-protector.sh +1 -1
Lines of this file are not shown. View the raw message.
scripts/kconfig/lxdialog/check-lxdialog.sh +1 -1
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.