Push to branch refs/heads/master: a3ceb2b57fa71c91079f86c1092553f14c63c2d2 --> 2fb4b2cae16e4276e05fda61f3d1043563c42cab
.mailmap | 5 + CREDITS | 7 +- Documentation/filesystems/00-INDEX | 2 + Documentation/filesystems/unionfs/00-INDEX | 10 + Documentation/filesystems/unionfs/concepts.txt | 287 +++++ Documentation/filesystems/unionfs/issues.txt | 28 + Documentation/filesystems/unionfs/rename.txt | 31 + Documentation/filesystems/unionfs/usage.txt | 134 +++ MAINTAINERS | 11 +- Makefile | 2 +- arch/arm/boot/dts/hi3620.dtsi | 2 +- arch/arm/boot/dts/omap3-n900.dts | 2 +- arch/arm/boot/dts/r8a7791.dtsi | 4 +- arch/arm/crypto/aesbs-glue.c | 10 +- arch/arm/include/asm/mach/arch.h | 1 + arch/arm/kernel/devtree.c | 8 +- arch/arm/mach-exynos/exynos.c | 10 + arch/arm/mach-omap2/gpmc-nand.c | 18 +- arch/arm/mach-omap2/omap4-common.c | 4 + arch/arm/xen/grant-table.c | 5 + arch/arm64/crypto/aes-glue.c | 12 +- arch/powerpc/kernel/rtas_flash.c | 6 +- arch/powerpc/perf/core-book3s.c | 6 +- arch/powerpc/platforms/powernv/opal-elog.c | 4 +- arch/x86/kernel/cpu/intel.c | 22 +- arch/x86/kernel/cpu/intel_cacheinfo.c | 12 + arch/x86/kernel/cpu/mcheck/mce.c | 10 +- arch/x86/kernel/cpu/perf_event.c | 3 + arch/x86/kernel/cpu/perf_event.h | 12 +- arch/x86/kernel/cpu/perf_event_intel.c | 69 +- arch/x86/kernel/cpu/perf_event_intel_ds.c | 6 +- arch/x86/kernel/cpu/perf_event_intel_uncore.c | 11 +- arch/x86/kernel/entry_32.S | 9 +- arch/x86/kernel/kprobes/core.c | 3 + arch/x86/xen/grant-table.c | 148 ++- crypto/af_alg.c | 2 + drivers/clk/ti/clk-7xx.c | 7 +- drivers/firewire/ohci.c | 4 +- drivers/isdn/gigaset/bas-gigaset.c | 1 + drivers/net/can/c_can/c_can_platform.c | 3 +- drivers/net/ethernet/amd/xgbe/xgbe-main.c | 3 +- drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 1 + drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 9 + .../net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 1 + drivers/net/ethernet/broadcom/genet/bcmgenet.c | 5 + drivers/net/ethernet/sun/sunvnet.c | 22 +- drivers/net/hyperv/netvsc.c | 4 +- drivers/net/phy/mdio_bus.c | 1 + drivers/net/phy/phy_device.c | 15 +- drivers/net/usb/cdc_ether.c | 16 + drivers/net/usb/r8152.c | 7 +- drivers/net/vxlan.c | 2 +- drivers/net/wireless/ath/ath9k/xmit.c | 9 + drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | 15 +- drivers/net/wireless/iwlwifi/mvm/mac80211.c | 7 - drivers/of/fdt.c | 66 +- drivers/pnp/pnpacpi/core.c | 3 +- drivers/rapidio/devices/tsi721_dma.c | 8 +- drivers/scsi/scsi_lib.c | 8 + drivers/xen/grant-table.c | 9 +- fs/Kconfig | 1 + fs/Makefile | 1 + fs/afs/main.c | 4 +- fs/direct-io.c | 14 +- fs/namei.c | 3 +- fs/splice.c | 22 +- fs/unionfs/Kconfig | 23 + fs/unionfs/Makefile | 17 + fs/unionfs/commonfops.c | 957 +++++++++++++++++ fs/unionfs/copyup.c | 899 ++++++++++++++++ fs/unionfs/debug.c | 531 ++++++++++ fs/unionfs/dentry.c | 398 +++++++ fs/unionfs/dirfops.c | 306 ++++++ fs/unionfs/dirhelper.c | 157 +++ fs/unionfs/fanout.h | 407 +++++++ fs/unionfs/file.c | 386 +++++++ fs/unionfs/inode.c | 1110 ++++++++++++++++++++ fs/unionfs/lookup.c | 501 +++++++++ fs/unionfs/main.c | 764 ++++++++++++++ fs/unionfs/mmap.c | 125 +++ fs/unionfs/rdstate.c | 285 +++++ fs/unionfs/rename.c | 518 +++++++++ fs/unionfs/sioq.c | 101 ++ fs/unionfs/sioq.h | 91 ++ fs/unionfs/subr.c | 95 ++ fs/unionfs/super.c | 1030 ++++++++++++++++++ fs/unionfs/union.h | 668 ++++++++++++ fs/unionfs/unlink.c | 278 +++++ fs/unionfs/whiteout.c | 573 ++++++++++ fs/unionfs/xattr.c | 173 +++ include/dt-bindings/pinctrl/dra.h | 7 +- include/linux/hugetlb.h | 1 + include/linux/namei.h | 2 + include/linux/of_fdt.h | 3 + include/linux/splice.h | 5 + include/linux/union_fs.h | 22 + include/net/ip.h | 11 +- include/uapi/linux/magic.h | 2 + include/xen/grant_table.h | 1 + kernel/events/core.c | 32 +- kernel/kexec.c | 4 + kernel/kprobes.c | 14 +- kernel/rcu/rcutorture.c | 4 +- mm/filemap.c | 13 +- mm/hugetlb.c | 2 +- mm/memcontrol.c | 4 + mm/memory-failure.c | 14 +- mm/memory.c | 21 +- mm/page-writeback.c | 6 +- mm/page_alloc.c | 31 +- net/compat.c | 9 +- net/core/iovec.c | 6 +- net/core/neighbour.c | 2 +- net/ipv4/route.c | 32 +- net/ipv6/ip6_output.c | 2 + net/mac80211/cfg.c | 5 +- net/mac80211/tx.c | 20 +- net/netfilter/ipvs/ip_vs_conn.c | 1 - net/sctp/associola.c | 1 + net/wireless/trace.h | 3 +- net/xfrm/xfrm_policy.c | 2 + net/xfrm/xfrm_user.c | 7 +- security/security.c | 1 + virt/kvm/arm/vgic.c | 24 +- 124 files changed, 11629 insertions(+), 265 deletions(-) commit 2fb4b2cae16e4276e05fda61f3d1043563c42cab Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Aug 1 23:06:47 2014 -0400 Unionfs: update unionfs_fsync In v3.16 generic_file_fsync will access ->i_sb->s_bdev->bd_disk, but s_bdev is NULL for unionfs inode. This will trigger a kernel panic in xfstests generic/075, generic/091, etc. as of kernel v3.16-rc1. This patch fixes this issue by using __generic_file_fsync, a new interface introduced in v3.16. Signed-off-by: Mengyang Li <li.mengy...@stonybrook.edu> Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 9f71ca51d6d12a6a63f89d81677a564bdd205a0c Author: Erez Zadok <e...@cs.sunysb.edu> Date: Thu May 15 00:54:09 2014 -0400 Unionfs: implement vm_ops->page_mkwrite Some file systems (e.g., ext4) require it. Reported by Ted Ts'o. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 70c4c2818ba30726491014d141f5a9ab7e5b3784 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri May 9 14:58:20 2014 -0400 Unionfs: fix ->readdir It's enough to use llseek to set lower dir pos. No need to also set lower_file->f_pos directly, as it breaks readdir for ext4 and other ext-based file systems. Reported by Vaibhav Nagarnaik and Ted Ts'o. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 86b5c14330848cc4e1d43f1a0fb4cbf32b026445 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sun Apr 27 00:20:57 2014 -0400 Unionfs: use new vfs_rename prototype Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit ed3bc59b950eaa1362edd26beecc52da5de0031c Author: Erez Zadok <e...@cs.sunysb.edu> Date: Thu Apr 3 14:30:21 2014 -0400 Unionfs: update maintainers Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit a72dbfefb77fd982347b0df5166f4c40d845de98 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Mar 28 12:01:32 2014 -0400 Unionfs: Release 2.5.13 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 198584234c37b6fd6d76f346001ae904f3b911de Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Jan 21 01:43:58 2014 -0500 Unionfs: 2014 Copyright update Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 9aeb0acd486448fb7e4ae055791a28055c3d4d43 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Wed Dec 11 23:56:40 2013 -0500 Unionfs: use new %pd printf for printing dentry name Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit cf4bc3ae005d1a0931bd7791431684f266e20b22 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Mon Dec 2 16:19:41 2013 -0500 Unionfs: Release 2.5.12 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 1b98ad2ae6f01383a86f6047fddd5911aab0f1a4 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Wed Nov 27 20:01:01 2013 -0500 Unionfs: Release 2.5.12 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 13d8ee2ac8e468dbeffa409e5060773cd18f1391 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Wed Nov 27 20:01:00 2013 -0500 Unionfs: copyright update for 2013 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 782d314c56e0a0b9d5d2f6d0d9270231cf9dc6d4 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Wed Nov 27 20:00:53 2013 -0500 Unionfs: port to 3.13-rc1 Use file_inode helper. Add NULL extra arg to vfs_* methods and notify_change where it takes a delegated inode. Check DCACHE_OP_REVALIDATE flag in ->d_revalidate. ->setattr implemented, but not used yet. Force our root dentry to be of type DIR. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 8ee1ddeb6cd99fbd176de5051c8ec2402e8b3d4e Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Nov 26 22:01:34 2013 -0500 Unionfs: port to 3.12 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit f58df424f8458baea1f8e6245c3ab85d66f9ff8a Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Nov 26 22:01:34 2013 -0500 Unionfs: port to 3.11 Readdir VFS interface overhauled between 3.10 and 3.11. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 9f964ba19c4dfaa22913a8801d67af32b9971c5a Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Nov 26 22:01:34 2013 -0500 Unionfs: port to 3.10 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 2f64b891c4e349d155ec55c57e9beb8e2a14a2e4 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Nov 26 22:01:34 2013 -0500 Unionfs: port to 3.9 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 275f5f3f642f5bb13ebc4a83f73df027e600be35 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Nov 26 22:01:34 2013 -0500 Unionfs: port to 3.8 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 064a132c023534d25270d5363a94111a009410d9 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Nov 26 22:01:34 2013 -0500 Unionfs: port to 3.6 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit d150f3134e29617ec2f5e90a926962c3e1042738 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Nov 26 22:01:34 2013 -0500 Uniofs: port to 3.5 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit cb591510075745637a979e584afc6e02cb07d52a Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Nov 26 22:01:34 2013 -0500 Unionfs: namei fixes and misc Updated lookup_one_len_nd(), update MAINTAINERS, remove old comments and copyrights. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 446a4ebedd2efeae399ef8e1e8ceeba3792fb90b Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Nov 26 22:01:34 2013 -0500 Unionfs: port to 3.4 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit d37e928ab5cd37ae16590020747679119a91ced9 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Feb 10 16:12:48 2012 -0500 Unionfs: Release 2.5.11 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 571c7b1e03326fa7a470cfa9825b63a8f8a1797a Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Feb 10 15:36:44 2012 -0500 Unionfs: properly check for error in ->mount Record dev_name correctly for branch-management. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 1e713bac0ef818bffe3c9463278667dcce493b3f Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Feb 10 15:36:44 2012 -0500 Unionfs: update ->show_options prototype Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit e317d90adb7b5d0477ec56ed6b4f4190886f6d83 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Feb 10 15:36:43 2012 -0500 patch unionfs-debug-fixes.patch commit 883308646359ec7e0c4b5c1ea627942d34de1317 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Feb 10 15:36:36 2012 -0500 Unionfs: use mode_t Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit a981f1bfe0f4d9f39e47c2287f06ae2a1f83a1dd Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Feb 10 15:36:33 2012 -0500 Unionfs: use set_nlinks Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit a4eebf14b96eec49b4f0e45b935a35cec609d1ec Author: Erez Zadok <e...@cs.sunysb.edu> Date: Wed Sep 7 00:51:50 2011 -0400 Unionfs: Release 2.5.10 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit a85393a056ef3268a62249bf3c65131c6db8c7ee Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 6 01:06:42 2011 -0400 Unionfs: debug - don't complain when d_deleted dentries Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 064f8b5734f362ad6097ecb23a7d4a590efb6af1 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 6 01:05:42 2011 -0400 Unionfs: define some debug macros to noop if DEBUG is off Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 352204f9c19e5b9f5e795fd9e65b9eea9fd2532e Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 6 01:04:42 2011 -0400 Unionfs: ->open cleanup and fixes Cleanup the code from repeated references the same dentry/mnt. In __open_dir get lower_mnt from parent if can't find it from child. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 6b4e44a91d56be74372859cc814fd49f1910526d Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 6 01:03:42 2011 -0400 Unionfs: fix oops bug in file_revalidate Reverses commit "3e9b8b599aa6832e464f86872ca37840090de630" (in unionfs-3.1 tree) which did this: ``Unionfs: revalidate files which are open but unlinked Need to re-open the file if the starting dentry is on a higher priority branch than the currently opened file (which could happen when we ftruncate an opened, but unlinked file).'' That fix caused oopses in file_revalidate for some people. So, I'm reversing that old fix: it's possible that bug is already fixed thanks to other code changes. If not, we'll need to test and fix revalidation of open/unlinked files differently and carefully. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit dfb5a5252fb8679f26120e61a2be09859c4aa98d Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 6 01:02:42 2011 -0400 Wrapfs: use d_alloc_root Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 663c9cb64f8fd71b6bef0d167bb0da108b5af976 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 6 01:01:42 2011 -0400 Unionfs: use d_set_d_op Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 58e89d04f62dbf6a0cfe7d8d410933caac8e30e5 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 6 01:00:42 2011 -0400 Unionfs: use updated vfs_path_lookup prototype Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 9e0b9a36483f219c50c4d340e3f7f2652f613d37 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 6 00:59:42 2011 -0400 Unionfs: support LOOKUP_RCU in ->d_revalidate Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 38c1c2d9c6f4ea8e95ce3e5baaf7096126998739 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 6 00:58:42 2011 -0400 Unionfs: new ->permission prototype and fixes Also remove lookup and locking of dentry in unionfs_permission. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 485fa033ca48fb0dfd07089d35e0ac6e5015e722 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 6 00:57:42 2011 -0400 Unionfs: ->fsync updates for new prototype Also use lockdep_off/on in unionfs_fsync. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 9b2e3cf7cd1332b1b7a3d34480d44153c412e377 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Jun 25 19:08:02 2011 -0400 Unionfs: Release 2.5.9.2 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit fac17078429b9677b706ab569537c22c189c812d Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri May 13 22:25:01 2011 -0400 Unionfs: Release 2.5.9.1 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit c3341c4dd6a52500ab745a99bf4e0bda3c87083c Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue May 3 22:42:17 2011 -0400 Unionfs: compat_ioctl fixes Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit dfd0a7422db71d78c437cd4a269ec392b6e5ff16 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sun May 1 01:15:26 2011 -0400 Unionfs: Release 2.5.9 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 1d101c77504a1e4395c2cb7c111d2cd043e2bfa9 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sun May 1 01:14:26 2011 -0400 Unionfs: copyright update for 2011 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit e06ff218b630f73f64dbcc596593ad351dbea58f Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:46:57 2011 -0400 Unionfs: avoid lockdep warnings in show_options Due to namespace_sem lock taken. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 76871500bdfbb0c4d8c1f8ca455d55c2e82293e4 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:34:00 2011 -0400 Unionfs: pass nameidata when lower file system is NFS Use new lookup_one_len_nd() and pass nameidata, now required by NFS3, else you get an oops. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit c644733f5b66f74e1e55ab5e013e297bc75e3065 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:34:00 2011 -0400 Unionfs: reorder initializations in ->permission First igrab, then reference the inode in question; and do all this after checking for IPERM_FLAG_RCU. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 33827b92688aa072adbc1a04a5fe896b63b61031 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:33:59 2011 -0400 Unionfs: cleanup state in ->permission before returning ECHILD Fixes bugs that cased leftover dentries upon unmount, causing oopses. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit d3b734f948abc6acb542454cfce357bb9a2ea63e Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:33:58 2011 -0400 Unionfs: remove unused fgen in file_release Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 81296a3dd8bfbe095a87d2668bbd93a22e5d98d2 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:33:58 2011 -0400 VFS: introduce lookup_one_len_nd Just like lookup_one_len() but passes a nameidata parameter, which is now required by NFS3, else you get an oops. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 17740dfff0797a10d8d1cf3f001dc0a0c71965bc Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:33:57 2011 -0400 Unionfs: force only one open lower file after copyup in open(2) Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 7256d64e2abab254015bd991ac0543e193182ad6 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:33:57 2011 -0400 Unionfs: revalidate files which are open but unlinked Need to re-open the file if the starting dentry is on a higher priority branch than the currently opened file (which could happen when we ftruncate an opened, but unlinked file). Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 5b6879fa588556f1749d2d2664d88a03f0f0e537 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:33:56 2011 -0400 Unionfs: remove whiteout if regular file also exists We used to return EIO then, but it's safer to cleanup such a situation, if it occurs, in check_unlink_whiteout, because we know for a fact that we want to delete a whiteout if one exists. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 66b40c119d69f5f182416a43047fb49467d1ab08 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:33:55 2011 -0400 Unionfs: remove whiteout of opened but unlinked file from readonly branch If we unlink an opened file in a readonly branch, then we create a whiteout. But then if if ftruncate it, we copyup a zero-length file. So we have to delete the whiteout. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 831464a7f11d77714957ed2778ae612954d759ee Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:33:55 2011 -0400 Unionfs: find lower inode of unlinked opened files in setattr To find the inode of a lower file that's open but unlinked, we cannot find it via unionfs_lower_inode as that's NULL; but we can get it properly from lower_dentry->d_inode. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 5110cbda2c342a65aad13c327fb940cb736fada8 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:33:19 2011 -0400 Unionfs: port to 2.6.39 Remove lock/unlock_kernel in ->fasync. Convert from ->get_sb to ->mount op. Remove include to smp_lock.h, added sched.h. Convert from path_lookup(nd) to kern_path(path). Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 1ea03c02bebcb31ea97467ae3a3c43c35920d0f4 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:32:19 2011 -0400 Unionfs: Release 2.5.8 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 3e56c1c6b70179c5c22baf5017f942acb07350b3 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:32:18 2011 -0400 Unionfs: implement replacement for mnt_get_count Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit c6ad4c48c12a8ddf229d01dc62b43ca1127867fa Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:32:17 2011 -0400 Unionfs: update ->permission prototye and code for new iperm flag Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit c153f0ac350f6bc504d690da2b034cd2350ae054 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:32:16 2011 -0400 Unionfs: update name of macro for embedded dentry name length Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 7926c8fa3cd83b30478a785ae993b9c7c947f8c4 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:31:29 2011 -0400 Unionfs: ->setattr fixes Call inode_check_ok first thing on our inode. Pass lower_file in struct iattr to lower file system. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit f014a12dc67208f2a4408fd38c52f5b604496e42 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Apr 30 01:30:29 2011 -0400 Unionfs: don't dereference null pointers if dir="" was given Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 4799b7e4023ed78ecf3465d020f2382774bd2f76 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Thu Nov 4 01:07:41 2010 -0400 Unionfs: Release 2.5.7 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit b9691139c8805550f43c86491740707b11207d70 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Nov 2 18:47:42 2010 -0400 Unionfs: call truncate_inode_pages+end_writeback in ->evict_inode Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 14256ec7eca1ec05dd9e10ebd3f0e8f074fb86b0 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Sep 24 01:25:04 2010 -0400 Unionfs: Release 2.5.6 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 1d2f06b23e703f6e5468ffdcf5393fcaabd57750 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Sep 24 03:10:09 2010 -0400 Unionfs: pass valid vfsmount to vfs_statfs Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit b5129f0472a1732c57b027baa63099c6e08937ac Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Sep 24 02:21:08 2010 -0400 Unionfs: run check_nd only if nd is valid in ->put_link Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit f1c63caf7961c725c92f0e186621eeb9c0ba9d30 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Sep 24 02:27:44 2010 -0400 Unionfs: support ->unlocked_ioctl and ->compat_ioctl Old ->ioctl was split into ->unlocked_ioctl and ->compat_ioctl. Compat version doesn't need to lock_kernel any longer. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 01cad9646fa6205429990cc4b592e343f8fff032 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Wed Aug 11 02:13:49 2010 -0400 Unionfs: Release 2.5.5 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit b2f0c4a928f2f6b8de2ba35ab4fce92b4e9cdb32 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Wed Aug 11 01:30:28 2010 -0400 Unionfs: new vfs_statfs and ->evict_inode prototypes Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 13e64bb69e14ecac2c7e9fd8d197ec76ca890e36 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Aug 6 01:48:52 2010 -0400 Unionfs: update fsync prototype Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 613a8f3699adfe70a94945595cf60439fefc3965 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Aug 6 01:48:45 2010 -0400 Unionfs: update write_inode prototype Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 7a048eb0cc7e986d9f233a3e720b40b404c7a431 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Thu Feb 25 20:36:28 2010 -0500 Unionfs: Release 2.5.4 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 42969a584dd55117afcce6ab9e53709bb8134385 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Thu Feb 25 20:23:27 2010 -0500 Unionfs: update copyright year to 2010 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 46d05638b7da09749d6cfac829c865ec60e1a21a Author: Erez Zadok <e...@cs.sunysb.edu> Date: Thu Dec 3 21:23:24 2009 -0500 patch unionfs-remove-unnecessary-lockdep-off-on-in-rmdir.patch commit 208b2c1ddff326e266ed48420f79b89766ba2d94 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Thu Dec 3 20:58:43 2009 -0500 patch unionfs-remove-unnecessary-lockdep-off-on-in-rename.patch commit c0e1cda9f0e916d88dda62975cef2361e1e2d0e3 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sun Nov 8 18:18:56 2009 -0500 Unionfs: unlock lower parent inode correctly on error path Bug fix: on some errors, lower directory inode may remain locked and hold a reference. This was in ->create, ->symlink, and ->mknod. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit a671ec2fe8e8a5ca461258f8759daa0120502be9 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Thu Dec 3 18:51:37 2009 -0500 Unionfs: make our lower_vm_ops pointer a const, to match VFS Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 76d3d322738ec90a64a12d22f30d505e9c70567e Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 22 18:22:19 2009 -0400 Unionfs: Release 2.5.3 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit e10120b43c66d079636fdbd07cdbeb21e9b9371e Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 22 17:27:30 2009 -0400 Unionfs: handle an open-unlink-ftruncate sequence If someone calls open(), then unlink(), then ftruncate() on a file (rare, but possible), then it's possible for unionfs to get an unlinked inode which doesn't have an inode->i_sb and its inode->i_ino is zero. Don't oops in that case. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 4f2a70328f09c89837df9e7b53cd9aa43a0a69cb Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue Sep 22 17:27:23 2009 -0400 Unionfs: fix readonly nfs2/3 permission handling In unionfs_permission: NFSv2/3 return EACCES on readonly-exported, locally readonly-mounted file systems, instead of EROFS like other file systems do. So we have no choice here but to intercept this and ignore it for NFS branches marked readonly. Specifically, we avoid using NFS's own "broken" ->permission method, and rely on generic_permission() to do basic checking for us. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit ac0ae03add4f7796c8cf48573781454559b59e4a Author: Erez Zadok <e...@cs.sunysb.edu> Date: Thu Aug 6 15:26:01 2009 -0400 Unionfs: Release 2.5.2 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit a68e9c8d1ec28c2413cad84fae84ddfb0da01ec8 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Mon May 25 23:15:17 2009 -0400 Unionfs: prevent lockdep false positives in mmap Due to a new (and probably overzealous) lockdep-enabled might_fault(). Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 70492d5dbfbdead24f7d99b8dcb64668ef02d076 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Thu May 21 21:02:31 2009 -0400 Unionfs: lock base inode mutex around lookup_one_len Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit ba901c57e0f63faa3ac22c935495b49aa411b4c5 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Tue May 26 00:52:48 2009 -0400 Unionfs: merge fixes from rebasing to 2.6.29. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 655e3d715907dea51a48bef50a8b3e81b0420c9a Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sun Jan 18 21:22:29 2009 -0500 Unionfs: release 2.5.1 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit abe03b16ddbc9d6129a09230de9decf5efc1585e Author: Erez Zadok <e...@cs.sunysb.edu> Date: Mon Jan 19 00:38:32 2009 -0500 Unionfs: update maintainers Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit edf9b49bbe261351df77e10aa9080257462b4edc Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sun Jan 18 22:22:06 2009 -0500 Unionfs: update copyrights for 2009 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 9f65194c3492d7e49c74c6010f035e71cb2ce312 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sun Jan 18 21:00:46 2009 -0500 Unionfs: create whiteout in correct dir after rename with copyup Fixes bug #625: a file renamed/moved into a directory, if resulted in a copyup with a whiteout creation, could cause the whiteout to be created in the wrong dir. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 8470b45c3beb39db9fea99e64610f7c363d30e34 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Jan 17 03:27:51 2009 -0500 Unionfs: prevent lockdep false positives in mmap Due to a new (and probably overzealous) lockdep-enabled might_fault(). Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit ac72fe1eb30e3bdebcc4140dbf8a837dabe9f85d Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Nov 7 16:49:48 2008 -0500 Unionfs: use path_put in mount code Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit d90bf4edeca08e781d115af077ed9dc6e83c4162 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Nov 7 16:50:16 2008 -0500 Unionfs: handle partial copyup errors gracefully Don't leave any dentries behind if copying up the inode (or setting its permission, i.e., using TOMOYO) failed. CC: Tetsuo Handa <penguin-ker...@i-love.sakura.ne.jp> Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit bec56da79a4d0bb2f89b442911334663abc5ce5b Author: Erez Zadok <e...@cs.sunysb.edu> Date: Mon Jan 12 22:02:11 2009 -0500 Unionfs: use the new struct cred API Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 291162a8c9f8b677c96e16b2c93892c5fafbc2be Author: Erez Zadok <e...@cs.sunysb.edu> Date: Mon Jan 12 22:01:15 2009 -0500 Unionfs: dentry_open takes a struct cred now Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 3b8974ce9a41fb63ee06bb76d5b63aebbc300350 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Mon Jan 12 22:16:46 2009 -0500 Security/VFS: re-export security_inode_permission symbol Unionfs needs it because it has to do everything in there, but skip the EROFS test (so copyup can be triggered). There's no easy way to execute parts of security_inode_permission() without copying and duplicating much of its functionality, so exporting the symbol seems the simplest. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit c855d5cb22124557a3e6a4531ec33e122fc76408 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Sat Sep 20 10:54:59 2008 -0400 Unionfs: release 2.5 Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 18728fff4fe77d20b86c5181d0c4736bdb958db3 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Thu Sep 18 19:55:19 2008 -0400 Unionfs: unionfs_permission locking fixes Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 04d6c889ff5a90fbade64d7dd75c6df548be1079 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Fri Sep 19 00:44:00 2008 -0400 Unionfs: file/dentry revalidation fixes Cleanup unnecessary code, merge functions together, and handle situation where parent dentry may not be valid. commit 08b4b67a98225566f47ee9d2a221808819856e35 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Wed Sep 17 13:52:17 2008 -0400 Unionfs: remove unused nameidata parameters In preparation for the VFS removing most/all nameidata from file systems's view. Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit 8096dc063de2341d0e9c0d6b9a2f55448633bf5c Author: Erez Zadok <e...@cs.sunysb.edu> Date: Wed Sep 17 11:41:28 2008 -0400 Unionfs: file_release must always succeed Why does f_op->release return an int if the VFS ignores it?! Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> commit f695e6cc70c648a7d15ff75736967d028430a1d7 Author: Erez Zadok <e...@cs.sunysb.edu> Date: Wed Sep 17 03:29:35 2008 -0400 Unionfs: remove redundant file-invariant check in file_revalidate Signed-off-by: Erez Zadok <e...@cs.sunysb.edu> diff --git a/.mailmap b/.mailmap index df1baba..1ad6873 100644 --- a/.mailmap +++ b/.mailmap @@ -62,6 +62,11 @@ Jeff Garzik <jgar...@pretzel.yyz.us> Jens Axboe <ax...@suse.de> Jens Osterkamp <jens.osterk...@de.ibm.com> John Stultz <johns...@us.ibm.com> +<j...@joshtriplett.org> <j...@freedesktop.org> +<j...@joshtriplett.org> <j...@kernel.org> +<j...@joshtriplett.org> <jo...@linux.vnet.ibm.com> +<j...@joshtriplett.org> <jo...@us.ibm.com> +<j...@joshtriplett.org> <jo...@vnet.ibm.com> Juha Yrjola <at solidboot.com> Juha Yrjola <juha.yrj...@nokia.com> Juha Yrjola <juha.yrj...@solidboot.com> diff --git a/CREDITS b/CREDITS index 28ee151..a80b667 100644 --- a/CREDITS +++ b/CREDITS @@ -3511,10 +3511,11 @@ S: MacGregor A.C.T 2615 S: Australia N: Josh Triplett -E: j...@freedesktop.org -P: 1024D/D0FE7AFB B24A 65C9 1D71 2AC2 DE87 CA26 189B 9946 D0FE 7AFB -D: rcutorture maintainer +E: j...@joshtriplett.org +P: 4096R/8AFF873D 758E 5042 E397 4BA3 3A9C 1E67 0ED9 A3DF 8AFF 873D +D: RCU and rcutorture D: lock annotations, finding and fixing lock bugs +D: kernel tinification N: Winfried Trümper E: wi...@xpilot.org diff --git a/MAINTAINERS b/MAINTAINERS index 718a2bf..5a6051d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7424,7 +7424,7 @@ S: Orphan F: drivers/net/wireless/ray* RCUTORTURE MODULE -M: Josh Triplett <j...@freedesktop.org> +M: Josh Triplett <j...@joshtriplett.org> M: "Paul E. McKenney" <paul...@linux.vnet.ibm.com> L: linux-ker...@vger.kernel.org S: Supported diff --git a/Makefile b/Makefile index 5147f3f..f6a7794 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ VERSION = 3 PATCHLEVEL = 16 SUBLEVEL = 0 -EXTRAVERSION = -rc6 +EXTRAVERSION = -rc7 NAME = Shuffling Zombie Juror # *DOCUMENTATION* diff --git a/arch/arm/boot/dts/hi3620.dtsi b/arch/arm/boot/dts/hi3620.dtsi index ab1116d..83a5b86 100644 --- a/arch/arm/boot/dts/hi3620.dtsi +++ b/arch/arm/boot/dts/hi3620.dtsi @@ -73,7 +73,7 @@ L2: l2-cache { compatible = "arm,pl310-cache"; - reg = <0xfc10000 0x100000>; + reg = <0x100000 0x100000>; interrupts = <0 15 4>; cache-unified; cache-level = <2>; diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts index 1fe45d1..b15f1a7 100644 --- a/arch/arm/boot/dts/omap3-n900.dts +++ b/arch/arm/boot/dts/omap3-n900.dts @@ -353,7 +353,7 @@ }; twl_power: power { - compatible = "ti,twl4030-power-n900", "ti,twl4030-power-idle-osc-off"; + compatible = "ti,twl4030-power-n900"; ti,use_poweroff; }; }; diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi index 8d7ffae..79f68ac 100644 --- a/arch/arm/boot/dts/r8a7791.dtsi +++ b/arch/arm/boot/dts/r8a7791.dtsi @@ -540,9 +540,9 @@ #clock-cells = <0>; clock-output-names = "sd1"; }; - sd2_clk: sd3_clk@e615007c { + sd2_clk: sd3_clk@e615026c { compatible = "renesas,r8a7791-div6-clock", "renesas,cpg-div6-clock"; - reg = <0 0xe615007c 0 4>; + reg = <0 0xe615026c 0 4>; clocks = <&pll1_div2_clk>; #clock-cells = <0>; clock-output-names = "sd2"; diff --git a/arch/arm/crypto/aesbs-glue.c b/arch/arm/crypto/aesbs-glue.c index 4522366..15468fb 100644 --- a/arch/arm/crypto/aesbs-glue.c +++ b/arch/arm/crypto/aesbs-glue.c @@ -137,7 +137,7 @@ static int aesbs_cbc_encrypt(struct blkcipher_desc *desc, dst += AES_BLOCK_SIZE; } while (--blocks); } - err = blkcipher_walk_done(desc, &walk, 0); + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); } return err; } @@ -158,7 +158,7 @@ static int aesbs_cbc_decrypt(struct blkcipher_desc *desc, bsaes_cbc_encrypt(walk.src.virt.addr, walk.dst.virt.addr, walk.nbytes, &ctx->dec, walk.iv); kernel_neon_end(); - err = blkcipher_walk_done(desc, &walk, 0); + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); } while (walk.nbytes) { u32 blocks = walk.nbytes / AES_BLOCK_SIZE; @@ -182,7 +182,7 @@ static int aesbs_cbc_decrypt(struct blkcipher_desc *desc, dst += AES_BLOCK_SIZE; src += AES_BLOCK_SIZE; } while (--blocks); - err = blkcipher_walk_done(desc, &walk, 0); + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); } return err; } @@ -268,7 +268,7 @@ static int aesbs_xts_encrypt(struct blkcipher_desc *desc, bsaes_xts_encrypt(walk.src.virt.addr, walk.dst.virt.addr, walk.nbytes, &ctx->enc, walk.iv); kernel_neon_end(); - err = blkcipher_walk_done(desc, &walk, 0); + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); } return err; } @@ -292,7 +292,7 @@ static int aesbs_xts_decrypt(struct blkcipher_desc *desc, bsaes_xts_decrypt(walk.src.virt.addr, walk.dst.virt.addr, walk.nbytes, &ctx->dec, walk.iv); kernel_neon_end(); - err = blkcipher_walk_done(desc, &walk, 0); + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); } return err; } diff --git a/arch/arm/include/asm/mach/arch.h b/arch/arm/include/asm/mach/arch.h index 060a75e..0406cb3 100644 --- a/arch/arm/include/asm/mach/arch.h +++ b/arch/arm/include/asm/mach/arch.h @@ -50,6 +50,7 @@ struct machine_desc { struct smp_operations *smp; /* SMP operations */ bool (*smp_init)(void); void (*fixup)(struct tag *, char **); + void (*dt_fixup)(void); void (*init_meminfo)(void); void (*reserve)(void);/* reserve mem blocks */ void (*map_io)(void);/* IO mapping function */ diff --git a/arch/arm/kernel/devtree.c b/arch/arm/kernel/devtree.c index e94a157..11c54de 100644 --- a/arch/arm/kernel/devtree.c +++ b/arch/arm/kernel/devtree.c @@ -212,7 +212,7 @@ const struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys) mdesc_best = &__mach_desc_GENERIC_DT; #endif - if (!dt_phys || !early_init_dt_scan(phys_to_virt(dt_phys))) + if (!dt_phys || !early_init_dt_verify(phys_to_virt(dt_phys))) return NULL; mdesc = of_flat_dt_match_machine(mdesc_best, arch_get_next_mach); @@ -237,6 +237,12 @@ const struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys) dump_machine_table(); /* does not return */ } + /* We really don't want to do this, but sometimes firmware provides buggy data */ + if (mdesc->dt_fixup) + mdesc->dt_fixup(); + + early_init_dt_scan_nodes(); + /* Change machine number to match the mdesc we're using */ __machine_arch_type = mdesc->nr; diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c index 46d893f..66c9b96 100644 --- a/arch/arm/mach-exynos/exynos.c +++ b/arch/arm/mach-exynos/exynos.c @@ -335,6 +335,15 @@ static void __init exynos_reserve(void) #endif } +static void __init exynos_dt_fixup(void) +{ + /* + * Some versions of uboot pass garbage entries in the memory node, + * use the old CONFIG_ARM_NR_BANKS + */ + of_fdt_limit_memory(8); +} + DT_MACHINE_START(EXYNOS_DT, "SAMSUNG EXYNOS (Flattened Device Tree)") /* Maintainer: Thomas Abraham <thomas.abra...@linaro.org> */ /* Maintainer: Kukjin Kim <kgene....@samsung.com> */ @@ -348,4 +357,5 @@ DT_MACHINE_START(EXYNOS_DT, "SAMSUNG EXYNOS (Flattened Device Tree)") .dt_compat = exynos_dt_compat, .restart = exynos_restart, .reserve = exynos_reserve, + .dt_fixup = exynos_dt_fixup, MACHINE_END diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c index 17cd393..93914d2 100644 --- a/arch/arm/mach-omap2/gpmc-nand.c +++ b/arch/arm/mach-omap2/gpmc-nand.c @@ -50,6 +50,16 @@ static bool gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt) soc_is_omap54xx() || soc_is_dra7xx()) return 1; + if (ecc_opt == OMAP_ECC_BCH4_CODE_HW_DETECTION_SW || + ecc_opt == OMAP_ECC_BCH8_CODE_HW_DETECTION_SW) { + if (cpu_is_omap24xx()) + return 0; + else if (cpu_is_omap3630() && (GET_OMAP_REVISION() == 0)) + return 0; + else + return 1; + } + /* OMAP3xxx do not have ELM engine, so cannot support ECC schemes * which require H/W based ECC error detection */ if ((cpu_is_omap34xx() || cpu_is_omap3630()) && @@ -57,14 +67,6 @@ static bool gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt) (ecc_opt == OMAP_ECC_BCH8_CODE_HW))) return 0; - /* - * For now, assume 4-bit mode is only supported on OMAP3630 ES1.x, x>=1 - * and AM33xx derivates. Other chips may be added if confirmed to work. - */ - if ((ecc_opt == OMAP_ECC_BCH4_CODE_HW_DETECTION_SW) && - (!cpu_is_omap3630() || (GET_OMAP_REVISION() == 0))) - return 0; - /* legacy platforms support only HAM1 (1-bit Hamming) ECC scheme */ if (ecc_opt == OMAP_ECC_HAM1_CODE_HW) return 1; diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 539e810..a0fe747 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c @@ -168,6 +168,10 @@ static void omap4_l2c310_write_sec(unsigned long val, unsigned reg) smc_op = OMAP4_MON_L2X0_PREFETCH_INDEX; break; + case L310_POWER_CTRL: + pr_info_once("OMAP L2C310: ROM does not support power control setting\n"); + return; + default: WARN_ONCE(1, "OMAP L2C310: ignoring write to reg 0x%x\n", reg); return; diff --git a/arch/arm/xen/grant-table.c b/arch/arm/xen/grant-table.c index 859a9bb..91cf08b 100644 --- a/arch/arm/xen/grant-table.c +++ b/arch/arm/xen/grant-table.c @@ -51,3 +51,8 @@ int arch_gnttab_map_status(uint64_t *frames, unsigned long nr_gframes, { return -ENOSYS; } + +int arch_gnttab_init(unsigned long nr_shared, unsigned long nr_status) +{ + return 0; +} diff --git a/arch/arm64/crypto/aes-glue.c b/arch/arm64/crypto/aes-glue.c index 60f2f4c..79cd911 100644 --- a/arch/arm64/crypto/aes-glue.c +++ b/arch/arm64/crypto/aes-glue.c @@ -106,7 +106,7 @@ static int ecb_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst, for (first = 1; (blocks = (walk.nbytes / AES_BLOCK_SIZE)); first = 0) { aes_ecb_encrypt(walk.dst.virt.addr, walk.src.virt.addr, (u8 *)ctx->key_enc, rounds, blocks, first); - err = blkcipher_walk_done(desc, &walk, 0); + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); } kernel_neon_end(); return err; @@ -128,7 +128,7 @@ static int ecb_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst, for (first = 1; (blocks = (walk.nbytes / AES_BLOCK_SIZE)); first = 0) { aes_ecb_decrypt(walk.dst.virt.addr, walk.src.virt.addr, (u8 *)ctx->key_dec, rounds, blocks, first); - err = blkcipher_walk_done(desc, &walk, 0); + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); } kernel_neon_end(); return err; @@ -151,7 +151,7 @@ static int cbc_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst, aes_cbc_encrypt(walk.dst.virt.addr, walk.src.virt.addr, (u8 *)ctx->key_enc, rounds, blocks, walk.iv, first); - err = blkcipher_walk_done(desc, &walk, 0); + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); } kernel_neon_end(); return err; @@ -174,7 +174,7 @@ static int cbc_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst, aes_cbc_decrypt(walk.dst.virt.addr, walk.src.virt.addr, (u8 *)ctx->key_dec, rounds, blocks, walk.iv, first); - err = blkcipher_walk_done(desc, &walk, 0); + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); } kernel_neon_end(); return err; @@ -243,7 +243,7 @@ static int xts_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst, aes_xts_encrypt(walk.dst.virt.addr, walk.src.virt.addr, (u8 *)ctx->key1.key_enc, rounds, blocks, (u8 *)ctx->key2.key_enc, walk.iv, first); - err = blkcipher_walk_done(desc, &walk, 0); + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); } kernel_neon_end(); @@ -267,7 +267,7 @@ static int xts_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst, aes_xts_decrypt(walk.dst.virt.addr, walk.src.virt.addr, (u8 *)ctx->key1.key_dec, rounds, blocks, (u8 *)ctx->key2.key_enc, walk.iv, first); - err = blkcipher_walk_done(desc, &walk, 0); + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); } kernel_neon_end(); diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c index 658e89d..db2b482 100644 --- a/arch/powerpc/kernel/rtas_flash.c +++ b/arch/powerpc/kernel/rtas_flash.c @@ -611,17 +611,19 @@ static void rtas_flash_firmware(int reboot_type) for (f = flist; f; f = next) { /* Translate data addrs to absolute */ for (i = 0; i < f->num_blocks; i++) { - f->blocks[i].data = (char *)__pa(f->blocks[i].data); + f->blocks[i].data = (char *)cpu_to_be64(__pa(f->blocks[i].data)); image_size += f->blocks[i].length; + f->blocks[i].length = cpu_to_be64(f->blocks[i].length); } next = f->next; /* Don't translate NULL pointer for last entry */ if (f->next) - f->next = (struct flash_block_list *)__pa(f->next); + f->next = (struct flash_block_list *)cpu_to_be64(__pa(f->next)); else f->next = NULL; /* make num_blocks into the version/length field */ f->num_blocks = (FLASH_BLOCK_LIST_VERSION << 56) | ((f->num_blocks+1)*16); + f->num_blocks = cpu_to_be64(f->num_blocks); } printk(KERN_ALERT "FLASH: flash image is %ld bytes\n", image_size); diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index 6b0641c..fe52db2 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c @@ -1307,6 +1307,9 @@ static void power_pmu_enable(struct pmu *pmu) out_enable: pmao_restore_workaround(ebb); + if (ppmu->flags & PPMU_ARCH_207S) + mtspr(SPRN_MMCR2, 0); + mmcr0 = ebb_switch_in(ebb, cpuhw->mmcr[0]); mb(); @@ -1315,9 +1318,6 @@ static void power_pmu_enable(struct pmu *pmu) write_mmcr0(cpuhw, mmcr0); - if (ppmu->flags & PPMU_ARCH_207S) - mtspr(SPRN_MMCR2, 0); - /* * Enable instruction sampling if necessary */ diff --git a/arch/powerpc/platforms/powernv/opal-elog.c b/arch/powerpc/platforms/powernv/opal-elog.c index 10268c4..0ad533b 100644 --- a/arch/powerpc/platforms/powernv/opal-elog.c +++ b/arch/powerpc/platforms/powernv/opal-elog.c @@ -249,7 +249,7 @@ static void elog_work_fn(struct work_struct *work) rc = opal_get_elog_size(&id, &size, &type); if (rc != OPAL_SUCCESS) { - pr_err("ELOG: Opal log read failed\n"); + pr_err("ELOG: OPAL log info read failed\n"); return; } @@ -257,7 +257,7 @@ static void elog_work_fn(struct work_struct *work) log_id = be64_to_cpu(id); elog_type = be64_to_cpu(type); - BUG_ON(elog_size > OPAL_MAX_ERRLOG_SIZE); + WARN_ON(elog_size > OPAL_MAX_ERRLOG_SIZE); if (elog_size >= OPAL_MAX_ERRLOG_SIZE) elog_size = OPAL_MAX_ERRLOG_SIZE; diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index a800290..f9e4fdd 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -370,6 +370,17 @@ static void init_intel(struct cpuinfo_x86 *c) */ detect_extended_topology(c); + if (!cpu_has(c, X86_FEATURE_XTOPOLOGY)) { + /* + * let's use the legacy cpuid vector 0x1 and 0x4 for topology + * detection. + */ + c->x86_max_cores = intel_num_cpu_cores(c); +#ifdef CONFIG_X86_32 + detect_ht(c); +#endif + } + l2 = init_intel_cacheinfo(c); if (c->cpuid_level > 9) { unsigned eax = cpuid_eax(10); @@ -438,17 +449,6 @@ static void init_intel(struct cpuinfo_x86 *c) set_cpu_cap(c, X86_FEATURE_P3); #endif - if (!cpu_has(c, X86_FEATURE_XTOPOLOGY)) { - /* - * let's use the legacy cpuid vector 0x1 and 0x4 for topology - * detection. - */ - c->x86_max_cores = intel_num_cpu_cores(c); -#ifdef CONFIG_X86_32 - detect_ht(c); -#endif - } - /* Work around errata */ srat_detect_node(c); diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c index a952e9c..9c8f739 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c @@ -730,6 +730,18 @@ unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c) #endif } +#ifdef CONFIG_X86_HT + /* + * If cpu_llc_id is not yet set, this means cpuid_level < 4 which in + * turns means that the only possibility is SMT (as indicated in + * cpuid1). Since cpuid2 doesn't specify shared caches, and we know + * that SMT shares all caches, we can unconditionally set cpu_llc_id to + * c->phys_proc_id. + */ + if (per_cpu(cpu_llc_id, cpu) == BAD_APICID) + per_cpu(cpu_llc_id, cpu) = c->phys_proc_id; +#endif + c->x86_cache_size = l3 ? l3 : (l2 ? l2 : (l1i+l1d)); return l2; diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index bb92f38..9a79c8d 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -2451,6 +2451,12 @@ static __init int mcheck_init_device(void) for_each_online_cpu(i) { err = mce_device_create(i); if (err) { + /* + * Register notifier anyway (and do not unreg it) so + * that we don't leave undeleted timers, see notifier + * callback above. + */ + __register_hotcpu_notifier(&mce_cpu_notifier); cpu_notifier_register_done(); goto err_device_create; } @@ -2471,10 +2477,6 @@ static __init int mcheck_init_device(void) err_register: unregister_syscore_ops(&mce_syscore_ops); - cpu_notifier_register_begin(); - __unregister_hotcpu_notifier(&mce_cpu_notifier); - cpu_notifier_register_done(); - err_device_create: /* * We didn't keep track of which devices were created above, but diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c index 2bdfbff..2879ecd 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c @@ -118,6 +118,9 @@ static int x86_pmu_extra_regs(u64 config, struct perf_event *event) continue; if (event->attr.config1 & ~er->valid_mask) return -EINVAL; + /* Check if the extra msrs can be safely accessed*/ + if (!er->extra_msr_access) + return -ENXIO; reg->idx = er->idx; reg->config = event->attr.config1; diff --git a/arch/x86/kernel/cpu/perf_event.h b/arch/x86/kernel/cpu/perf_event.h index 3b2f9bd..8ade931 100644 --- a/arch/x86/kernel/cpu/perf_event.h +++ b/arch/x86/kernel/cpu/perf_event.h @@ -295,14 +295,16 @@ struct extra_reg { u64 config_mask; u64 valid_mask; int idx; /* per_xxx->regs[] reg index */ + bool extra_msr_access; }; #define EVENT_EXTRA_REG(e, ms, m, vm, i) { \ - .event = (e), \ - .msr = (ms), \ - .config_mask = (m), \ - .valid_mask = (vm), \ - .idx = EXTRA_REG_##i, \ + .event = (e), \ + .msr = (ms), \ + .config_mask = (m), \ + .valid_mask = (vm), \ + .idx = EXTRA_REG_##i, \ + .extra_msr_access = true, \ } #define INTEL_EVENT_EXTRA_REG(event, msr, vm, idx) \ diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index 07846d7..2502d0d 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c @@ -2182,6 +2182,41 @@ static void intel_snb_check_microcode(void) } } +/* + * Under certain circumstances, access certain MSR may cause #GP. + * The function tests if the input MSR can be safely accessed. + */ +static bool check_msr(unsigned long msr, u64 mask) +{ + u64 val_old, val_new, val_tmp; + + /* + * Read the current value, change it and read it back to see if it + * matches, this is needed to detect certain hardware emulators + * (qemu/kvm) that don't trap on the MSR access and always return 0s. + */ + if (rdmsrl_safe(msr, &val_old)) + return false; + + /* + * Only change the bits which can be updated by wrmsrl. + */ + val_tmp = val_old ^ mask; + if (wrmsrl_safe(msr, val_tmp) || + rdmsrl_safe(msr, &val_new)) + return false; + + if (val_new != val_tmp) + return false; + + /* Here it's sure that the MSR can be safely accessed. + * Restore the old value and return. + */ + wrmsrl(msr, val_old); + + return true; +} + static __init void intel_sandybridge_quirk(void) { x86_pmu.check_microcode = intel_snb_check_microcode; @@ -2271,7 +2306,8 @@ __init int intel_pmu_init(void) union cpuid10_ebx ebx; struct event_constraint *c; unsigned int unused; - int version; + struct extra_reg *er; + int version, i; if (!cpu_has(&boot_cpu_data, X86_FEATURE_ARCH_PERFMON)) { switch (boot_cpu_data.x86) { @@ -2474,6 +2510,9 @@ __init int intel_pmu_init(void) case 62: /* IvyBridge EP */ memcpy(hw_cache_event_ids, snb_hw_cache_event_ids, sizeof(hw_cache_event_ids)); + /* dTLB-load-misses on IVB is different than SNB */ + hw_cache_event_ids[C(DTLB)][C(OP_READ)][C(RESULT_MISS)] = 0x8108; /* DTLB_LOAD_MISSES.DEMAND_LD_MISS_CAUSES_A_WALK */ + memcpy(hw_cache_extra_regs, snb_hw_cache_extra_regs, sizeof(hw_cache_extra_regs)); @@ -2574,6 +2613,34 @@ __init int intel_pmu_init(void) } } + /* + * Access LBR MSR may cause #GP under certain circumstances. + * E.g. KVM doesn't support LBR MSR + * Check all LBT MSR here. + * Disable LBR access if any LBR MSRs can not be accessed. + */ + if (x86_pmu.lbr_nr && !check_msr(x86_pmu.lbr_tos, 0x3UL)) + x86_pmu.lbr_nr = 0; + for (i = 0; i < x86_pmu.lbr_nr; i++) { + if (!(check_msr(x86_pmu.lbr_from + i, 0xffffUL) && + check_msr(x86_pmu.lbr_to + i, 0xffffUL))) + x86_pmu.lbr_nr = 0; + } + + /* + * Access extra MSR may cause #GP under certain circumstances. + * E.g. KVM doesn't support offcore event + * Check all extra_regs here. + */ + if (x86_pmu.extra_regs) { + for (er = x86_pmu.extra_regs; er->msr; er++) { + er->extra_msr_access = check_msr(er->msr, 0x1ffUL); + /* Disable LBR select mapping */ + if ((er->idx == EXTRA_REG_LBR) && !er->extra_msr_access) + x86_pmu.lbr_sel_map = NULL; + } + } + /* Support full width counters using alternative MSR range */ if (x86_pmu.intel_cap.full_width_write) { x86_pmu.max_period = x86_pmu.cntval_mask; diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c index 980970c..696ade3 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c @@ -311,9 +311,11 @@ static int alloc_bts_buffer(int cpu) if (!x86_pmu.bts) return 0; - buffer = kzalloc_node(BTS_BUFFER_SIZE, GFP_KERNEL, node); - if (unlikely(!buffer)) + buffer = kzalloc_node(BTS_BUFFER_SIZE, GFP_KERNEL | __GFP_NOWARN, node); + if (unlikely(!buffer)) { + WARN_ONCE(1, "%s: BTS buffer allocation failure\n", __func__); return -ENOMEM; + } max = BTS_BUFFER_SIZE / BTS_RECORD_SIZE; thresh = max / 16; diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c index 65bbbea..ae6552a 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c @@ -550,16 +550,16 @@ static struct extra_reg snbep_uncore_cbox_extra_regs[] = { SNBEP_CBO_EVENT_EXTRA_REG(0x4134, 0xffff, 0x6), SNBEP_CBO_EVENT_EXTRA_REG(0x0135, 0xffff, 0x8), SNBEP_CBO_EVENT_EXTRA_REG(0x0335, 0xffff, 0x8), - SNBEP_CBO_EVENT_EXTRA_REG(0x4135, 0xffff, 0xc), - SNBEP_CBO_EVENT_EXTRA_REG(0x4335, 0xffff, 0xc), + SNBEP_CBO_EVENT_EXTRA_REG(0x4135, 0xffff, 0xa), + SNBEP_CBO_EVENT_EXTRA_REG(0x4335, 0xffff, 0xa), SNBEP_CBO_EVENT_EXTRA_REG(0x4435, 0xffff, 0x2), SNBEP_CBO_EVENT_EXTRA_REG(0x4835, 0xffff, 0x2), SNBEP_CBO_EVENT_EXTRA_REG(0x4a35, 0xffff, 0x2), SNBEP_CBO_EVENT_EXTRA_REG(0x5035, 0xffff, 0x2), SNBEP_CBO_EVENT_EXTRA_REG(0x0136, 0xffff, 0x8), SNBEP_CBO_EVENT_EXTRA_REG(0x0336, 0xffff, 0x8), - SNBEP_CBO_EVENT_EXTRA_REG(0x4136, 0xffff, 0xc), - SNBEP_CBO_EVENT_EXTRA_REG(0x4336, 0xffff, 0xc), + SNBEP_CBO_EVENT_EXTRA_REG(0x4136, 0xffff, 0xa), + SNBEP_CBO_EVENT_EXTRA_REG(0x4336, 0xffff, 0xa), SNBEP_CBO_EVENT_EXTRA_REG(0x4436, 0xffff, 0x2), SNBEP_CBO_EVENT_EXTRA_REG(0x4836, 0xffff, 0x2), SNBEP_CBO_EVENT_EXTRA_REG(0x4a36, 0xffff, 0x2), @@ -1222,6 +1222,7 @@ static struct extra_reg ivt_uncore_cbox_extra_regs[] = { SNBEP_CBO_EVENT_EXTRA_REG(SNBEP_CBO_PMON_CTL_TID_EN, SNBEP_CBO_PMON_CTL_TID_EN, 0x1), SNBEP_CBO_EVENT_EXTRA_REG(0x1031, 0x10ff, 0x2), + SNBEP_CBO_EVENT_EXTRA_REG(0x1134, 0xffff, 0x4), SNBEP_CBO_EVENT_EXTRA_REG(0x4134, 0xffff, 0xc), SNBEP_CBO_EVENT_EXTRA_REG(0x5134, 0xffff, 0xc), @@ -1245,7 +1246,7 @@ static struct extra_reg ivt_uncore_cbox_extra_regs[] = { SNBEP_CBO_EVENT_EXTRA_REG(0x8335, 0xffff, 0x10), SNBEP_CBO_EVENT_EXTRA_REG(0x0136, 0xffff, 0x10), SNBEP_CBO_EVENT_EXTRA_REG(0x0336, 0xffff, 0x10), - SNBEP_CBO_EVENT_EXTRA_REG(0x2336, 0xffff, 0x10), + SNBEP_CBO_EVENT_EXTRA_REG(0x2136, 0xffff, 0x10), SNBEP_CBO_EVENT_EXTRA_REG(0x2336, 0xffff, 0x10), SNBEP_CBO_EVENT_EXTRA_REG(0x4136, 0xffff, 0x18), SNBEP_CBO_EVENT_EXTRA_REG(0x4336, 0xffff, 0x18), diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index dbaa23e..0d0c9d4 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S @@ -425,8 +425,8 @@ sysenter_do_call: cmpl $(NR_syscalls), %eax jae sysenter_badsys call *sys_call_table(,%eax,4) - movl %eax,PT_EAX(%esp) sysenter_after_call: + movl %eax,PT_EAX(%esp) LOCKDEP_SYS_EXIT DISABLE_INTERRUPTS(CLBR_ANY) TRACE_IRQS_OFF @@ -502,6 +502,7 @@ ENTRY(system_call) jae syscall_badsys syscall_call: call *sys_call_table(,%eax,4) +syscall_after_call: movl %eax,PT_EAX(%esp) # store the return value syscall_exit: LOCKDEP_SYS_EXIT @@ -675,12 +676,12 @@ syscall_fault: END(syscall_fault) syscall_badsys: - movl $-ENOSYS,PT_EAX(%esp) - jmp syscall_exit + movl $-ENOSYS,%eax + jmp syscall_after_call END(syscall_badsys) sysenter_badsys: - movl $-ENOSYS,PT_EAX(%esp) + movl $-ENOSYS,%eax jmp sysenter_after_call END(syscall_badsys) CFI_ENDPROC diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c index 7596df6..67e6d19 100644 --- a/arch/x86/kernel/kprobes/core.c +++ b/arch/x86/kernel/kprobes/core.c @@ -574,6 +574,9 @@ int kprobe_int3_handler(struct pt_regs *regs) struct kprobe *p; struct kprobe_ctlblk *kcb; + if (user_mode_vm(regs)) + return 0; + addr = (kprobe_opcode_t *)(regs->ip - sizeof(kprobe_opcode_t)); /* * We don't want to be preempted for the entire diff --git a/arch/x86/xen/grant-table.c b/arch/x86/xen/grant-table.c index c985835..ebfa9b2 100644 --- a/arch/x86/xen/grant-table.c +++ b/arch/x86/xen/grant-table.c @@ -36,99 +36,133 @@ #include <linux/sched.h> #include <linux/mm.h> +#include <linux/slab.h> #include <linux/vmalloc.h> #include <xen/interface/xen.h> #include <xen/page.h> #include <xen/grant_table.h> +#include <xen/xen.h> #include <asm/pgtable.h> -static int map_pte_fn(pte_t *pte, struct page *pmd_page, - unsigned long addr, void *data) +static struct gnttab_vm_area { + struct vm_struct *area; + pte_t **ptes; +} gnttab_shared_vm_area, gnttab_status_vm_area; + +int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes, + unsigned long max_nr_gframes, + void **__shared) { - unsigned long **frames = (unsigned long **)data; + void *shared = *__shared; + unsigned long addr; + unsigned long i; - set_pte_at(&init_mm, addr, pte, mfn_pte((*frames)[0], PAGE_KERNEL)); - (*frames)++; - return 0; -} + if (shared == NULL) + *__shared = shared = gnttab_shared_vm_area.area->addr; -/* - * This function is used to map shared frames to store grant status. It is - * different from map_pte_fn above, the frames type here is uint64_t. - */ -static int map_pte_fn_status(pte_t *pte, struct page *pmd_page, - unsigned long addr, void *data) -{ - uint64_t **frames = (uint64_t **)data; + addr = (unsigned long)shared; + + for (i = 0; i < nr_gframes; i++) { + set_pte_at(&init_mm, addr, gnttab_shared_vm_area.ptes[i], + mfn_pte(frames[i], PAGE_KERNEL)); + addr += PAGE_SIZE; + } - set_pte_at(&init_mm, addr, pte, mfn_pte((*frames)[0], PAGE_KERNEL)); - (*frames)++; return 0; } -static int unmap_pte_fn(pte_t *pte, struct page *pmd_page, - unsigned long addr, void *data) +int arch_gnttab_map_status(uint64_t *frames, unsigned long nr_gframes, + unsigned long max_nr_gframes, + grant_status_t **__shared) { + grant_status_t *shared = *__shared; + unsigned long addr; + unsigned long i; + + if (shared == NULL) + *__shared = shared = gnttab_status_vm_area.area->addr; + + addr = (unsigned long)shared; + + for (i = 0; i < nr_gframes; i++) { + set_pte_at(&init_mm, addr, gnttab_status_vm_area.ptes[i], + mfn_pte(frames[i], PAGE_KERNEL)); + addr += PAGE_SIZE; + } - set_pte_at(&init_mm, addr, pte, __pte(0)); return 0; } -int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes, - unsigned long max_nr_gframes, - void **__shared) +void arch_gnttab_unmap(void *shared, unsigned long nr_gframes) { - int rc; - void *shared = *__shared; + pte_t **ptes; + unsigned long addr; + unsigned long i; - if (shared == NULL) { - struct vm_struct *area = - alloc_vm_area(PAGE_SIZE * max_nr_gframes, NULL); - BUG_ON(area == NULL); - shared = area->addr; - *__shared = shared; - } + if (shared == gnttab_status_vm_area.area->addr) + ptes = gnttab_status_vm_area.ptes; + else + ptes = gnttab_shared_vm_area.ptes; - rc = apply_to_page_range(&init_mm, (unsigned long)shared, - PAGE_SIZE * nr_gframes, - map_pte_fn, &frames); - return rc; + addr = (unsigned long)shared; + + for (i = 0; i < nr_gframes; i++) { + set_pte_at(&init_mm, addr, ptes[i], __pte(0)); + addr += PAGE_SIZE; + } } -int arch_gnttab_map_status(uint64_t *frames, unsigned long nr_gframes, - unsigned long max_nr_gframes, - grant_status_t **__shared) +static int arch_gnttab_valloc(struct gnttab_vm_area *area, unsigned nr_frames) { - int rc; - grant_status_t *shared = *__shared; + area->ptes = kmalloc(sizeof(pte_t *) * nr_frames, GFP_KERNEL); + if (area->ptes == NULL) + return -ENOMEM; - if (shared == NULL) { - /* No need to pass in PTE as we are going to do it - * in apply_to_page_range anyhow. */ - struct vm_struct *area = - alloc_vm_area(PAGE_SIZE * max_nr_gframes, NULL); - BUG_ON(area == NULL); - shared = area->addr; - *__shared = shared; + area->area = alloc_vm_area(PAGE_SIZE * nr_frames, area->ptes); + if (area->area == NULL) { + kfree(area->ptes); + return -ENOMEM; } - rc = apply_to_page_range(&init_mm, (unsigned long)shared, - PAGE_SIZE * nr_gframes, - map_pte_fn_status, &frames); - return rc; + return 0; } -void arch_gnttab_unmap(void *shared, unsigned long nr_gframes) +static void arch_gnttab_vfree(struct gnttab_vm_area *area) +{ + free_vm_area(area->area); + kfree(area->ptes); +} + +int arch_gnttab_init(unsigned long nr_shared, unsigned long nr_status) { - apply_to_page_range(&init_mm, (unsigned long)shared, - PAGE_SIZE * nr_gframes, unmap_pte_fn, NULL); + int ret; + + if (!xen_pv_domain()) + return 0; + + ret = arch_gnttab_valloc(&gnttab_shared_vm_area, nr_shared); + if (ret < 0) + return ret; + + /* + * Always allocate the space for the status frames in case + * we're migrated to a host with V2 support. + */ + ret = arch_gnttab_valloc(&gnttab_status_vm_area, nr_status); + if (ret < 0) + goto err; + + return 0; + err: + arch_gnttab_vfree(&gnttab_shared_vm_area); + return -ENOMEM; } + #ifdef CONFIG_XEN_PVH #include <xen/balloon.h> #include <xen/events.h> -#include <xen/xen.h> #include <linux/slab.h> static int __init xlated_setup_gnttab_pages(void) { diff --git a/crypto/af_alg.c b/crypto/af_alg.c index 966f893..6a3ad80 100644 --- a/crypto/af_alg.c +++ b/crypto/af_alg.c @@ -21,6 +21,7 @@ #include <linux/module.h> #include <linux/net.h> #include <linux/rwsem.h> +#include <linux/security.h> struct alg_type_list { const struct af_alg_type *type; @@ -243,6 +244,7 @@ int af_alg_accept(struct sock *sk, struct socket *newsock) sock_init_data(newsock, sk2); sock_graft(sk2, newsock); + security_sk_clone(sk, sk2); err = type->accept(ask->private, sk2); if (err) { diff --git a/drivers/clk/ti/clk-7xx.c b/drivers/clk/ti/clk-7xx.c index e158133..cb8e6f1 100644 --- a/drivers/clk/ti/clk-7xx.c +++ b/drivers/clk/ti/clk-7xx.c @@ -16,7 +16,7 @@ #include <linux/clkdev.h> #include <linux/clk/ti.h> -#define DRA7_DPLL_ABE_DEFFREQ 361267200 +#define DRA7_DPLL_ABE_DEFFREQ 180633600 #define DRA7_DPLL_GMAC_DEFFREQ 1000000000 @@ -322,6 +322,11 @@ int __init dra7xx_dt_clk_init(void) if (rc) pr_err("%s: failed to configure ABE DPLL!\n", __func__); + dpll_ck = clk_get_sys(NULL, "dpll_abe_m2x2_ck"); + rc = clk_set_rate(dpll_ck, DRA7_DPLL_ABE_DEFFREQ * 2); + if (rc) + pr_err("%s: failed to configure ABE DPLL m2x2!\n", __func__); + dpll_ck = clk_get_sys(NULL, "dpll_gmac_ck"); rc = clk_set_rate(dpll_ck, DRA7_DPLL_GMAC_DEFFREQ); if (rc) diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index 5798541..a66a321 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -336,10 +336,10 @@ static const struct { QUIRK_CYCLE_TIMER | QUIRK_IR_WAKE},
_______________________________________________ unionfs-cvs mailing list: http://unionfs.filesystems.org/ unionfs-cvs@fsl.cs.sunysb.edu http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs-cvs