Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
821781a9
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
162
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
821781a9
编写于
8年前
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge
git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
上级
3174fed9
04516981
无相关合并请求
变更
80
隐藏空白更改
内联
并排
Showing
80 changed file
with
864 addition
and
280 deletion
+864
-280
arch/arm/boot/dts/imx7s.dtsi
arch/arm/boot/dts/imx7s.dtsi
+2
-3
arch/arm/boot/dts/orion5x-linkstation-lsgl.dts
arch/arm/boot/dts/orion5x-linkstation-lsgl.dts
+4
-0
arch/arm/boot/dts/sun8i-h3.dtsi
arch/arm/boot/dts/sun8i-h3.dtsi
+1
-1
arch/m68k/configs/amiga_defconfig
arch/m68k/configs/amiga_defconfig
+6
-2
arch/m68k/configs/apollo_defconfig
arch/m68k/configs/apollo_defconfig
+6
-2
arch/m68k/configs/atari_defconfig
arch/m68k/configs/atari_defconfig
+6
-2
arch/m68k/configs/bvme6000_defconfig
arch/m68k/configs/bvme6000_defconfig
+6
-2
arch/m68k/configs/hp300_defconfig
arch/m68k/configs/hp300_defconfig
+6
-2
arch/m68k/configs/mac_defconfig
arch/m68k/configs/mac_defconfig
+6
-2
arch/m68k/configs/multi_defconfig
arch/m68k/configs/multi_defconfig
+6
-2
arch/m68k/configs/mvme147_defconfig
arch/m68k/configs/mvme147_defconfig
+6
-2
arch/m68k/configs/mvme16x_defconfig
arch/m68k/configs/mvme16x_defconfig
+6
-2
arch/m68k/configs/q40_defconfig
arch/m68k/configs/q40_defconfig
+6
-2
arch/m68k/configs/sun3_defconfig
arch/m68k/configs/sun3_defconfig
+6
-2
arch/m68k/configs/sun3x_defconfig
arch/m68k/configs/sun3x_defconfig
+6
-2
arch/m68k/include/asm/delay.h
arch/m68k/include/asm/delay.h
+1
-1
arch/parisc/include/asm/pgtable.h
arch/parisc/include/asm/pgtable.h
+4
-4
arch/parisc/kernel/cache.c
arch/parisc/kernel/cache.c
+11
-0
arch/parisc/kernel/pacache.S
arch/parisc/kernel/pacache.S
+1
-21
arch/x86/events/core.c
arch/x86/events/core.c
+1
-1
arch/x86/events/intel/core.c
arch/x86/events/intel/core.c
+1
-1
arch/x86/events/intel/cstate.c
arch/x86/events/intel/cstate.c
+1
-0
arch/x86/include/asm/compat.h
arch/x86/include/asm/compat.h
+1
-3
arch/x86/kernel/apic/x2apic_uv_x.c
arch/x86/kernel/apic/x2apic_uv_x.c
+2
-2
arch/x86/kernel/unwind_guess.c
arch/x86/kernel/unwind_guess.c
+6
-3
arch/x86/platform/olpc/olpc-xo15-sci.c
arch/x86/platform/olpc/olpc-xo15-sci.c
+2
-0
arch/x86/tools/relocs.h
arch/x86/tools/relocs.h
+1
-1
block/blk-map.c
block/blk-map.c
+4
-0
crypto/algif_aead.c
crypto/algif_aead.c
+37
-22
crypto/mcryptd.c
crypto/mcryptd.c
+12
-7
drivers/acpi/nfit/core.c
drivers/acpi/nfit/core.c
+40
-15
drivers/acpi/nfit/nfit.h
drivers/acpi/nfit/nfit.h
+2
-0
drivers/ata/libata-scsi.c
drivers/ata/libata-scsi.c
+1
-0
drivers/ata/sata_mv.c
drivers/ata/sata_mv.c
+14
-1
drivers/block/zram/zram_drv.c
drivers/block/zram/zram_drv.c
+7
-1
drivers/crypto/caam/ctrl.c
drivers/crypto/caam/ctrl.c
+3
-2
drivers/crypto/marvell/hash.c
drivers/crypto/marvell/hash.c
+5
-6
drivers/dax/dax.c
drivers/dax/dax.c
+1
-1
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu.h
+1
-0
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+1
-1
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+4
-1
drivers/isdn/gigaset/ser-gigaset.c
drivers/isdn/gigaset/ser-gigaset.c
+3
-1
drivers/net/can/usb/peak_usb/pcan_usb_core.c
drivers/net/can/usb/peak_usb/pcan_usb_core.c
+4
-2
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+1
-0
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+0
-1
drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
+1
-0
drivers/net/ethernet/ibm/ibmveth.c
drivers/net/ethernet/ibm/ibmveth.c
+63
-2
drivers/net/ethernet/ibm/ibmveth.h
drivers/net/ethernet/ibm/ibmveth.h
+1
-0
drivers/net/ethernet/lantiq_etop.c
drivers/net/ethernet/lantiq_etop.c
+1
-0
drivers/net/ethernet/mellanox/mlx5/core/Kconfig
drivers/net/ethernet/mellanox/mlx5/core/Kconfig
+0
-2
drivers/net/ethernet/smsc/smsc911x.c
drivers/net/ethernet/smsc/smsc911x.c
+8
-1
drivers/net/ethernet/ti/cpmac.c
drivers/net/ethernet/ti/cpmac.c
+1
-0
drivers/net/ethernet/ti/cpsw-phy-sel.c
drivers/net/ethernet/ti/cpsw-phy-sel.c
+1
-0
drivers/net/hyperv/netvsc_drv.c
drivers/net/hyperv/netvsc_drv.c
+5
-0
drivers/net/ipvlan/ipvlan_main.c
drivers/net/ipvlan/ipvlan_main.c
+3
-1
drivers/net/phy/phy_device.c
drivers/net/phy/phy_device.c
+13
-3
drivers/net/usb/cdc_mbim.c
drivers/net/usb/cdc_mbim.c
+21
-0
drivers/net/usb/cdc_ncm.c
drivers/net/usb/cdc_ncm.c
+9
-5
drivers/nvdimm/bus.c
drivers/nvdimm/bus.c
+20
-5
drivers/scsi/lpfc/lpfc_sli.c
drivers/scsi/lpfc/lpfc_sli.c
+8
-6
drivers/vhost/vsock.c
drivers/vhost/vsock.c
+1
-1
fs/ceph/dir.c
fs/ceph/dir.c
+14
-10
fs/fuse/dir.c
fs/fuse/dir.c
+2
-5
include/asm-generic/export.h
include/asm-generic/export.h
+0
-1
include/linux/libnvdimm.h
include/linux/libnvdimm.h
+1
-1
include/linux/usb/cdc_ncm.h
include/linux/usb/cdc_ncm.h
+2
-1
include/uapi/linux/can.h
include/uapi/linux/can.h
+1
-0
kernel/events/core.c
kernel/events/core.c
+8
-11
kernel/kcov.c
kernel/kcov.c
+1
-0
kernel/locking/lockdep.c
kernel/locking/lockdep.c
+57
-54
kernel/locking/rtmutex.c
kernel/locking/rtmutex.c
+66
-2
kernel/locking/rtmutex_common.h
kernel/locking/rtmutex_common.h
+3
-2
kernel/sched/auto_group.c
kernel/sched/auto_group.c
+3
-1
lib/locking-selftest.c
lib/locking-selftest.c
+33
-33
net/can/raw.c
net/can/raw.c
+3
-0
tools/objtool/arch/x86/decode.c
tools/objtool/arch/x86/decode.c
+1
-1
tools/testing/nvdimm/Kbuild
tools/testing/nvdimm/Kbuild
+1
-0
tools/testing/nvdimm/test/iomap.c
tools/testing/nvdimm/test/iomap.c
+22
-1
tools/testing/nvdimm/test/nfit.c
tools/testing/nvdimm/test/nfit.c
+232
-4
tools/testing/nvdimm/test/nfit_test.h
tools/testing/nvdimm/test/nfit_test.h
+7
-1
未找到文件。
arch/arm/boot/dts/imx7s.dtsi
浏览文件 @
821781a9
...
...
@@ -643,9 +643,8 @@
reg = <0x30730000 0x10000>;
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX7D_LCDIF_PIXEL_ROOT_CLK>,
<&clks IMX7D_CLK_DUMMY>,
<&clks IMX7D_CLK_DUMMY>;
clock-names = "pix", "axi", "disp_axi";
<&clks IMX7D_LCDIF_PIXEL_ROOT_CLK>;
clock-names = "pix", "axi";
status = "disabled";
};
};
...
...
This diff is collapsed.
Click to expand it.
arch/arm/boot/dts/orion5x-linkstation-lsgl.dts
浏览文件 @
821781a9
...
...
@@ -82,6 +82,10 @@
gpios
=
<&
gpio0
9
GPIO_ACTIVE_HIGH
>;
};
&
sata
{
nr
-
ports
=
<
2
>;
};
&
ehci1
{
status
=
"okay"
;
};
This diff is collapsed.
Click to expand it.
arch/arm/boot/dts/sun8i-h3.dtsi
浏览文件 @
821781a9
...
...
@@ -410,7 +410,7 @@
};
uart3_pins: uart3 {
allwinner,pins = "P
G13", "PG
14";
allwinner,pins = "P
A13", "PA
14";
allwinner,function = "uart3";
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/amiga_defconfig
浏览文件 @
821781a9
...
...
@@ -95,9 +95,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -105,8 +106,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -366,6 +369,7 @@ CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_VENDOR_AMAZON is not set
CONFIG_A2065=y
CONFIG_ARIADNE=y
# CONFIG_NET_VENDOR_ARC is not set
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/apollo_defconfig
浏览文件 @
821781a9
...
...
@@ -93,9 +93,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -103,8 +104,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -347,6 +350,7 @@ CONFIG_MACSEC=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_AMAZON is not set
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_CADENCE is not set
# CONFIG_NET_VENDOR_BROADCOM is not set
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/atari_defconfig
浏览文件 @
821781a9
...
...
@@ -93,9 +93,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -103,8 +104,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -356,6 +359,7 @@ CONFIG_MACSEC=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_AMAZON is not set
CONFIG_ATARILANCE=y
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_CADENCE is not set
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/bvme6000_defconfig
浏览文件 @
821781a9
...
...
@@ -91,9 +91,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -101,8 +102,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -346,6 +349,7 @@ CONFIG_MACSEC=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_AMAZON is not set
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_CADENCE is not set
# CONFIG_NET_VENDOR_BROADCOM is not set
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/hp300_defconfig
浏览文件 @
821781a9
...
...
@@ -93,9 +93,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -103,8 +104,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -347,6 +350,7 @@ CONFIG_MACSEC=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_AMAZON is not set
CONFIG_HPLANCE=y
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_CADENCE is not set
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/mac_defconfig
浏览文件 @
821781a9
...
...
@@ -92,9 +92,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -102,8 +103,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -363,6 +366,7 @@ CONFIG_MACSEC=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_AMAZON is not set
CONFIG_MACMACE=y
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_CADENCE is not set
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/multi_defconfig
浏览文件 @
821781a9
...
...
@@ -102,9 +102,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -112,8 +113,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -397,6 +400,7 @@ CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_VENDOR_AMAZON is not set
CONFIG_A2065=y
CONFIG_ARIADNE=y
CONFIG_ATARILANCE=y
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/mvme147_defconfig
浏览文件 @
821781a9
...
...
@@ -90,9 +90,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -100,8 +101,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -345,6 +348,7 @@ CONFIG_MACSEC=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_AMAZON is not set
CONFIG_MVME147_NET=y
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_CADENCE is not set
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/mvme16x_defconfig
浏览文件 @
821781a9
...
...
@@ -91,9 +91,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -101,8 +102,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -346,6 +349,7 @@ CONFIG_MACSEC=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_AMAZON is not set
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_CADENCE is not set
# CONFIG_NET_VENDOR_BROADCOM is not set
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/q40_defconfig
浏览文件 @
821781a9
...
...
@@ -91,9 +91,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -101,8 +102,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -353,6 +356,7 @@ CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_VENDOR_AMAZON is not set
# CONFIG_NET_VENDOR_AMD is not set
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_CADENCE is not set
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/sun3_defconfig
浏览文件 @
821781a9
...
...
@@ -88,9 +88,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -98,8 +99,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -343,6 +346,7 @@ CONFIG_MACSEC=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_AMAZON is not set
CONFIG_SUN3LANCE=y
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_CADENCE is not set
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/configs/sun3x_defconfig
浏览文件 @
821781a9
...
...
@@ -88,9 +88,10 @@ CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_RBTREE=m
CONFIG_NFT_HASH=m
CONFIG_NFT_
SET_
RBTREE=m
CONFIG_NFT_
SET_
HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
...
...
@@ -98,8 +99,10 @@ CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NETFILTER_XT_SET=m
...
...
@@ -343,6 +346,7 @@ CONFIG_MACSEC=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_VETH=m
# CONFIG_NET_VENDOR_AMAZON is not set
CONFIG_SUN3LANCE=y
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_CADENCE is not set
...
...
This diff is collapsed.
Click to expand it.
arch/m68k/include/asm/delay.h
浏览文件 @
821781a9
...
...
@@ -114,6 +114,6 @@ static inline void __udelay(unsigned long usecs)
*/
#define HZSCALE (268435456 / (1000000 / HZ))
#define ndelay(n) __delay(DIV_ROUND_UP((n) * ((((HZSCALE) >> 11) * (loops_per_jiffy >> 11)) >> 6), 1000))
;
#define ndelay(n) __delay(DIV_ROUND_UP((n) * ((((HZSCALE) >> 11) * (loops_per_jiffy >> 11)) >> 6), 1000))
#endif
/* defined(_M68K_DELAY_H) */
This diff is collapsed.
Click to expand it.
arch/parisc/include/asm/pgtable.h
浏览文件 @
821781a9
...
...
@@ -65,9 +65,9 @@ static inline void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
unsigned long flags; \
spin_lock_irqsave(&pa_tlb_lock, flags); \
old_pte = *ptep; \
set_pte(ptep, pteval); \
if (pte_inserted(old_pte)) \
purge_tlb_entries(mm, addr); \
set_pte(ptep, pteval); \
spin_unlock_irqrestore(&pa_tlb_lock, flags); \
} while (0)
...
...
@@ -478,8 +478,8 @@ static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned
spin_unlock_irqrestore
(
&
pa_tlb_lock
,
flags
);
return
0
;
}
set_pte
(
ptep
,
pte_mkold
(
pte
));
purge_tlb_entries
(
vma
->
vm_mm
,
addr
);
set_pte
(
ptep
,
pte_mkold
(
pte
));
spin_unlock_irqrestore
(
&
pa_tlb_lock
,
flags
);
return
1
;
}
...
...
@@ -492,9 +492,9 @@ static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
spin_lock_irqsave
(
&
pa_tlb_lock
,
flags
);
old_pte
=
*
ptep
;
set_pte
(
ptep
,
__pte
(
0
));
if
(
pte_inserted
(
old_pte
))
purge_tlb_entries
(
mm
,
addr
);
set_pte
(
ptep
,
__pte
(
0
));
spin_unlock_irqrestore
(
&
pa_tlb_lock
,
flags
);
return
old_pte
;
...
...
@@ -504,8 +504,8 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr,
{
unsigned
long
flags
;
spin_lock_irqsave
(
&
pa_tlb_lock
,
flags
);
set_pte
(
ptep
,
pte_wrprotect
(
*
ptep
));
purge_tlb_entries
(
mm
,
addr
);
set_pte
(
ptep
,
pte_wrprotect
(
*
ptep
));
spin_unlock_irqrestore
(
&
pa_tlb_lock
,
flags
);
}
...
...
This diff is collapsed.
Click to expand it.
arch/parisc/kernel/cache.c
浏览文件 @
821781a9
...
...
@@ -393,6 +393,15 @@ void __init parisc_setup_cache_timing(void)
/* calculate TLB flush threshold */
/* On SMP machines, skip the TLB measure of kernel text which
* has been mapped as huge pages. */
if
(
num_online_cpus
()
>
1
&&
!
parisc_requires_coherency
())
{
threshold
=
max
(
cache_info
.
it_size
,
cache_info
.
dt_size
);
threshold
*=
PAGE_SIZE
;
threshold
/=
num_online_cpus
();
goto
set_tlb_threshold
;
}
alltime
=
mfctl
(
16
);
flush_tlb_all
();
alltime
=
mfctl
(
16
)
-
alltime
;
...
...
@@ -411,6 +420,8 @@ void __init parisc_setup_cache_timing(void)
alltime
,
size
,
rangetime
);
threshold
=
PAGE_ALIGN
(
num_online_cpus
()
*
size
*
alltime
/
rangetime
);
set_tlb_threshold:
if
(
threshold
)
parisc_tlb_flush_threshold
=
threshold
;
printk
(
KERN_INFO
"TLB flush threshold set to %lu KiB
\n
"
,
...
...
This diff is collapsed.
Click to expand it.
arch/parisc/kernel/pacache.S
浏览文件 @
821781a9
...
...
@@ -892,19 +892,10 @@ ENTRY_CFI(flush_dcache_page_asm)
fdc
,
m
r31
(%
r28
)
fdc
,
m
r31
(%
r28
)
fdc
,
m
r31
(%
r28
)
cmpb
,
COND
(<<)
%
r28
,
%
r25
,
1
b
cmpb
,
COND
(<<)
%
r28
,
%
r25
,
1
b
fdc
,
m
r31
(%
r28
)
sync
#ifdef CONFIG_PA20
pdtlb
,
l
%
r0
(%
r25
)
#else
tlb_lock
%
r20
,%
r21
,%
r22
pdtlb
%
r0
(%
r25
)
tlb_unlock
%
r20
,%
r21
,%
r22
#endif
bv
%
r0
(%
r2
)
nop
.
exit
...
...
@@ -979,17 +970,6 @@ ENTRY_CFI(flush_icache_page_asm)
fic
,
m
%
r31
(%
sr4
,%
r28
)
sync
#ifdef CONFIG_PA20
pdtlb
,
l
%
r0
(%
r28
)
pitlb
,
l
%
r0
(%
sr4
,%
r25
)
#else
tlb_lock
%
r20
,%
r21
,%
r22
pdtlb
%
r0
(%
r28
)
pitlb
%
r0
(%
sr4
,%
r25
)
tlb_unlock
%
r20
,%
r21
,%
r22
#endif
bv
%
r0
(%
r2
)
nop
.
exit
...
...
This diff is collapsed.
Click to expand it.
arch/x86/events/core.c
浏览文件 @
821781a9
...
...
@@ -69,7 +69,7 @@ u64 x86_perf_event_update(struct perf_event *event)
int
shift
=
64
-
x86_pmu
.
cntval_bits
;
u64
prev_raw_count
,
new_raw_count
;
int
idx
=
hwc
->
idx
;
s
64
delta
;
u
64
delta
;
if
(
idx
==
INTEL_PMC_IDX_FIXED_BTS
)
return
0
;
...
...
This diff is collapsed.
Click to expand it.
arch/x86/events/intel/core.c
浏览文件 @
821781a9
...
...
@@ -4034,7 +4034,7 @@ __init int intel_pmu_init(void)
/* Support full width counters using alternative MSR range */
if
(
x86_pmu
.
intel_cap
.
full_width_write
)
{
x86_pmu
.
max_period
=
x86_pmu
.
cntval_mask
;
x86_pmu
.
max_period
=
x86_pmu
.
cntval_mask
>>
1
;
x86_pmu
.
perfctr
=
MSR_IA32_PMC0
;
pr_cont
(
"full-width counters, "
);
}
...
...
This diff is collapsed.
Click to expand it.
arch/x86/events/intel/cstate.c
浏览文件 @
821781a9
...
...
@@ -540,6 +540,7 @@ static const struct x86_cpu_id intel_cstates_match[] __initconst = {
X86_CSTATES_MODEL
(
INTEL_FAM6_SKYLAKE_DESKTOP
,
snb_cstates
),
X86_CSTATES_MODEL
(
INTEL_FAM6_XEON_PHI_KNL
,
knl_cstates
),
X86_CSTATES_MODEL
(
INTEL_FAM6_XEON_PHI_KNM
,
knl_cstates
),
{
},
};
MODULE_DEVICE_TABLE
(
x86cpu
,
intel_cstates_match
);
...
...
This diff is collapsed.
Click to expand it.
arch/x86/include/asm/compat.h
浏览文件 @
821781a9
...
...
@@ -272,7 +272,6 @@ struct compat_shmid64_ds {
/*
* The type of struct elf_prstatus.pr_reg in compatible core dumps.
*/
#ifdef CONFIG_X86_X32_ABI
typedef
struct
user_regs_struct
compat_elf_gregset_t
;
/* Full regset -- prstatus on x32, otherwise on ia32 */
...
...
@@ -281,10 +280,9 @@ typedef struct user_regs_struct compat_elf_gregset_t;
do { *(int *) (((void *) &((S)->pr_reg)) + R) = (V); } \
while (0)
#ifdef CONFIG_X86_X32_ABI
#define COMPAT_USE_64BIT_TIME \
(!!(task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT))
#else
typedef
struct
user_regs_struct32
compat_elf_gregset_t
;
#endif
/*
...
...
This diff is collapsed.
Click to expand it.
arch/x86/kernel/apic/x2apic_uv_x.c
浏览文件 @
821781a9
...
...
@@ -815,9 +815,9 @@ static __init void map_mmioh_high_uv3(int index, int min_pnode, int max_pnode)
l
=
li
;
}
addr1
=
(
base
<<
shift
)
+
f
*
(
unsigned
long
)(
1
<<
m_io
);
f
*
(
1ULL
<<
m_io
);
addr2
=
(
base
<<
shift
)
+
(
l
+
1
)
*
(
unsigned
long
)(
1
<<
m_io
);
(
l
+
1
)
*
(
1ULL
<<
m_io
);
pr_info
(
"UV: %s[%03d..%03d] NASID 0x%04x ADDR 0x%016lx - 0x%016lx
\n
"
,
id
,
fi
,
li
,
lnasid
,
addr1
,
addr2
);
if
(
max_io
<
l
)
...
...
This diff is collapsed.
Click to expand it.
arch/x86/kernel/unwind_guess.c
浏览文件 @
821781a9
...
...
@@ -7,11 +7,13 @@
unsigned
long
unwind_get_return_address
(
struct
unwind_state
*
state
)
{
unsigned
long
addr
=
READ_ONCE_NOCHECK
(
*
state
->
sp
)
;
unsigned
long
addr
;
if
(
unwind_done
(
state
))
return
0
;
addr
=
READ_ONCE_NOCHECK
(
*
state
->
sp
);
return
ftrace_graph_ret_addr
(
state
->
task
,
&
state
->
graph_idx
,
addr
,
state
->
sp
);
}
...
...
@@ -25,11 +27,12 @@ bool unwind_next_frame(struct unwind_state *state)
return
false
;
do
{
unsigned
long
addr
=
READ_ONCE_NOCHECK
(
*
state
->
sp
);
for
(
state
->
sp
++
;
state
->
sp
<
info
->
end
;
state
->
sp
++
)
{
unsigned
long
addr
=
READ_ONCE_NOCHECK
(
*
state
->
sp
);
for
(
state
->
sp
++
;
state
->
sp
<
info
->
end
;
state
->
sp
++
)
if
(
__kernel_text_address
(
addr
))
return
true
;
}
state
->
sp
=
info
->
next_sp
;
...
...
This diff is collapsed.
Click to expand it.
arch/x86/platform/olpc/olpc-xo15-sci.c
浏览文件 @
821781a9
...
...
@@ -196,6 +196,7 @@ static int xo15_sci_remove(struct acpi_device *device)
return
0
;
}
#ifdef CONFIG_PM_SLEEP
static
int
xo15_sci_resume
(
struct
device
*
dev
)
{
/* Enable all EC events */
...
...
@@ -207,6 +208,7 @@ static int xo15_sci_resume(struct device *dev)
return
0
;
}
#endif
static
SIMPLE_DEV_PM_OPS
(
xo15_sci_pm
,
NULL
,
xo15_sci_resume
);
...
...
This diff is collapsed.
Click to expand it.
arch/x86/tools/relocs.h
浏览文件 @
821781a9
...
...
@@ -16,7 +16,7 @@
#include <regex.h>
#include <tools/le_byteshift.h>
void
die
(
char
*
fmt
,
...);
void
die
(
char
*
fmt
,
...)
__attribute__
((
noreturn
))
;
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
...
...
This diff is collapsed.
Click to expand it.
block/blk-map.c
浏览文件 @
821781a9
...
...
@@ -118,6 +118,9 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq,
struct
iov_iter
i
;
int
ret
;
if
(
!
iter_is_iovec
(
iter
))
goto
fail
;
if
(
map_data
)
copy
=
true
;
else
if
(
iov_iter_alignment
(
iter
)
&
align
)
...
...
@@ -140,6 +143,7 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq,
unmap_rq:
__blk_rq_unmap_user
(
bio
);
fail:
rq
->
bio
=
NULL
;
return
-
EINVAL
;
}
...
...
This diff is collapsed.
Click to expand it.
crypto/algif_aead.c
浏览文件 @
821781a9
...
...
@@ -81,7 +81,11 @@ static inline bool aead_sufficient_data(struct aead_ctx *ctx)
{
unsigned
as
=
crypto_aead_authsize
(
crypto_aead_reqtfm
(
&
ctx
->
aead_req
));
return
ctx
->
used
>=
ctx
->
aead_assoclen
+
as
;
/*
* The minimum amount of memory needed for an AEAD cipher is
* the AAD and in case of decryption the tag.
*/
return
ctx
->
used
>=
ctx
->
aead_assoclen
+
(
ctx
->
enc
?
0
:
as
);
}
static
void
aead_reset_ctx
(
struct
aead_ctx
*
ctx
)
...
...
@@ -415,7 +419,7 @@ static int aead_recvmsg_async(struct socket *sock, struct msghdr *msg,
unsigned
int
i
,
reqlen
=
GET_REQ_SIZE
(
tfm
);
int
err
=
-
ENOMEM
;
unsigned
long
used
;
size_t
outlen
;
size_t
outlen
=
0
;
size_t
usedpages
=
0
;
lock_sock
(
sk
);
...
...
@@ -425,12 +429,15 @@ static int aead_recvmsg_async(struct socket *sock, struct msghdr *msg,
goto
unlock
;
}
used
=
ctx
->
used
;
outlen
=
used
;
if
(
!
aead_sufficient_data
(
ctx
))
goto
unlock
;
used
=
ctx
->
used
;
if
(
ctx
->
enc
)
outlen
=
used
+
as
;
else
outlen
=
used
-
as
;
req
=
sock_kmalloc
(
sk
,
reqlen
,
GFP_KERNEL
);
if
(
unlikely
(
!
req
))
goto
unlock
;
...
...
@@ -444,7 +451,7 @@ static int aead_recvmsg_async(struct socket *sock, struct msghdr *msg,
aead_request_set_ad
(
req
,
ctx
->
aead_assoclen
);
aead_request_set_callback
(
req
,
CRYPTO_TFM_REQ_MAY_BACKLOG
,
aead_async_cb
,
sk
);
used
-=
ctx
->
aead_assoclen
+
(
ctx
->
enc
?
as
:
0
)
;
used
-=
ctx
->
aead_assoclen
;
/* take over all tx sgls from ctx */
areq
->
tsgl
=
sock_kmalloc
(
sk
,
sizeof
(
*
areq
->
tsgl
)
*
sgl
->
cur
,
...
...
@@ -460,7 +467,7 @@ static int aead_recvmsg_async(struct socket *sock, struct msghdr *msg,
areq
->
tsgls
=
sgl
->
cur
;
/* create rx sgls */
while
(
iov_iter_count
(
&
msg
->
msg_iter
))
{
while
(
outlen
>
usedpages
&&
iov_iter_count
(
&
msg
->
msg_iter
))
{
size_t
seglen
=
min_t
(
size_t
,
iov_iter_count
(
&
msg
->
msg_iter
),
(
outlen
-
usedpages
));
...
...
@@ -490,16 +497,14 @@ static int aead_recvmsg_async(struct socket *sock, struct msghdr *msg,
last_rsgl
=
rsgl
;
/* we do not need more iovecs as we have sufficient memory */
if
(
outlen
<=
usedpages
)
break
;
iov_iter_advance
(
&
msg
->
msg_iter
,
err
);
}
err
=
-
EINVAL
;
/* ensure output buffer is sufficiently large */
if
(
usedpages
<
outlen
)
goto
free
;
if
(
usedpages
<
outlen
)
{
err
=
-
EINVAL
;
goto
unlock
;
}
aead_request_set_crypt
(
req
,
areq
->
tsgl
,
areq
->
first_rsgl
.
sgl
.
sg
,
used
,
areq
->
iv
);
...
...
@@ -570,6 +575,7 @@ static int aead_recvmsg_sync(struct socket *sock, struct msghdr *msg, int flags)
goto
unlock
;
}
/* data length provided by caller via sendmsg/sendpage */
used
=
ctx
->
used
;
/*
...
...
@@ -584,16 +590,27 @@ static int aead_recvmsg_sync(struct socket *sock, struct msghdr *msg, int flags)
if
(
!
aead_sufficient_data
(
ctx
))
goto
unlock
;
outlen
=
used
;
/*
* Calculate the minimum output buffer size holding the result of the
* cipher operation. When encrypting data, the receiving buffer is
* larger by the tag length compared to the input buffer as the
* encryption operation generates the tag. For decryption, the input
* buffer provides the tag which is consumed resulting in only the
* plaintext without a buffer for the tag returned to the caller.
*/
if
(
ctx
->
enc
)
outlen
=
used
+
as
;
else
outlen
=
used
-
as
;
/*
* The cipher operation input data is reduced by the associated data
* length as this data is processed separately later on.
*/
used
-=
ctx
->
aead_assoclen
+
(
ctx
->
enc
?
as
:
0
)
;
used
-=
ctx
->
aead_assoclen
;
/* convert iovecs of output buffers into scatterlists */
while
(
iov_iter_count
(
&
msg
->
msg_iter
))
{
while
(
outlen
>
usedpages
&&
iov_iter_count
(
&
msg
->
msg_iter
))
{
size_t
seglen
=
min_t
(
size_t
,
iov_iter_count
(
&
msg
->
msg_iter
),
(
outlen
-
usedpages
));
...
...
@@ -620,16 +637,14 @@ static int aead_recvmsg_sync(struct socket *sock, struct msghdr *msg, int flags)
last_rsgl
=
rsgl
;
/* we do not need more iovecs as we have sufficient memory */
if
(
outlen
<=
usedpages
)
break
;
iov_iter_advance
(
&
msg
->
msg_iter
,
err
);
}
err
=
-
EINVAL
;
/* ensure output buffer is sufficiently large */
if
(
usedpages
<
outlen
)
if
(
usedpages
<
outlen
)
{
err
=
-
EINVAL
;
goto
unlock
;
}
sg_mark_end
(
sgl
->
sg
+
sgl
->
cur
-
1
);
aead_request_set_crypt
(
&
ctx
->
aead_req
,
sgl
->
sg
,
ctx
->
first_rsgl
.
sgl
.
sg
,
...
...
This diff is collapsed.
Click to expand it.
crypto/mcryptd.c
浏览文件 @
821781a9
...
...
@@ -254,18 +254,22 @@ static void *mcryptd_alloc_instance(struct crypto_alg *alg, unsigned int head,
goto
out
;
}
static
inline
void
mcryptd_check_internal
(
struct
rtattr
**
tb
,
u32
*
type
,
static
inline
bool
mcryptd_check_internal
(
struct
rtattr
**
tb
,
u32
*
type
,
u32
*
mask
)
{
struct
crypto_attr_type
*
algt
;
algt
=
crypto_get_attr_type
(
tb
);
if
(
IS_ERR
(
algt
))
return
;
if
((
algt
->
type
&
CRYPTO_ALG_INTERNAL
))
*
type
|=
CRYPTO_ALG_INTERNAL
;
if
((
algt
->
mask
&
CRYPTO_ALG_INTERNAL
))
*
mask
|=
CRYPTO_ALG_INTERNAL
;
return
false
;
*
type
|=
algt
->
type
&
CRYPTO_ALG_INTERNAL
;
*
mask
|=
algt
->
mask
&
CRYPTO_ALG_INTERNAL
;
if
(
*
type
&
*
mask
&
CRYPTO_ALG_INTERNAL
)
return
true
;
else
return
false
;
}
static
int
mcryptd_hash_init_tfm
(
struct
crypto_tfm
*
tfm
)
...
...
@@ -492,7 +496,8 @@ static int mcryptd_create_hash(struct crypto_template *tmpl, struct rtattr **tb,
u32
mask
=
0
;
int
err
;
mcryptd_check_internal
(
tb
,
&
type
,
&
mask
);
if
(
!
mcryptd_check_internal
(
tb
,
&
type
,
&
mask
))
return
-
EINVAL
;
halg
=
ahash_attr_alg
(
tb
[
1
],
type
,
mask
);
if
(
IS_ERR
(
halg
))
...
...
This diff is collapsed.
Click to expand it.
drivers/acpi/nfit/core.c
浏览文件 @
821781a9
...
...
@@ -94,7 +94,7 @@ static struct acpi_device *to_acpi_dev(struct acpi_nfit_desc *acpi_desc)
return
to_acpi_device
(
acpi_desc
->
dev
);
}
static
int
xlat_status
(
void
*
buf
,
unsigned
int
cmd
,
u32
status
)
static
int
xlat_
bus_
status
(
void
*
buf
,
unsigned
int
cmd
,
u32
status
)
{
struct
nd_cmd_clear_error
*
clear_err
;
struct
nd_cmd_ars_status
*
ars_status
;
...
...
@@ -113,7 +113,7 @@ static int xlat_status(void *buf, unsigned int cmd, u32 status)
flags
=
ND_ARS_PERSISTENT
|
ND_ARS_VOLATILE
;
if
((
status
>>
16
&
flags
)
==
0
)
return
-
ENOTTY
;
break
;
return
0
;
case
ND_CMD_ARS_START
:
/* ARS is in progress */
if
((
status
&
0xffff
)
==
NFIT_ARS_START_BUSY
)
...
...
@@ -122,7 +122,7 @@ static int xlat_status(void *buf, unsigned int cmd, u32 status)
/* Command failed */
if
(
status
&
0xffff
)
return
-
EIO
;
break
;
return
0
;
case
ND_CMD_ARS_STATUS
:
ars_status
=
buf
;
/* Command failed */
...
...
@@ -146,7 +146,8 @@ static int xlat_status(void *buf, unsigned int cmd, u32 status)
* then just continue with the returned results.
*/
if
(
status
==
NFIT_ARS_STATUS_INTR
)
{
if
(
ars_status
->
flags
&
NFIT_ARS_F_OVERFLOW
)
if
(
ars_status
->
out_length
>=
40
&&
(
ars_status
->
flags
&
NFIT_ARS_F_OVERFLOW
))
return
-
ENOSPC
;
return
0
;
}
...
...
@@ -154,7 +155,7 @@ static int xlat_status(void *buf, unsigned int cmd, u32 status)
/* Unknown status */
if
(
status
>>
16
)
return
-
EIO
;
break
;
return
0
;
case
ND_CMD_CLEAR_ERROR
:
clear_err
=
buf
;
if
(
status
&
0xffff
)
...
...
@@ -163,7 +164,7 @@ static int xlat_status(void *buf, unsigned int cmd, u32 status)
return
-
EIO
;
if
(
clear_err
->
length
>
clear_err
->
cleared
)
return
clear_err
->
cleared
;
break
;
return
0
;
default:
break
;
}
...
...
@@ -174,9 +175,18 @@ static int xlat_status(void *buf, unsigned int cmd, u32 status)
return
0
;
}
static
int
acpi_nfit_ctl
(
struct
nvdimm_bus_descriptor
*
nd_desc
,
struct
nvdimm
*
nvdimm
,
unsigned
int
cmd
,
void
*
buf
,
unsigned
int
buf_len
,
int
*
cmd_rc
)
static
int
xlat_status
(
struct
nvdimm
*
nvdimm
,
void
*
buf
,
unsigned
int
cmd
,
u32
status
)
{
if
(
!
nvdimm
)
return
xlat_bus_status
(
buf
,
cmd
,
status
);
if
(
status
)
return
-
EIO
;
return
0
;
}
int
acpi_nfit_ctl
(
struct
nvdimm_bus_descriptor
*
nd_desc
,
struct
nvdimm
*
nvdimm
,
unsigned
int
cmd
,
void
*
buf
,
unsigned
int
buf_len
,
int
*
cmd_rc
)
{
struct
acpi_nfit_desc
*
acpi_desc
=
to_acpi_nfit_desc
(
nd_desc
);
union
acpi_object
in_obj
,
in_buf
,
*
out_obj
;
...
...
@@ -298,7 +308,8 @@ static int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc,
for
(
i
=
0
,
offset
=
0
;
i
<
desc
->
out_num
;
i
++
)
{
u32
out_size
=
nd_cmd_out_size
(
nvdimm
,
cmd
,
desc
,
i
,
buf
,
(
u32
*
)
out_obj
->
buffer
.
pointer
);
(
u32
*
)
out_obj
->
buffer
.
pointer
,
out_obj
->
buffer
.
length
-
offset
);
if
(
offset
+
out_size
>
out_obj
->
buffer
.
length
)
{
dev_dbg
(
dev
,
"%s:%s output object underflow cmd: %s field: %d
\n
"
,
...
...
@@ -333,7 +344,8 @@ static int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc,
*/
rc
=
buf_len
-
offset
-
in_buf
.
buffer
.
length
;
if
(
cmd_rc
)
*
cmd_rc
=
xlat_status
(
buf
,
cmd
,
fw_status
);
*
cmd_rc
=
xlat_status
(
nvdimm
,
buf
,
cmd
,
fw_status
);
}
else
{
dev_err
(
dev
,
"%s:%s underrun cmd: %s buf_len: %d out_len: %d
\n
"
,
__func__
,
dimm_name
,
cmd_name
,
buf_len
,
...
...
@@ -343,7 +355,7 @@ static int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc,
}
else
{
rc
=
0
;
if
(
cmd_rc
)
*
cmd_rc
=
xlat_status
(
buf
,
cmd
,
fw_status
);
*
cmd_rc
=
xlat_status
(
nvdimm
,
buf
,
cmd
,
fw_status
);
}
out:
...
...
@@ -351,6 +363,7 @@ static int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc,
return
rc
;
}
EXPORT_SYMBOL_GPL
(
acpi_nfit_ctl
);
static
const
char
*
spa_type_name
(
u16
type
)
{
...
...
@@ -2001,19 +2014,32 @@ static int ars_get_status(struct acpi_nfit_desc *acpi_desc)
return
cmd_rc
;
}
static
int
ars_status_process_records
(
struct
nvdimm_bus
*
nvdimm_bus
,
static
int
ars_status_process_records
(
struct
acpi_nfit_desc
*
acpi_desc
,
struct
nd_cmd_ars_status
*
ars_status
)
{
struct
nvdimm_bus
*
nvdimm_bus
=
acpi_desc
->
nvdimm_bus
;
int
rc
;
u32
i
;
/*
* First record starts at 44 byte offset from the start of the
* payload.
*/
if
(
ars_status
->
out_length
<
44
)
return
0
;
for
(
i
=
0
;
i
<
ars_status
->
num_records
;
i
++
)
{
/* only process full records */
if
(
ars_status
->
out_length
<
44
+
sizeof
(
struct
nd_ars_record
)
*
(
i
+
1
))
break
;
rc
=
nvdimm_bus_add_poison
(
nvdimm_bus
,
ars_status
->
records
[
i
].
err_address
,
ars_status
->
records
[
i
].
length
);
if
(
rc
)
return
rc
;
}
if
(
i
<
ars_status
->
num_records
)
dev_warn
(
acpi_desc
->
dev
,
"detected truncated ars results
\n
"
);
return
0
;
}
...
...
@@ -2266,8 +2292,7 @@ static int acpi_nfit_query_poison(struct acpi_nfit_desc *acpi_desc,
if
(
rc
<
0
&&
rc
!=
-
ENOSPC
)
return
rc
;
if
(
ars_status_process_records
(
acpi_desc
->
nvdimm_bus
,
acpi_desc
->
ars_status
))
if
(
ars_status_process_records
(
acpi_desc
,
acpi_desc
->
ars_status
))
return
-
ENOMEM
;
return
0
;
...
...
This diff is collapsed.
Click to expand it.
drivers/acpi/nfit/nfit.h
浏览文件 @
821781a9
...
...
@@ -240,5 +240,7 @@ const u8 *to_nfit_uuid(enum nfit_uuids id);
int
acpi_nfit_init
(
struct
acpi_nfit_desc
*
acpi_desc
,
void
*
nfit
,
acpi_size
sz
);
void
__acpi_nfit_notify
(
struct
device
*
dev
,
acpi_handle
handle
,
u32
event
);
void
__acpi_nvdimm_notify
(
struct
device
*
dev
,
u32
event
);
int
acpi_nfit_ctl
(
struct
nvdimm_bus_descriptor
*
nd_desc
,
struct
nvdimm
*
nvdimm
,
unsigned
int
cmd
,
void
*
buf
,
unsigned
int
buf_len
,
int
*
cmd_rc
);
void
acpi_nfit_desc_init
(
struct
acpi_nfit_desc
*
acpi_desc
,
struct
device
*
dev
);
#endif
/* __NFIT_H__ */
This diff is collapsed.
Click to expand it.
drivers/ata/libata-scsi.c
浏览文件 @
821781a9
...
...
@@ -1159,6 +1159,7 @@ static void ata_scsi_sdev_config(struct scsi_device *sdev)
{
sdev
->
use_10_for_rw
=
1
;
sdev
->
use_10_for_ms
=
1
;
sdev
->
no_write_same
=
1
;
/* Schedule policy is determined by ->qc_defer() callback and
* it needs to see every deferred qc. Set dev_blocked to 1 to
...
...
This diff is collapsed.
Click to expand it.
drivers/ata/sata_mv.c
浏览文件 @
821781a9
...
...
@@ -4090,7 +4090,20 @@ static int mv_platform_probe(struct platform_device *pdev)
/* allocate host */
if
(
pdev
->
dev
.
of_node
)
{
of_property_read_u32
(
pdev
->
dev
.
of_node
,
"nr-ports"
,
&
n_ports
);
rc
=
of_property_read_u32
(
pdev
->
dev
.
of_node
,
"nr-ports"
,
&
n_ports
);
if
(
rc
)
{
dev_err
(
&
pdev
->
dev
,
"error parsing nr-ports property: %d
\n
"
,
rc
);
return
rc
;
}
if
(
n_ports
<=
0
)
{
dev_err
(
&
pdev
->
dev
,
"nr-ports must be positive: %d
\n
"
,
n_ports
);
return
-
EINVAL
;
}
irq
=
irq_of_parse_and_map
(
pdev
->
dev
.
of_node
,
0
);
}
else
{
mv_platform_data
=
dev_get_platdata
(
&
pdev
->
dev
);
...
...
This diff is collapsed.
Click to expand it.
drivers/block/zram/zram_drv.c
浏览文件 @
821781a9
...
...
@@ -1413,8 +1413,14 @@ static ssize_t hot_remove_store(struct class *class,
return
ret
?
ret
:
count
;
}
/*
* NOTE: hot_add attribute is not the usual read-only sysfs attribute. In a
* sense that reading from this file does alter the state of your system -- it
* creates a new un-initialized zram device and returns back this device's
* device_id (or an error code if it fails to create a new device).
*/
static
struct
class_attribute
zram_control_class_attrs
[]
=
{
__ATTR
_RO
(
hot_add
),
__ATTR
(
hot_add
,
0400
,
hot_add_show
,
NULL
),
__ATTR_WO
(
hot_remove
),
__ATTR_NULL
,
};
...
...
This diff is collapsed.
Click to expand it.
drivers/crypto/caam/ctrl.c
浏览文件 @
821781a9
...
...
@@ -558,8 +558,9 @@ static int caam_probe(struct platform_device *pdev)
* Enable DECO watchdogs and, if this is a PHYS_ADDR_T_64BIT kernel,
* long pointers in master configuration register
*/
clrsetbits_32
(
&
ctrl
->
mcr
,
MCFGR_AWCACHE_MASK
,
MCFGR_AWCACHE_CACH
|
MCFGR_AWCACHE_BUFF
|
MCFGR_WDENABLE
|
MCFGR_LARGE_BURST
|
clrsetbits_32
(
&
ctrl
->
mcr
,
MCFGR_AWCACHE_MASK
|
MCFGR_LONG_PTR
,
MCFGR_AWCACHE_CACH
|
MCFGR_AWCACHE_BUFF
|
MCFGR_WDENABLE
|
MCFGR_LARGE_BURST
|
(
sizeof
(
dma_addr_t
)
==
sizeof
(
u64
)
?
MCFGR_LONG_PTR
:
0
));
/*
...
...
This diff is collapsed.
Click to expand it.
drivers/crypto/marvell/hash.c
浏览文件 @
821781a9
...
...
@@ -168,12 +168,11 @@ static void mv_cesa_ahash_std_step(struct ahash_request *req)
mv_cesa_adjust_op
(
engine
,
&
creq
->
op_tmpl
);
memcpy_toio
(
engine
->
sram
,
&
creq
->
op_tmpl
,
sizeof
(
creq
->
op_tmpl
));
digsize
=
crypto_ahash_digestsize
(
crypto_ahash_reqtfm
(
req
));
for
(
i
=
0
;
i
<
digsize
/
4
;
i
++
)
writel_relaxed
(
creq
->
state
[
i
],
engine
->
regs
+
CESA_IVDIG
(
i
));
mv_cesa_adjust_op
(
engine
,
&
creq
->
op_tmpl
);
memcpy_toio
(
engine
->
sram
,
&
creq
->
op_tmpl
,
sizeof
(
creq
->
op_tmpl
));
if
(
!
sreq
->
offset
)
{
digsize
=
crypto_ahash_digestsize
(
crypto_ahash_reqtfm
(
req
));
for
(
i
=
0
;
i
<
digsize
/
4
;
i
++
)
writel_relaxed
(
creq
->
state
[
i
],
engine
->
regs
+
CESA_IVDIG
(
i
));
}
if
(
creq
->
cache_ptr
)
memcpy_toio
(
engine
->
sram
+
CESA_SA_DATA_SRAM_OFFSET
,
...
...
This diff is collapsed.
Click to expand it.
drivers/dax/dax.c
浏览文件 @
821781a9
...
...
@@ -271,7 +271,7 @@ static int check_vma(struct dax_dev *dax_dev, struct vm_area_struct *vma,
return
-
ENXIO
;
/* prevent private mappings from being established */
if
((
vma
->
vm_flags
&
VM_
SHARED
)
!=
VM_SHARED
)
{
if
((
vma
->
vm_flags
&
VM_
MAYSHARE
)
!=
VM_MAYSHARE
)
{
dev_info
(
dev
,
"%s: %s: fail, attempted private mapping
\n
"
,
current
->
comm
,
func
);
return
-
EINVAL
;
...
...
This diff is collapsed.
Click to expand it.
drivers/gpu/drm/amd/amdgpu/amdgpu.h
浏览文件 @
821781a9
...
...
@@ -2472,6 +2472,7 @@ void amdgpu_driver_postclose_kms(struct drm_device *dev,
struct
drm_file
*
file_priv
);
void
amdgpu_driver_preclose_kms
(
struct
drm_device
*
dev
,
struct
drm_file
*
file_priv
);
int
amdgpu_suspend
(
struct
amdgpu_device
*
adev
);
int
amdgpu_device_suspend
(
struct
drm_device
*
dev
,
bool
suspend
,
bool
fbcon
);
int
amdgpu_device_resume
(
struct
drm_device
*
dev
,
bool
resume
,
bool
fbcon
);
u32
amdgpu_get_vblank_counter_kms
(
struct
drm_device
*
dev
,
unsigned
int
pipe
);
...
...
This diff is collapsed.
Click to expand it.
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
浏览文件 @
821781a9
...
...
@@ -1493,7 +1493,7 @@ static int amdgpu_fini(struct amdgpu_device *adev)
return
0
;
}
static
int
amdgpu_suspend
(
struct
amdgpu_device
*
adev
)
int
amdgpu_suspend
(
struct
amdgpu_device
*
adev
)
{
int
i
,
r
;
...
...
This diff is collapsed.
Click to expand it.
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
浏览文件 @
821781a9
...
...
@@ -479,12 +479,15 @@ amdgpu_pci_remove(struct pci_dev *pdev)
static
void
amdgpu_pci_shutdown
(
struct
pci_dev
*
pdev
)
{
struct
drm_device
*
dev
=
pci_get_drvdata
(
pdev
);
struct
amdgpu_device
*
adev
=
dev
->
dev_private
;
/* if we are running in a VM, make sure the device
* torn down properly on reboot/shutdown.
* unfortunately we can't detect certain
* hypervisors so just do this all the time.
*/
amdgpu_
pci_remove
(
p
dev
);
amdgpu_
suspend
(
a
dev
);
}
static
int
amdgpu_pmops_suspend
(
struct
device
*
dev
)
...
...
This diff is collapsed.
Click to expand it.
drivers/isdn/gigaset/ser-gigaset.c
浏览文件 @
821781a9
...
...
@@ -755,8 +755,10 @@ static int __init ser_gigaset_init(void)
driver
=
gigaset_initdriver
(
GIGASET_MINOR
,
GIGASET_MINORS
,
GIGASET_MODULENAME
,
GIGASET_DEVNAME
,
&
ops
,
THIS_MODULE
);
if
(
!
driver
)
if
(
!
driver
)
{
rc
=
-
ENOMEM
;
goto
error
;
}
rc
=
tty_register_ldisc
(
N_GIGASET_M101
,
&
gigaset_ldisc
);
if
(
rc
!=
0
)
{
...
...
This diff is collapsed.
Click to expand it.
drivers/net/can/usb/peak_usb/pcan_usb_core.c
浏览文件 @
821781a9
...
...
@@ -870,23 +870,25 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,
static
void
peak_usb_disconnect
(
struct
usb_interface
*
intf
)
{
struct
peak_usb_device
*
dev
;
struct
peak_usb_device
*
dev_prev_siblings
;
/* unregister as many netdev devices as siblings */
for
(
dev
=
usb_get_intfdata
(
intf
);
dev
;
dev
=
dev
->
prev_siblings
)
{
for
(
dev
=
usb_get_intfdata
(
intf
);
dev
;
dev
=
dev
_
prev_siblings
)
{
struct
net_device
*
netdev
=
dev
->
netdev
;
char
name
[
IFNAMSIZ
];
dev_prev_siblings
=
dev
->
prev_siblings
;
dev
->
state
&=
~
PCAN_USB_STATE_CONNECTED
;
strncpy
(
name
,
netdev
->
name
,
IFNAMSIZ
);
unregister_netdev
(
netdev
);
free_candev
(
netdev
);
kfree
(
dev
->
cmd_buf
);
dev
->
next_siblings
=
NULL
;
if
(
dev
->
adapter
->
dev_free
)
dev
->
adapter
->
dev_free
(
dev
);
free_candev
(
netdev
);
dev_info
(
&
intf
->
dev
,
"%s removed
\n
"
,
name
);
}
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
浏览文件 @
821781a9
...
...
@@ -4921,6 +4921,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
*/
for_each_port
(
adapter
,
i
)
{
pi
=
adap2pinfo
(
adapter
,
i
);
adapter
->
port
[
i
]
->
dev_port
=
pi
->
lport
;
netif_set_real_num_tx_queues
(
adapter
->
port
[
i
],
pi
->
nqsets
);
netif_set_real_num_rx_queues
(
adapter
->
port
[
i
],
pi
->
nqsets
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
浏览文件 @
821781a9
...
...
@@ -7851,7 +7851,6 @@ int t4_port_init(struct adapter *adap, int mbox, int pf, int vf)
return
ret
;
memcpy
(
adap
->
port
[
i
]
->
dev_addr
,
addr
,
ETH_ALEN
);
adap
->
port
[
i
]
->
dev_port
=
j
;
j
++
;
}
return
0
;
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
浏览文件 @
821781a9
...
...
@@ -2960,6 +2960,7 @@ static int cxgb4vf_pci_probe(struct pci_dev *pdev,
netdev
->
netdev_ops
=
&
cxgb4vf_netdev_ops
;
netdev
->
ethtool_ops
=
&
cxgb4vf_ethtool_ops
;
netdev
->
dev_port
=
pi
->
port_id
;
/*
* Initialize the hardware/software state for the port.
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/ibm/ibmveth.c
浏览文件 @
821781a9
...
...
@@ -58,7 +58,7 @@ static struct kobj_type ktype_veth_pool;
static
const
char
ibmveth_driver_name
[]
=
"ibmveth"
;
static
const
char
ibmveth_driver_string
[]
=
"IBM Power Virtual Ethernet Driver"
;
#define ibmveth_driver_version "1.0
5
"
#define ibmveth_driver_version "1.0
6
"
MODULE_AUTHOR
(
"Santiago Leon <santil@linux.vnet.ibm.com>"
);
MODULE_DESCRIPTION
(
"IBM Power Virtual Ethernet Driver"
);
...
...
@@ -137,6 +137,11 @@ static inline int ibmveth_rxq_frame_offset(struct ibmveth_adapter *adapter)
return
ibmveth_rxq_flags
(
adapter
)
&
IBMVETH_RXQ_OFF_MASK
;
}
static
inline
int
ibmveth_rxq_large_packet
(
struct
ibmveth_adapter
*
adapter
)
{
return
ibmveth_rxq_flags
(
adapter
)
&
IBMVETH_RXQ_LRG_PKT
;
}
static
inline
int
ibmveth_rxq_frame_length
(
struct
ibmveth_adapter
*
adapter
)
{
return
be32_to_cpu
(
adapter
->
rx_queue
.
queue_addr
[
adapter
->
rx_queue
.
index
].
length
);
...
...
@@ -1174,6 +1179,45 @@ static netdev_tx_t ibmveth_start_xmit(struct sk_buff *skb,
goto
retry_bounce
;
}
static
void
ibmveth_rx_mss_helper
(
struct
sk_buff
*
skb
,
u16
mss
,
int
lrg_pkt
)
{
int
offset
=
0
;
/* only TCP packets will be aggregated */
if
(
skb
->
protocol
==
htons
(
ETH_P_IP
))
{
struct
iphdr
*
iph
=
(
struct
iphdr
*
)
skb
->
data
;
if
(
iph
->
protocol
==
IPPROTO_TCP
)
{
offset
=
iph
->
ihl
*
4
;
skb_shinfo
(
skb
)
->
gso_type
=
SKB_GSO_TCPV4
;
}
else
{
return
;
}
}
else
if
(
skb
->
protocol
==
htons
(
ETH_P_IPV6
))
{
struct
ipv6hdr
*
iph6
=
(
struct
ipv6hdr
*
)
skb
->
data
;
if
(
iph6
->
nexthdr
==
IPPROTO_TCP
)
{
offset
=
sizeof
(
struct
ipv6hdr
);
skb_shinfo
(
skb
)
->
gso_type
=
SKB_GSO_TCPV6
;
}
else
{
return
;
}
}
else
{
return
;
}
/* if mss is not set through Large Packet bit/mss in rx buffer,
* expect that the mss will be written to the tcp header checksum.
*/
if
(
lrg_pkt
)
{
skb_shinfo
(
skb
)
->
gso_size
=
mss
;
}
else
if
(
offset
)
{
struct
tcphdr
*
tcph
=
(
struct
tcphdr
*
)(
skb
->
data
+
offset
);
skb_shinfo
(
skb
)
->
gso_size
=
ntohs
(
tcph
->
check
);
tcph
->
check
=
0
;
}
}
static
int
ibmveth_poll
(
struct
napi_struct
*
napi
,
int
budget
)
{
struct
ibmveth_adapter
*
adapter
=
...
...
@@ -1182,6 +1226,7 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)
int
frames_processed
=
0
;
unsigned
long
lpar_rc
;
struct
iphdr
*
iph
;
u16
mss
=
0
;
restart_poll:
while
(
frames_processed
<
budget
)
{
...
...
@@ -1199,9 +1244,21 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)
int
length
=
ibmveth_rxq_frame_length
(
adapter
);
int
offset
=
ibmveth_rxq_frame_offset
(
adapter
);
int
csum_good
=
ibmveth_rxq_csum_good
(
adapter
);
int
lrg_pkt
=
ibmveth_rxq_large_packet
(
adapter
);
skb
=
ibmveth_rxq_get_buffer
(
adapter
);
/* if the large packet bit is set in the rx queue
* descriptor, the mss will be written by PHYP eight
* bytes from the start of the rx buffer, which is
* skb->data at this stage
*/
if
(
lrg_pkt
)
{
__be64
*
rxmss
=
(
__be64
*
)(
skb
->
data
+
8
);
mss
=
(
u16
)
be64_to_cpu
(
*
rxmss
);
}
new_skb
=
NULL
;
if
(
length
<
rx_copybreak
)
new_skb
=
netdev_alloc_skb
(
netdev
,
length
);
...
...
@@ -1235,11 +1292,15 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)
if
(
iph
->
check
==
0xffff
)
{
iph
->
check
=
0
;
iph
->
check
=
ip_fast_csum
((
unsigned
char
*
)
iph
,
iph
->
ihl
);
adapter
->
rx_large_packets
++
;
}
}
}
if
(
length
>
netdev
->
mtu
+
ETH_HLEN
)
{
ibmveth_rx_mss_helper
(
skb
,
mss
,
lrg_pkt
);
adapter
->
rx_large_packets
++
;
}
napi_gro_receive
(
napi
,
skb
);
/* send it up */
netdev
->
stats
.
rx_packets
++
;
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/ibm/ibmveth.h
浏览文件 @
821781a9
...
...
@@ -209,6 +209,7 @@ struct ibmveth_rx_q_entry {
#define IBMVETH_RXQ_TOGGLE 0x80000000
#define IBMVETH_RXQ_TOGGLE_SHIFT 31
#define IBMVETH_RXQ_VALID 0x40000000
#define IBMVETH_RXQ_LRG_PKT 0x04000000
#define IBMVETH_RXQ_NO_CSUM 0x02000000
#define IBMVETH_RXQ_CSUM_GOOD 0x01000000
#define IBMVETH_RXQ_OFF_MASK 0x0000FFFF
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/lantiq_etop.c
浏览文件 @
821781a9
...
...
@@ -696,6 +696,7 @@ ltq_etop_probe(struct platform_device *pdev)
priv
->
pldata
=
dev_get_platdata
(
&
pdev
->
dev
);
priv
->
netdev
=
dev
;
spin_lock_init
(
&
priv
->
lock
);
SET_NETDEV_DEV
(
dev
,
&
pdev
->
dev
);
for
(
i
=
0
;
i
<
MAX_DMA_CHAN
;
i
++
)
{
if
(
IS_TX
(
i
))
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/mellanox/mlx5/core/Kconfig
浏览文件 @
821781a9
...
...
@@ -18,8 +18,6 @@ config MLX5_CORE_EN
default n
---help---
Ethernet support in Mellanox Technologies ConnectX-4 NIC.
Ethernet and Infiniband support in ConnectX-4 are currently mutually
exclusive.
config MLX5_CORE_EN_DCB
bool "Data Center Bridging (DCB) Support"
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/smsc/smsc911x.c
浏览文件 @
821781a9
...
...
@@ -438,9 +438,16 @@ static int smsc911x_request_resources(struct platform_device *pdev)
ret
=
regulator_bulk_get
(
&
pdev
->
dev
,
ARRAY_SIZE
(
pdata
->
supplies
),
pdata
->
supplies
);
if
(
ret
)
if
(
ret
)
{
/*
* Retry on deferrals, else just report the error
* and try to continue.
*/
if
(
ret
==
-
EPROBE_DEFER
)
return
ret
;
netdev_err
(
ndev
,
"couldn't get regulators %d
\n
"
,
ret
);
}
/* Request optional RESET GPIO */
pdata
->
reset_gpiod
=
devm_gpiod_get_optional
(
&
pdev
->
dev
,
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/ti/cpmac.c
浏览文件 @
821781a9
...
...
@@ -1112,6 +1112,7 @@ static int cpmac_probe(struct platform_device *pdev)
if
(
!
dev
)
return
-
ENOMEM
;
SET_NETDEV_DEV
(
dev
,
&
pdev
->
dev
);
platform_set_drvdata
(
pdev
,
dev
);
priv
=
netdev_priv
(
dev
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/ti/cpsw-phy-sel.c
浏览文件 @
821781a9
...
...
@@ -81,6 +81,7 @@ static void cpsw_gmii_sel_am3352(struct cpsw_phy_sel_priv *priv,
};
mask
=
GMII_SEL_MODE_MASK
<<
(
slave
*
2
)
|
BIT
(
slave
+
6
);
mask
|=
BIT
(
slave
+
4
);
mode
<<=
slave
*
2
;
if
(
priv
->
rmii_clock_external
)
{
...
...
This diff is collapsed.
Click to expand it.
drivers/net/hyperv/netvsc_drv.c
浏览文件 @
821781a9
...
...
@@ -47,6 +47,10 @@
NETIF_F_TSO | \
NETIF_F_TSO6 | \
NETIF_F_HW_CSUM)
/* Restrict GSO size to account for NVGRE */
#define NETVSC_GSO_MAX_SIZE 62768
static
int
ring_size
=
128
;
module_param
(
ring_size
,
int
,
S_IRUGO
);
MODULE_PARM_DESC
(
ring_size
,
"Ring buffer size (# of pages)"
);
...
...
@@ -1393,6 +1397,7 @@ static int netvsc_probe(struct hv_device *dev,
nvdev
=
net_device_ctx
->
nvdev
;
netif_set_real_num_tx_queues
(
net
,
nvdev
->
num_chn
);
netif_set_real_num_rx_queues
(
net
,
nvdev
->
num_chn
);
netif_set_gso_max_size
(
net
,
NETVSC_GSO_MAX_SIZE
);
/* MTU range: 68 - 1500 or 65521 */
net
->
min_mtu
=
NETVSC_MTU_MIN
;
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ipvlan/ipvlan_main.c
浏览文件 @
821781a9
...
...
@@ -546,13 +546,15 @@ static int ipvlan_link_new(struct net *src_net, struct net_device *dev,
}
err
=
ipvlan_set_port_mode
(
port
,
mode
);
if
(
err
)
{
goto
un
register
_netdev
;
goto
un
link
_netdev
;
}
list_add_tail_rcu
(
&
ipvlan
->
pnode
,
&
port
->
ipvlans
);
netif_stacked_transfer_operstate
(
phy_dev
,
dev
);
return
0
;
unlink_netdev:
netdev_upper_dev_unlink
(
phy_dev
,
dev
);
unregister_netdev:
unregister_netdevice
(
dev
);
destroy_ipvlan_port:
...
...
This diff is collapsed.
Click to expand it.
drivers/net/phy/phy_device.c
浏览文件 @
821781a9
...
...
@@ -905,11 +905,17 @@ EXPORT_SYMBOL(phy_attached_print);
int
phy_attach_direct
(
struct
net_device
*
dev
,
struct
phy_device
*
phydev
,
u32
flags
,
phy_interface_t
interface
)
{
struct
module
*
ndev_owner
=
dev
->
dev
.
parent
->
driver
->
owner
;
struct
mii_bus
*
bus
=
phydev
->
mdio
.
bus
;
struct
device
*
d
=
&
phydev
->
mdio
.
dev
;
int
err
;
if
(
!
try_module_get
(
bus
->
owner
))
{
/* For Ethernet device drivers that register their own MDIO bus, we
* will have bus->owner match ndev_mod, so we do not want to increment
* our own module->refcnt here, otherwise we would not be able to
* unload later on.
*/
if
(
ndev_owner
!=
bus
->
owner
&&
!
try_module_get
(
bus
->
owner
))
{
dev_err
(
&
dev
->
dev
,
"failed to get the bus module
\n
"
);
return
-
EIO
;
}
...
...
@@ -971,7 +977,8 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
error:
phy_detach
(
phydev
);
put_device
(
d
);
module_put
(
bus
->
owner
);
if
(
ndev_owner
!=
bus
->
owner
)
module_put
(
bus
->
owner
);
return
err
;
}
EXPORT_SYMBOL
(
phy_attach_direct
);
...
...
@@ -1021,6 +1028,8 @@ EXPORT_SYMBOL(phy_attach);
*/
void
phy_detach
(
struct
phy_device
*
phydev
)
{
struct
net_device
*
dev
=
phydev
->
attached_dev
;
struct
module
*
ndev_owner
=
dev
->
dev
.
parent
->
driver
->
owner
;
struct
mii_bus
*
bus
;
int
i
;
...
...
@@ -1050,7 +1059,8 @@ void phy_detach(struct phy_device *phydev)
bus
=
phydev
->
mdio
.
bus
;
put_device
(
&
phydev
->
mdio
.
dev
);
module_put
(
bus
->
owner
);
if
(
ndev_owner
!=
bus
->
owner
)
module_put
(
bus
->
owner
);
}
EXPORT_SYMBOL
(
phy_detach
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/usb/cdc_mbim.c
浏览文件 @
821781a9
...
...
@@ -602,6 +602,21 @@ static const struct driver_info cdc_mbim_info_ndp_to_end = {
.
data
=
CDC_NCM_FLAG_NDP_TO_END
,
};
/* Some modems (e.g. Telit LE922A6) do not work properly with altsetting
* toggle done in cdc_ncm_bind_common. CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE
* flag is used to avoid this procedure.
*/
static
const
struct
driver_info
cdc_mbim_info_avoid_altsetting_toggle
=
{
.
description
=
"CDC MBIM"
,
.
flags
=
FLAG_NO_SETINT
|
FLAG_MULTI_PACKET
|
FLAG_WWAN
,
.
bind
=
cdc_mbim_bind
,
.
unbind
=
cdc_mbim_unbind
,
.
manage_power
=
cdc_mbim_manage_power
,
.
rx_fixup
=
cdc_mbim_rx_fixup
,
.
tx_fixup
=
cdc_mbim_tx_fixup
,
.
data
=
CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE
,
};
static
const
struct
usb_device_id
mbim_devs
[]
=
{
/* This duplicate NCM entry is intentional. MBIM devices can
* be disguised as NCM by default, and this is necessary to
...
...
@@ -626,6 +641,12 @@ static const struct usb_device_id mbim_devs[] = {
{
USB_VENDOR_AND_INTERFACE_INFO
(
0x12d1
,
USB_CLASS_COMM
,
USB_CDC_SUBCLASS_MBIM
,
USB_CDC_PROTO_NONE
),
.
driver_info
=
(
unsigned
long
)
&
cdc_mbim_info_ndp_to_end
,
},
/* Telit LE922A6 in MBIM composition */
{
USB_DEVICE_AND_INTERFACE_INFO
(
0x1bc7
,
0x1041
,
USB_CLASS_COMM
,
USB_CDC_SUBCLASS_MBIM
,
USB_CDC_PROTO_NONE
),
.
driver_info
=
(
unsigned
long
)
&
cdc_mbim_info_avoid_altsetting_toggle
,
},
/* default entry */
{
USB_INTERFACE_INFO
(
USB_CLASS_COMM
,
USB_CDC_SUBCLASS_MBIM
,
USB_CDC_PROTO_NONE
),
.
driver_info
=
(
unsigned
long
)
&
cdc_mbim_info_zlp
,
...
...
This diff is collapsed.
Click to expand it.
drivers/net/usb/cdc_ncm.c
浏览文件 @
821781a9
...
...
@@ -835,11 +835,18 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
iface_no
=
ctx
->
data
->
cur_altsetting
->
desc
.
bInterfaceNumber
;
/* Device-specific flags */
ctx
->
drvflags
=
drvflags
;
/* Reset data interface. Some devices will not reset properly
* unless they are configured first. Toggle the altsetting to
* force a reset
* force a reset.
* Some other devices do not work properly with this procedure
* that can be avoided using quirk CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE
*/
usb_set_interface
(
dev
->
udev
,
iface_no
,
data_altsetting
);
if
(
!
(
ctx
->
drvflags
&
CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE
))
usb_set_interface
(
dev
->
udev
,
iface_no
,
data_altsetting
);
temp
=
usb_set_interface
(
dev
->
udev
,
iface_no
,
0
);
if
(
temp
)
{
dev_dbg
(
&
intf
->
dev
,
"set interface failed
\n
"
);
...
...
@@ -886,9 +893,6 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
/* finish setting up the device specific data */
cdc_ncm_setup
(
dev
);
/* Device-specific flags */
ctx
->
drvflags
=
drvflags
;
/* Allocate the delayed NDP if needed. */
if
(
ctx
->
drvflags
&
CDC_NCM_FLAG_NDP_TO_END
)
{
ctx
->
delayed_ndp16
=
kzalloc
(
ctx
->
max_ndp_size
,
GFP_KERNEL
);
...
...
This diff is collapsed.
Click to expand it.
drivers/nvdimm/bus.c
浏览文件 @
821781a9
...
...
@@ -715,7 +715,7 @@ EXPORT_SYMBOL_GPL(nd_cmd_in_size);
u32
nd_cmd_out_size
(
struct
nvdimm
*
nvdimm
,
int
cmd
,
const
struct
nd_cmd_desc
*
desc
,
int
idx
,
const
u32
*
in_field
,
const
u32
*
out_field
)
const
u32
*
out_field
,
unsigned
long
remainder
)
{
if
(
idx
>=
desc
->
out_num
)
return
UINT_MAX
;
...
...
@@ -727,9 +727,24 @@ u32 nd_cmd_out_size(struct nvdimm *nvdimm, int cmd,
return
in_field
[
1
];
else
if
(
nvdimm
&&
cmd
==
ND_CMD_VENDOR
&&
idx
==
2
)
return
out_field
[
1
];
else
if
(
!
nvdimm
&&
cmd
==
ND_CMD_ARS_STATUS
&&
idx
==
2
)
return
out_field
[
1
]
-
8
;
else
if
(
cmd
==
ND_CMD_CALL
)
{
else
if
(
!
nvdimm
&&
cmd
==
ND_CMD_ARS_STATUS
&&
idx
==
2
)
{
/*
* Per table 9-276 ARS Data in ACPI 6.1, out_field[1] is
* "Size of Output Buffer in bytes, including this
* field."
*/
if
(
out_field
[
1
]
<
4
)
return
0
;
/*
* ACPI 6.1 is ambiguous if 'status' is included in the
* output size. If we encounter an output size that
* overshoots the remainder by 4 bytes, assume it was
* including 'status'.
*/
if
(
out_field
[
1
]
-
8
==
remainder
)
return
remainder
;
return
out_field
[
1
]
-
4
;
}
else
if
(
cmd
==
ND_CMD_CALL
)
{
struct
nd_cmd_pkg
*
pkg
=
(
struct
nd_cmd_pkg
*
)
in_field
;
return
pkg
->
nd_size_out
;
...
...
@@ -876,7 +891,7 @@ static int __nd_ioctl(struct nvdimm_bus *nvdimm_bus, struct nvdimm *nvdimm,
/* process an output envelope */
for
(
i
=
0
;
i
<
desc
->
out_num
;
i
++
)
{
u32
out_size
=
nd_cmd_out_size
(
nvdimm
,
cmd
,
desc
,
i
,
(
u32
*
)
in_env
,
(
u32
*
)
out_env
);
(
u32
*
)
in_env
,
(
u32
*
)
out_env
,
0
);
u32
copy
;
if
(
out_size
==
UINT_MAX
)
{
...
...
This diff is collapsed.
Click to expand it.
drivers/scsi/lpfc/lpfc_sli.c
浏览文件 @
821781a9
...
...
@@ -1323,18 +1323,20 @@ lpfc_sli_ringtxcmpl_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
{
lockdep_assert_held(&phba->hbalock);
BUG_ON(!piocb
|| !piocb->vport
);
BUG_ON(!piocb);
list_add_tail(&piocb->list, &pring->txcmplq);
piocb->iocb_flag |= LPFC_IO_ON_TXCMPLQ;
if ((unlikely(pring->ringno == LPFC_ELS_RING)) &&
(piocb->iocb.ulpCommand != CMD_ABORT_XRI_CN) &&
(piocb->iocb.ulpCommand != CMD_CLOSE_XRI_CN) &&
(!(piocb->vport->load_flag & FC_UNLOADING)))
mod_timer(&piocb->vport->els_tmofunc,
jiffies +
msecs_to_jiffies(1000 * (phba->fc_ratov << 1)));
(piocb->iocb.ulpCommand != CMD_CLOSE_XRI_CN)) {
BUG_ON(!piocb->vport);
if (!(piocb->vport->load_flag & FC_UNLOADING))
mod_timer(&piocb->vport->els_tmofunc,
jiffies +
msecs_to_jiffies(1000 * (phba->fc_ratov << 1)));
}
return 0;
}
...
...
This diff is collapsed.
Click to expand it.
drivers/vhost/vsock.c
浏览文件 @
821781a9
...
...
@@ -503,7 +503,7 @@ static void vhost_vsock_reset_orphans(struct sock *sk)
* executing.
*/
if
(
!
vhost_vsock_get
(
vsk
->
local
_addr
.
svm_cid
))
{
if
(
!
vhost_vsock_get
(
vsk
->
remote
_addr
.
svm_cid
))
{
sock_set_flag
(
sk
,
SOCK_DONE
);
vsk
->
peer_shutdown
=
SHUTDOWN_MASK
;
sk
->
sk_state
=
SS_UNCONNECTED
;
...
...
This diff is collapsed.
Click to expand it.
fs/ceph/dir.c
浏览文件 @
821781a9
...
...
@@ -1261,26 +1261,30 @@ static int ceph_d_revalidate(struct dentry *dentry, unsigned int flags)
return
-
ECHILD
;
op
=
ceph_snap
(
dir
)
==
CEPH_SNAPDIR
?
CEPH_MDS_OP_LOOKUPSNAP
:
CEPH_MDS_OP_
LOOKUP
;
CEPH_MDS_OP_LOOKUPSNAP
:
CEPH_MDS_OP_
GETATTR
;
req
=
ceph_mdsc_create_request
(
mdsc
,
op
,
USE_ANY_MDS
);
if
(
!
IS_ERR
(
req
))
{
req
->
r_dentry
=
dget
(
dentry
);
req
->
r_num_caps
=
2
;
req
->
r_num_caps
=
op
==
CEPH_MDS_OP_GETATTR
?
1
:
2
;
mask
=
CEPH_STAT_CAP_INODE
|
CEPH_CAP_AUTH_SHARED
;
if
(
ceph_security_xattr_wanted
(
dir
))
mask
|=
CEPH_CAP_XATTR_SHARED
;
req
->
r_args
.
getattr
.
mask
=
mask
;
req
->
r_locked_dir
=
dir
;
err
=
ceph_mdsc_do_request
(
mdsc
,
NULL
,
req
);
if
(
err
==
0
||
err
==
-
ENOENT
)
{
if
(
dentry
==
req
->
r_dentry
)
{
valid
=
!
d_unhashed
(
dentry
);
}
else
{
d_invalidate
(
req
->
r_dentry
);
err
=
-
EAGAIN
;
}
switch
(
err
)
{
case
0
:
if
(
d_really_is_positive
(
dentry
)
&&
d_inode
(
dentry
)
==
req
->
r_target_inode
)
valid
=
1
;
break
;
case
-
ENOENT
:
if
(
d_really_is_negative
(
dentry
))
valid
=
1
;
/* Fallthrough */
default:
break
;
}
ceph_mdsc_put_request
(
req
);
dout
(
"d_revalidate %p lookup result=%d
\n
"
,
...
...
This diff is collapsed.
Click to expand it.
fs/fuse/dir.c
浏览文件 @
821781a9
...
...
@@ -1739,8 +1739,6 @@ static int fuse_setattr(struct dentry *entry, struct iattr *attr)
* This should be done on write(), truncate() and chown().
*/
if
(
!
fc
->
handle_killpriv
)
{
int
kill
;
/*
* ia_mode calculation may have used stale i_mode.
* Refresh and recalculate.
...
...
@@ -1750,12 +1748,11 @@ static int fuse_setattr(struct dentry *entry, struct iattr *attr)
return
ret
;
attr
->
ia_mode
=
inode
->
i_mode
;
kill
=
should_remove_suid
(
entry
);
if
(
kill
&
ATTR_KILL_SUID
)
{
if
(
inode
->
i_mode
&
S_ISUID
)
{
attr
->
ia_valid
|=
ATTR_MODE
;
attr
->
ia_mode
&=
~
S_ISUID
;
}
if
(
kill
&
ATTR_KILL_SGID
)
{
if
(
(
inode
->
i_mode
&
(
S_ISGID
|
S_IXGRP
))
==
(
S_ISGID
|
S_IXGRP
)
)
{
attr
->
ia_valid
|=
ATTR_MODE
;
attr
->
ia_mode
&=
~
S_ISGID
;
}
...
...
This diff is collapsed.
Click to expand it.
include/asm-generic/export.h
浏览文件 @
821781a9
...
...
@@ -54,7 +54,6 @@ KSYM(__kstrtab_\name):
KSYM
(
__kcrctab_
\
name
)
:
__put
KSYM
(
__crc_
\
name
)
.
weak
KSYM
(
__crc_
\
name
)
.
set
KSYM
(
__crc_
\
name
),
0
.
previous
#endif
#endif
...
...
This diff is collapsed.
Click to expand it.
include/linux/libnvdimm.h
浏览文件 @
821781a9
...
...
@@ -143,7 +143,7 @@ u32 nd_cmd_in_size(struct nvdimm *nvdimm, int cmd,
const
struct
nd_cmd_desc
*
desc
,
int
idx
,
void
*
buf
);
u32
nd_cmd_out_size
(
struct
nvdimm
*
nvdimm
,
int
cmd
,
const
struct
nd_cmd_desc
*
desc
,
int
idx
,
const
u32
*
in_field
,
const
u32
*
out_field
);
const
u32
*
out_field
,
unsigned
long
remainder
);
int
nvdimm_bus_check_dimm_count
(
struct
nvdimm_bus
*
nvdimm_bus
,
int
dimm_count
);
struct
nd_region
*
nvdimm_pmem_region_create
(
struct
nvdimm_bus
*
nvdimm_bus
,
struct
nd_region_desc
*
ndr_desc
);
...
...
This diff is collapsed.
Click to expand it.
include/linux/usb/cdc_ncm.h
浏览文件 @
821781a9
...
...
@@ -81,7 +81,8 @@
#define CDC_NCM_TIMER_INTERVAL_MAX (U32_MAX / NSEC_PER_USEC)
/* Driver flags */
#define CDC_NCM_FLAG_NDP_TO_END 0x02
/* NDP is placed at end of frame */
#define CDC_NCM_FLAG_NDP_TO_END 0x02
/* NDP is placed at end of frame */
#define CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE 0x04
/* Avoid altsetting toggle during init */
#define cdc_ncm_comm_intf_is_mbim(x) ((x)->desc.bInterfaceSubClass == USB_CDC_SUBCLASS_MBIM && \
(x)->desc.bInterfaceProtocol == USB_CDC_PROTO_NONE)
...
...
This diff is collapsed.
Click to expand it.
include/uapi/linux/can.h
浏览文件 @
821781a9
...
...
@@ -196,5 +196,6 @@ struct can_filter {
};
#define CAN_INV_FILTER 0x20000000U
/* to be set in can_filter.can_id */
#define CAN_RAW_FILTER_MAX 512
/* maximum number of can_filter set via setsockopt() */
#endif
/* !_UAPI_CAN_H */
This diff is collapsed.
Click to expand it.
kernel/events/core.c
浏览文件 @
821781a9
...
...
@@ -903,17 +903,14 @@ list_update_cgroup_event(struct perf_event *event,
*/
cpuctx
=
__get_cpu_context
(
ctx
);
/* Only set/clear cpuctx->cgrp if current task uses event->cgrp. */
if
(
perf_cgroup_from_task
(
current
,
ctx
)
!=
event
->
cgrp
)
{
/*
* We are removing the last cpu event in this context.
* If that event is not active in this cpu, cpuctx->cgrp
* should've been cleared by perf_cgroup_switch.
*/
WARN_ON_ONCE
(
!
add
&&
cpuctx
->
cgrp
);
return
;
}
cpuctx
->
cgrp
=
add
?
event
->
cgrp
:
NULL
;
/*
* cpuctx->cgrp is NULL until a cgroup event is sched in or
* ctx->nr_cgroup == 0 .
*/
if
(
add
&&
perf_cgroup_from_task
(
current
,
ctx
)
==
event
->
cgrp
)
cpuctx
->
cgrp
=
event
->
cgrp
;
else
if
(
!
add
)
cpuctx
->
cgrp
=
NULL
;
}
#else
/* !CONFIG_CGROUP_PERF */
...
...
This diff is collapsed.
Click to expand it.
kernel/kcov.c
浏览文件 @
821781a9
...
...
@@ -7,6 +7,7 @@
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/printk.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/vmalloc.h>
...
...
This diff is collapsed.
Click to expand it.
kernel/locking/lockdep.c
浏览文件 @
821781a9
...
...
@@ -506,13 +506,13 @@ static void __print_lock_name(struct lock_class *class)
name
=
class
->
name
;
if
(
!
name
)
{
name
=
__get_key_name
(
class
->
key
,
str
);
printk
(
"%s"
,
name
);
printk
(
KERN_CONT
"%s"
,
name
);
}
else
{
printk
(
"%s"
,
name
);
printk
(
KERN_CONT
"%s"
,
name
);
if
(
class
->
name_version
>
1
)
printk
(
"#%d"
,
class
->
name_version
);
printk
(
KERN_CONT
"#%d"
,
class
->
name_version
);
if
(
class
->
subclass
)
printk
(
"/%d"
,
class
->
subclass
);
printk
(
KERN_CONT
"/%d"
,
class
->
subclass
);
}
}
...
...
@@ -522,9 +522,9 @@ static void print_lock_name(struct lock_class *class)
get_usage_chars
(
class
,
usage
);
printk
(
" ("
);
printk
(
KERN_CONT
" ("
);
__print_lock_name
(
class
);
printk
(
"){%s}"
,
usage
);
printk
(
KERN_CONT
"){%s}"
,
usage
);
}
static
void
print_lockdep_cache
(
struct
lockdep_map
*
lock
)
...
...
@@ -536,7 +536,7 @@ static void print_lockdep_cache(struct lockdep_map *lock)
if
(
!
name
)
name
=
__get_key_name
(
lock
->
key
->
subkeys
,
str
);
printk
(
"%s"
,
name
);
printk
(
KERN_CONT
"%s"
,
name
);
}
static
void
print_lock
(
struct
held_lock
*
hlock
)
...
...
@@ -551,13 +551,13 @@ static void print_lock(struct held_lock *hlock)
barrier
();
if
(
!
class_idx
||
(
class_idx
-
1
)
>=
MAX_LOCKDEP_KEYS
)
{
printk
(
"<RELEASED>
\n
"
);
printk
(
KERN_CONT
"<RELEASED>
\n
"
);
return
;
}
print_lock_name
(
lock_classes
+
class_idx
-
1
);
printk
(
", at: "
);
print_ip_sym
(
hlock
->
acquire_ip
);
printk
(
KERN_CONT
", at: [<%p>] %pS
\n
"
,
(
void
*
)
hlock
->
acquire_ip
,
(
void
*
)
hlock
->
acquire_ip
);
}
static
void
lockdep_print_held_locks
(
struct
task_struct
*
curr
)
...
...
@@ -792,8 +792,8 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force)
printk
(
"
\n
new class %p: %s"
,
class
->
key
,
class
->
name
);
if
(
class
->
name_version
>
1
)
printk
(
"#%d"
,
class
->
name_version
);
printk
(
"
\n
"
);
printk
(
KERN_CONT
"#%d"
,
class
->
name_version
);
printk
(
KERN_CONT
"
\n
"
);
dump_stack
();
if
(
!
graph_lock
())
{
...
...
@@ -1071,7 +1071,7 @@ print_circular_bug_entry(struct lock_list *target, int depth)
return
0
;
printk
(
"
\n
-> #%u"
,
depth
);
print_lock_name
(
target
->
class
);
printk
(
":
\n
"
);
printk
(
KERN_CONT
":
\n
"
);
print_stack_trace
(
&
target
->
trace
,
6
);
return
0
;
...
...
@@ -1102,11 +1102,11 @@ print_circular_lock_scenario(struct held_lock *src,
if
(
parent
!=
source
)
{
printk
(
"Chain exists of:
\n
"
);
__print_lock_name
(
source
);
printk
(
" --> "
);
printk
(
KERN_CONT
" --> "
);
__print_lock_name
(
parent
);
printk
(
" --> "
);
printk
(
KERN_CONT
" --> "
);
__print_lock_name
(
target
);
printk
(
"
\n\n
"
);
printk
(
KERN_CONT
"
\n\n
"
);
}
printk
(
" Possible unsafe locking scenario:
\n\n
"
);
...
...
@@ -1114,16 +1114,16 @@ print_circular_lock_scenario(struct held_lock *src,
printk
(
" ---- ----
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
target
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
parent
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
target
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
source
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
"
\n
*** DEADLOCK ***
\n\n
"
);
}
...
...
@@ -1359,22 +1359,22 @@ static void print_lock_class_header(struct lock_class *class, int depth)
printk
(
"%*s->"
,
depth
,
""
);
print_lock_name
(
class
);
printk
(
" ops: %lu"
,
class
->
ops
);
printk
(
" {
\n
"
);
printk
(
KERN_CONT
" ops: %lu"
,
class
->
ops
);
printk
(
KERN_CONT
" {
\n
"
);
for
(
bit
=
0
;
bit
<
LOCK_USAGE_STATES
;
bit
++
)
{
if
(
class
->
usage_mask
&
(
1
<<
bit
))
{
int
len
=
depth
;
len
+=
printk
(
"%*s %s"
,
depth
,
""
,
usage_str
[
bit
]);
len
+=
printk
(
" at:
\n
"
);
len
+=
printk
(
KERN_CONT
" at:
\n
"
);
print_stack_trace
(
class
->
usage_traces
+
bit
,
len
);
}
}
printk
(
"%*s }
\n
"
,
depth
,
""
);
printk
(
"%*s ... key at:
"
,
depth
,
""
);
print_ip_sym
((
unsigned
long
)
class
->
key
);
printk
(
"%*s ... key at:
[<%p>] %pS
\n
"
,
depth
,
""
,
class
->
key
,
class
->
key
);
}
/*
...
...
@@ -1437,11 +1437,11 @@ print_irq_lock_scenario(struct lock_list *safe_entry,
if
(
middle_class
!=
unsafe_class
)
{
printk
(
"Chain exists of:
\n
"
);
__print_lock_name
(
safe_class
);
printk
(
" --> "
);
printk
(
KERN_CONT
" --> "
);
__print_lock_name
(
middle_class
);
printk
(
" --> "
);
printk
(
KERN_CONT
" --> "
);
__print_lock_name
(
unsafe_class
);
printk
(
"
\n\n
"
);
printk
(
KERN_CONT
"
\n\n
"
);
}
printk
(
" Possible interrupt unsafe locking scenario:
\n\n
"
);
...
...
@@ -1449,18 +1449,18 @@ print_irq_lock_scenario(struct lock_list *safe_entry,
printk
(
" ---- ----
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
unsafe_class
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
" local_irq_disable();
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
safe_class
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
middle_class
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
" <Interrupt>
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
safe_class
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
"
\n
*** DEADLOCK ***
\n\n
"
);
}
...
...
@@ -1497,9 +1497,9 @@ print_bad_irq_dependency(struct task_struct *curr,
print_lock
(
prev
);
printk
(
"which would create a new lock dependency:
\n
"
);
print_lock_name
(
hlock_class
(
prev
));
printk
(
" ->"
);
printk
(
KERN_CONT
" ->"
);
print_lock_name
(
hlock_class
(
next
));
printk
(
"
\n
"
);
printk
(
KERN_CONT
"
\n
"
);
printk
(
"
\n
but this new dependency connects a %s-irq-safe lock:
\n
"
,
irqclass
);
...
...
@@ -1521,8 +1521,7 @@ print_bad_irq_dependency(struct task_struct *curr,
lockdep_print_held_locks
(
curr
);
printk
(
"
\n
the dependencies between %s-irq-safe lock"
,
irqclass
);
printk
(
" and the holding lock:
\n
"
);
printk
(
"
\n
the dependencies between %s-irq-safe lock and the holding lock:
\n
"
,
irqclass
);
if
(
!
save_trace
(
&
prev_root
->
trace
))
return
0
;
print_shortest_lock_dependencies
(
backwards_entry
,
prev_root
);
...
...
@@ -1694,10 +1693,10 @@ print_deadlock_scenario(struct held_lock *nxt,
printk
(
" ----
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
prev
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
next
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
"
\n
*** DEADLOCK ***
\n\n
"
);
printk
(
" May be due to missing lock nesting notation
\n\n
"
);
}
...
...
@@ -1891,9 +1890,9 @@ check_prev_add(struct task_struct *curr, struct held_lock *prev,
graph_unlock
();
printk
(
"
\n
new dependency: "
);
print_lock_name
(
hlock_class
(
prev
));
printk
(
" => "
);
printk
(
KERN_CONT
" => "
);
print_lock_name
(
hlock_class
(
next
));
printk
(
"
\n
"
);
printk
(
KERN_CONT
"
\n
"
);
dump_stack
();
return
graph_lock
();
}
...
...
@@ -2343,11 +2342,11 @@ print_usage_bug_scenario(struct held_lock *lock)
printk
(
" ----
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
class
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
" <Interrupt>
\n
"
);
printk
(
" lock("
);
__print_lock_name
(
class
);
printk
(
");
\n
"
);
printk
(
KERN_CONT
");
\n
"
);
printk
(
"
\n
*** DEADLOCK ***
\n\n
"
);
}
...
...
@@ -2522,14 +2521,18 @@ check_usage_backwards(struct task_struct *curr, struct held_lock *this,
void
print_irqtrace_events
(
struct
task_struct
*
curr
)
{
printk
(
"irq event stamp: %u
\n
"
,
curr
->
irq_events
);
printk
(
"hardirqs last enabled at (%u): "
,
curr
->
hardirq_enable_event
);
print_ip_sym
(
curr
->
hardirq_enable_ip
);
printk
(
"hardirqs last disabled at (%u): "
,
curr
->
hardirq_disable_event
);
print_ip_sym
(
curr
->
hardirq_disable_ip
);
printk
(
"softirqs last enabled at (%u): "
,
curr
->
softirq_enable_event
);
print_ip_sym
(
curr
->
softirq_enable_ip
);
printk
(
"softirqs last disabled at (%u): "
,
curr
->
softirq_disable_event
);
print_ip_sym
(
curr
->
softirq_disable_ip
);
printk
(
"hardirqs last enabled at (%u): [<%p>] %pS
\n
"
,
curr
->
hardirq_enable_event
,
(
void
*
)
curr
->
hardirq_enable_ip
,
(
void
*
)
curr
->
hardirq_enable_ip
);
printk
(
"hardirqs last disabled at (%u): [<%p>] %pS
\n
"
,
curr
->
hardirq_disable_event
,
(
void
*
)
curr
->
hardirq_disable_ip
,
(
void
*
)
curr
->
hardirq_disable_ip
);
printk
(
"softirqs last enabled at (%u): [<%p>] %pS
\n
"
,
curr
->
softirq_enable_event
,
(
void
*
)
curr
->
softirq_enable_ip
,
(
void
*
)
curr
->
softirq_enable_ip
);
printk
(
"softirqs last disabled at (%u): [<%p>] %pS
\n
"
,
curr
->
softirq_disable_event
,
(
void
*
)
curr
->
softirq_disable_ip
,
(
void
*
)
curr
->
softirq_disable_ip
);
}
static
int
HARDIRQ_verbose
(
struct
lock_class
*
class
)
...
...
@@ -3235,8 +3238,8 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
if
(
very_verbose
(
class
))
{
printk
(
"
\n
acquire class [%p] %s"
,
class
->
key
,
class
->
name
);
if
(
class
->
name_version
>
1
)
printk
(
"#%d"
,
class
->
name_version
);
printk
(
"
\n
"
);
printk
(
KERN_CONT
"#%d"
,
class
->
name_version
);
printk
(
KERN_CONT
"
\n
"
);
dump_stack
();
}
...
...
@@ -3378,7 +3381,7 @@ print_unlock_imbalance_bug(struct task_struct *curr, struct lockdep_map *lock,
printk
(
"%s/%d is trying to release lock ("
,
curr
->
comm
,
task_pid_nr
(
curr
));
print_lockdep_cache
(
lock
);
printk
(
") at:
\n
"
);
printk
(
KERN_CONT
") at:
\n
"
);
print_ip_sym
(
ip
);
printk
(
"but there are no more locks to release!
\n
"
);
printk
(
"
\n
other info that might help us debug this:
\n
"
);
...
...
@@ -3871,7 +3874,7 @@ print_lock_contention_bug(struct task_struct *curr, struct lockdep_map *lock,
printk
(
"%s/%d is trying to contend lock ("
,
curr
->
comm
,
task_pid_nr
(
curr
));
print_lockdep_cache
(
lock
);
printk
(
") at:
\n
"
);
printk
(
KERN_CONT
") at:
\n
"
);
print_ip_sym
(
ip
);
printk
(
"but there are no locks held!
\n
"
);
printk
(
"
\n
other info that might help us debug this:
\n
"
);
...
...
This diff is collapsed.
Click to expand it.
kernel/locking/rtmutex.c
浏览文件 @
821781a9
...
...
@@ -65,8 +65,72 @@ static inline void clear_rt_mutex_waiters(struct rt_mutex *lock)
static
void
fixup_rt_mutex_waiters
(
struct
rt_mutex
*
lock
)
{
if
(
!
rt_mutex_has_waiters
(
lock
))
clear_rt_mutex_waiters
(
lock
);
unsigned
long
owner
,
*
p
=
(
unsigned
long
*
)
&
lock
->
owner
;
if
(
rt_mutex_has_waiters
(
lock
))
return
;
/*
* The rbtree has no waiters enqueued, now make sure that the
* lock->owner still has the waiters bit set, otherwise the
* following can happen:
*
* CPU 0 CPU 1 CPU2
* l->owner=T1
* rt_mutex_lock(l)
* lock(l->lock)
* l->owner = T1 | HAS_WAITERS;
* enqueue(T2)
* boost()
* unlock(l->lock)
* block()
*
* rt_mutex_lock(l)
* lock(l->lock)
* l->owner = T1 | HAS_WAITERS;
* enqueue(T3)
* boost()
* unlock(l->lock)
* block()
* signal(->T2) signal(->T3)
* lock(l->lock)
* dequeue(T2)
* deboost()
* unlock(l->lock)
* lock(l->lock)
* dequeue(T3)
* ==> wait list is empty
* deboost()
* unlock(l->lock)
* lock(l->lock)
* fixup_rt_mutex_waiters()
* if (wait_list_empty(l) {
* l->owner = owner
* owner = l->owner & ~HAS_WAITERS;
* ==> l->owner = T1
* }
* lock(l->lock)
* rt_mutex_unlock(l) fixup_rt_mutex_waiters()
* if (wait_list_empty(l) {
* owner = l->owner & ~HAS_WAITERS;
* cmpxchg(l->owner, T1, NULL)
* ===> Success (l->owner = NULL)
*
* l->owner = owner
* ==> l->owner = T1
* }
*
* With the check for the waiter bit in place T3 on CPU2 will not
* overwrite. All tasks fiddling with the waiters bit are
* serialized by l->lock, so nothing else can modify the waiters
* bit. If the bit is set then nothing can change l->owner either
* so the simple RMW is safe. The cmpxchg() will simply fail if it
* happens in the middle of the RMW because the waiters bit is
* still set.
*/
owner
=
READ_ONCE
(
*
p
);
if
(
owner
&
RT_MUTEX_HAS_WAITERS
)
WRITE_ONCE
(
*
p
,
owner
&
~
RT_MUTEX_HAS_WAITERS
);
}
/*
...
...
This diff is collapsed.
Click to expand it.
kernel/locking/rtmutex_common.h
浏览文件 @
821781a9
...
...
@@ -75,8 +75,9 @@ task_top_pi_waiter(struct task_struct *p)
static
inline
struct
task_struct
*
rt_mutex_owner
(
struct
rt_mutex
*
lock
)
{
return
(
struct
task_struct
*
)
((
unsigned
long
)
lock
->
owner
&
~
RT_MUTEX_OWNER_MASKALL
);
unsigned
long
owner
=
(
unsigned
long
)
READ_ONCE
(
lock
->
owner
);
return
(
struct
task_struct
*
)
(
owner
&
~
RT_MUTEX_OWNER_MASKALL
);
}
/*
...
...
This diff is collapsed.
Click to expand it.
kernel/sched/auto_group.c
浏览文件 @
821781a9
...
...
@@ -212,6 +212,7 @@ int proc_sched_autogroup_set_nice(struct task_struct *p, int nice)
{
static
unsigned
long
next
=
INITIAL_JIFFIES
;
struct
autogroup
*
ag
;
unsigned
long
shares
;
int
err
;
if
(
nice
<
MIN_NICE
||
nice
>
MAX_NICE
)
...
...
@@ -230,9 +231,10 @@ int proc_sched_autogroup_set_nice(struct task_struct *p, int nice)
next
=
HZ
/
10
+
jiffies
;
ag
=
autogroup_task_get
(
p
);
shares
=
scale_load
(
sched_prio_to_weight
[
nice
+
20
]);
down_write
(
&
ag
->
lock
);
err
=
sched_group_set_shares
(
ag
->
tg
,
s
ched_prio_to_weight
[
nice
+
20
]
);
err
=
sched_group_set_shares
(
ag
->
tg
,
s
hares
);
if
(
!
err
)
ag
->
nice
=
nice
;
up_write
(
&
ag
->
lock
);
...
...
This diff is collapsed.
Click to expand it.
lib/locking-selftest.c
浏览文件 @
821781a9
...
...
@@ -980,23 +980,23 @@ static void dotest(void (*testcase_fn)(void), int expected, int lockclass_mask)
#ifndef CONFIG_PROVE_LOCKING
if
(
expected
==
FAILURE
&&
debug_locks
)
{
expected_testcase_failures
++
;
pr
intk
(
"failed|"
);
pr
_cont
(
"failed|"
);
}
else
#endif
if
(
debug_locks
!=
expected
)
{
unexpected_testcase_failures
++
;
pr
intk
(
"FAILED|"
);
pr
_cont
(
"FAILED|"
);
dump_stack
();
}
else
{
testcase_successes
++
;
pr
intk
(
" ok |"
);
pr
_cont
(
" ok |"
);
}
testcase_total
++
;
if
(
debug_locks_verbose
)
pr
intk
(
" lockclass mask: %x, debug_locks: %d, expected: %d
\n
"
,
pr
_cont
(
" lockclass mask: %x, debug_locks: %d, expected: %d
\n
"
,
lockclass_mask
,
debug_locks
,
expected
);
/*
* Some tests (e.g. double-unlock) might corrupt the preemption
...
...
@@ -1021,26 +1021,26 @@ static inline void print_testname(const char *testname)
#define DO_TESTCASE_1(desc, name, nr) \
print_testname(desc"/"#nr); \
dotest(name##_##nr, SUCCESS, LOCKTYPE_RWLOCK); \
pr
intk
("\n");
pr
_cont
("\n");
#define DO_TESTCASE_1B(desc, name, nr) \
print_testname(desc"/"#nr); \
dotest(name##_##nr, FAILURE, LOCKTYPE_RWLOCK); \
pr
intk
("\n");
pr
_cont
("\n");
#define DO_TESTCASE_3(desc, name, nr) \
print_testname(desc"/"#nr); \
dotest(name##_spin_##nr, FAILURE, LOCKTYPE_SPIN); \
dotest(name##_wlock_##nr, FAILURE, LOCKTYPE_RWLOCK); \
dotest(name##_rlock_##nr, SUCCESS, LOCKTYPE_RWLOCK); \
pr
intk
("\n");
pr
_cont
("\n");
#define DO_TESTCASE_3RW(desc, name, nr) \
print_testname(desc"/"#nr); \
dotest(name##_spin_##nr, FAILURE, LOCKTYPE_SPIN|LOCKTYPE_RWLOCK);\
dotest(name##_wlock_##nr, FAILURE, LOCKTYPE_RWLOCK); \
dotest(name##_rlock_##nr, SUCCESS, LOCKTYPE_RWLOCK); \
pr
intk
("\n");
pr
_cont
("\n");
#define DO_TESTCASE_6(desc, name) \
print_testname(desc); \
...
...
@@ -1050,7 +1050,7 @@ static inline void print_testname(const char *testname)
dotest(name##_mutex, FAILURE, LOCKTYPE_MUTEX); \
dotest(name##_wsem, FAILURE, LOCKTYPE_RWSEM); \
dotest(name##_rsem, FAILURE, LOCKTYPE_RWSEM); \
pr
intk
("\n");
pr
_cont
("\n");
#define DO_TESTCASE_6_SUCCESS(desc, name) \
print_testname(desc); \
...
...
@@ -1060,7 +1060,7 @@ static inline void print_testname(const char *testname)
dotest(name##_mutex, SUCCESS, LOCKTYPE_MUTEX); \
dotest(name##_wsem, SUCCESS, LOCKTYPE_RWSEM); \
dotest(name##_rsem, SUCCESS, LOCKTYPE_RWSEM); \
pr
intk
("\n");
pr
_cont
("\n");
/*
* 'read' variant: rlocks must not trigger.
...
...
@@ -1073,7 +1073,7 @@ static inline void print_testname(const char *testname)
dotest(name##_mutex, FAILURE, LOCKTYPE_MUTEX); \
dotest(name##_wsem, FAILURE, LOCKTYPE_RWSEM); \
dotest(name##_rsem, FAILURE, LOCKTYPE_RWSEM); \
pr
intk
("\n");
pr
_cont
("\n");
#define DO_TESTCASE_2I(desc, name, nr) \
DO_TESTCASE_1("hard-"desc, name##_hard, nr); \
...
...
@@ -1726,25 +1726,25 @@ static void ww_tests(void)
dotest
(
ww_test_fail_acquire
,
SUCCESS
,
LOCKTYPE_WW
);
dotest
(
ww_test_normal
,
SUCCESS
,
LOCKTYPE_WW
);
dotest
(
ww_test_unneeded_slow
,
FAILURE
,
LOCKTYPE_WW
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
print_testname
(
"ww contexts mixing"
);
dotest
(
ww_test_two_contexts
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_diff_class
,
FAILURE
,
LOCKTYPE_WW
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
print_testname
(
"finishing ww context"
);
dotest
(
ww_test_context_done_twice
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_context_unlock_twice
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_context_fini_early
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_context_lock_after_done
,
FAILURE
,
LOCKTYPE_WW
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
print_testname
(
"locking mismatches"
);
dotest
(
ww_test_object_unlock_twice
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_object_lock_unbalanced
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_object_lock_stale_context
,
FAILURE
,
LOCKTYPE_WW
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
print_testname
(
"EDEADLK handling"
);
dotest
(
ww_test_edeadlk_normal
,
SUCCESS
,
LOCKTYPE_WW
);
...
...
@@ -1757,11 +1757,11 @@ static void ww_tests(void)
dotest
(
ww_test_edeadlk_acquire_more_edeadlk_slow
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_edeadlk_acquire_wrong
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_edeadlk_acquire_wrong_slow
,
FAILURE
,
LOCKTYPE_WW
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
print_testname
(
"spinlock nest unlocked"
);
dotest
(
ww_test_spin_nest_unlocked
,
FAILURE
,
LOCKTYPE_WW
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
printk
(
" -----------------------------------------------------
\n
"
);
printk
(
" |block | try |context|
\n
"
);
...
...
@@ -1771,25 +1771,25 @@ static void ww_tests(void)
dotest
(
ww_test_context_block
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_context_try
,
SUCCESS
,
LOCKTYPE_WW
);
dotest
(
ww_test_context_context
,
SUCCESS
,
LOCKTYPE_WW
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
print_testname
(
"try"
);
dotest
(
ww_test_try_block
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_try_try
,
SUCCESS
,
LOCKTYPE_WW
);
dotest
(
ww_test_try_context
,
FAILURE
,
LOCKTYPE_WW
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
print_testname
(
"block"
);
dotest
(
ww_test_block_block
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_block_try
,
SUCCESS
,
LOCKTYPE_WW
);
dotest
(
ww_test_block_context
,
FAILURE
,
LOCKTYPE_WW
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
print_testname
(
"spinlock"
);
dotest
(
ww_test_spin_block
,
FAILURE
,
LOCKTYPE_WW
);
dotest
(
ww_test_spin_try
,
SUCCESS
,
LOCKTYPE_WW
);
dotest
(
ww_test_spin_context
,
FAILURE
,
LOCKTYPE_WW
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
}
void
locking_selftest
(
void
)
...
...
@@ -1829,32 +1829,32 @@ void locking_selftest(void)
printk
(
" --------------------------------------------------------------------------
\n
"
);
print_testname
(
"recursive read-lock"
);
pr
intk
(
" |"
);
pr
_cont
(
" |"
);
dotest
(
rlock_AA1
,
SUCCESS
,
LOCKTYPE_RWLOCK
);
pr
intk
(
" |"
);
pr
_cont
(
" |"
);
dotest
(
rsem_AA1
,
FAILURE
,
LOCKTYPE_RWSEM
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
print_testname
(
"recursive read-lock #2"
);
pr
intk
(
" |"
);
pr
_cont
(
" |"
);
dotest
(
rlock_AA1B
,
SUCCESS
,
LOCKTYPE_RWLOCK
);
pr
intk
(
" |"
);
pr
_cont
(
" |"
);
dotest
(
rsem_AA1B
,
FAILURE
,
LOCKTYPE_RWSEM
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
print_testname
(
"mixed read-write-lock"
);
pr
intk
(
" |"
);
pr
_cont
(
" |"
);
dotest
(
rlock_AA2
,
FAILURE
,
LOCKTYPE_RWLOCK
);
pr
intk
(
" |"
);
pr
_cont
(
" |"
);
dotest
(
rsem_AA2
,
FAILURE
,
LOCKTYPE_RWSEM
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
print_testname
(
"mixed write-read-lock"
);
pr
intk
(
" |"
);
pr
_cont
(
" |"
);
dotest
(
rlock_AA3
,
FAILURE
,
LOCKTYPE_RWLOCK
);
pr
intk
(
" |"
);
pr
_cont
(
" |"
);
dotest
(
rsem_AA3
,
FAILURE
,
LOCKTYPE_RWSEM
);
pr
intk
(
"
\n
"
);
pr
_cont
(
"
\n
"
);
printk
(
" --------------------------------------------------------------------------
\n
"
);
...
...
This diff is collapsed.
Click to expand it.
net/can/raw.c
浏览文件 @
821781a9
...
...
@@ -499,6 +499,9 @@ static int raw_setsockopt(struct socket *sock, int level, int optname,
if
(
optlen
%
sizeof
(
struct
can_filter
)
!=
0
)
return
-
EINVAL
;
if
(
optlen
>
CAN_RAW_FILTER_MAX
*
sizeof
(
struct
can_filter
))
return
-
EINVAL
;
count
=
optlen
/
sizeof
(
struct
can_filter
);
if
(
count
>
1
)
{
...
...
This diff is collapsed.
Click to expand it.
tools/objtool/arch/x86/decode.c
浏览文件 @
821781a9
...
...
@@ -99,7 +99,7 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,
break
;
case
0x8d
:
if
(
insn
.
rex_prefix
.
bytes
&&
if
(
insn
.
rex_prefix
.
n
bytes
&&
insn
.
rex_prefix
.
bytes
[
0
]
==
0x48
&&
insn
.
modrm
.
nbytes
&&
insn
.
modrm
.
bytes
[
0
]
==
0x2c
&&
insn
.
sib
.
nbytes
&&
insn
.
sib
.
bytes
[
0
]
==
0x24
)
...
...
This diff is collapsed.
Click to expand it.
tools/testing/nvdimm/Kbuild
浏览文件 @
821781a9
...
...
@@ -14,6 +14,7 @@ ldflags-y += --wrap=devm_memremap_pages
ldflags-y += --wrap=insert_resource
ldflags-y += --wrap=remove_resource
ldflags-y += --wrap=acpi_evaluate_object
ldflags-y += --wrap=acpi_evaluate_dsm
DRIVERS := ../../../drivers
NVDIMM_SRC := $(DRIVERS)/nvdimm
...
...
This diff is collapsed.
Click to expand it.
tools/testing/nvdimm/test/iomap.c
浏览文件 @
821781a9
...
...
@@ -26,14 +26,17 @@ static LIST_HEAD(iomap_head);
static
struct
iomap_ops
{
nfit_test_lookup_fn
nfit_test_lookup
;
nfit_test_evaluate_dsm_fn
evaluate_dsm
;
struct
list_head
list
;
}
iomap_ops
=
{
.
list
=
LIST_HEAD_INIT
(
iomap_ops
.
list
),
};
void
nfit_test_setup
(
nfit_test_lookup_fn
lookup
)
void
nfit_test_setup
(
nfit_test_lookup_fn
lookup
,
nfit_test_evaluate_dsm_fn
evaluate
)
{
iomap_ops
.
nfit_test_lookup
=
lookup
;
iomap_ops
.
evaluate_dsm
=
evaluate
;
list_add_rcu
(
&
iomap_ops
.
list
,
&
iomap_head
);
}
EXPORT_SYMBOL
(
nfit_test_setup
);
...
...
@@ -367,4 +370,22 @@ acpi_status __wrap_acpi_evaluate_object(acpi_handle handle, acpi_string path,
}
EXPORT_SYMBOL
(
__wrap_acpi_evaluate_object
);
union
acpi_object
*
__wrap_acpi_evaluate_dsm
(
acpi_handle
handle
,
const
u8
*
uuid
,
u64
rev
,
u64
func
,
union
acpi_object
*
argv4
)
{
union
acpi_object
*
obj
=
ERR_PTR
(
-
ENXIO
);
struct
iomap_ops
*
ops
;
rcu_read_lock
();
ops
=
list_first_or_null_rcu
(
&
iomap_head
,
typeof
(
*
ops
),
list
);
if
(
ops
)
obj
=
ops
->
evaluate_dsm
(
handle
,
uuid
,
rev
,
func
,
argv4
);
rcu_read_unlock
();
if
(
IS_ERR
(
obj
))
return
acpi_evaluate_dsm
(
handle
,
uuid
,
rev
,
func
,
argv4
);
return
obj
;
}
EXPORT_SYMBOL
(
__wrap_acpi_evaluate_dsm
);
MODULE_LICENSE
(
"GPL v2"
);
This diff is collapsed.
Click to expand it.
tools/testing/nvdimm/test/nfit.c
浏览文件 @
821781a9
...
...
@@ -23,6 +23,7 @@
#include <linux/sizes.h>
#include <linux/list.h>
#include <linux/slab.h>
#include <nd-core.h>
#include <nfit.h>
#include <nd.h>
#include "nfit_test.h"
...
...
@@ -1506,6 +1507,225 @@ static int nfit_test_blk_do_io(struct nd_blk_region *ndbr, resource_size_t dpa,
return
0
;
}
static
unsigned
long
nfit_ctl_handle
;
union
acpi_object
*
result
;
static
union
acpi_object
*
nfit_test_evaluate_dsm
(
acpi_handle
handle
,
const
u8
*
uuid
,
u64
rev
,
u64
func
,
union
acpi_object
*
argv4
)
{
if
(
handle
!=
&
nfit_ctl_handle
)
return
ERR_PTR
(
-
ENXIO
);
return
result
;
}
static
int
setup_result
(
void
*
buf
,
size_t
size
)
{
result
=
kmalloc
(
sizeof
(
union
acpi_object
)
+
size
,
GFP_KERNEL
);
if
(
!
result
)
return
-
ENOMEM
;
result
->
package
.
type
=
ACPI_TYPE_BUFFER
,
result
->
buffer
.
pointer
=
(
void
*
)
(
result
+
1
);
result
->
buffer
.
length
=
size
;
memcpy
(
result
->
buffer
.
pointer
,
buf
,
size
);
memset
(
buf
,
0
,
size
);
return
0
;
}
static
int
nfit_ctl_test
(
struct
device
*
dev
)
{
int
rc
,
cmd_rc
;
struct
nvdimm
*
nvdimm
;
struct
acpi_device
*
adev
;
struct
nfit_mem
*
nfit_mem
;
struct
nd_ars_record
*
record
;
struct
acpi_nfit_desc
*
acpi_desc
;
const
u64
test_val
=
0x0123456789abcdefULL
;
unsigned
long
mask
,
cmd_size
,
offset
;
union
{
struct
nd_cmd_get_config_size
cfg_size
;
struct
nd_cmd_ars_status
ars_stat
;
struct
nd_cmd_ars_cap
ars_cap
;
char
buf
[
sizeof
(
struct
nd_cmd_ars_status
)
+
sizeof
(
struct
nd_ars_record
)];
}
cmds
;
adev
=
devm_kzalloc
(
dev
,
sizeof
(
*
adev
),
GFP_KERNEL
);
if
(
!
adev
)
return
-
ENOMEM
;
*
adev
=
(
struct
acpi_device
)
{
.
handle
=
&
nfit_ctl_handle
,
.
dev
=
{
.
init_name
=
"test-adev"
,
},
};
acpi_desc
=
devm_kzalloc
(
dev
,
sizeof
(
*
acpi_desc
),
GFP_KERNEL
);
if
(
!
acpi_desc
)
return
-
ENOMEM
;
*
acpi_desc
=
(
struct
acpi_nfit_desc
)
{
.
nd_desc
=
{
.
cmd_mask
=
1UL
<<
ND_CMD_ARS_CAP
|
1UL
<<
ND_CMD_ARS_START
|
1UL
<<
ND_CMD_ARS_STATUS
|
1UL
<<
ND_CMD_CLEAR_ERROR
,
.
module
=
THIS_MODULE
,
.
provider_name
=
"ACPI.NFIT"
,
.
ndctl
=
acpi_nfit_ctl
,
},
.
dev
=
&
adev
->
dev
,
};
nfit_mem
=
devm_kzalloc
(
dev
,
sizeof
(
*
nfit_mem
),
GFP_KERNEL
);
if
(
!
nfit_mem
)
return
-
ENOMEM
;
mask
=
1UL
<<
ND_CMD_SMART
|
1UL
<<
ND_CMD_SMART_THRESHOLD
|
1UL
<<
ND_CMD_DIMM_FLAGS
|
1UL
<<
ND_CMD_GET_CONFIG_SIZE
|
1UL
<<
ND_CMD_GET_CONFIG_DATA
|
1UL
<<
ND_CMD_SET_CONFIG_DATA
|
1UL
<<
ND_CMD_VENDOR
;
*
nfit_mem
=
(
struct
nfit_mem
)
{
.
adev
=
adev
,
.
family
=
NVDIMM_FAMILY_INTEL
,
.
dsm_mask
=
mask
,
};
nvdimm
=
devm_kzalloc
(
dev
,
sizeof
(
*
nvdimm
),
GFP_KERNEL
);
if
(
!
nvdimm
)
return
-
ENOMEM
;
*
nvdimm
=
(
struct
nvdimm
)
{
.
provider_data
=
nfit_mem
,
.
cmd_mask
=
mask
,
.
dev
=
{
.
init_name
=
"test-dimm"
,
},
};
/* basic checkout of a typical 'get config size' command */
cmd_size
=
sizeof
(
cmds
.
cfg_size
);
cmds
.
cfg_size
=
(
struct
nd_cmd_get_config_size
)
{
.
status
=
0
,
.
config_size
=
SZ_128K
,
.
max_xfer
=
SZ_4K
,
};
rc
=
setup_result
(
cmds
.
buf
,
cmd_size
);
if
(
rc
)
return
rc
;
rc
=
acpi_nfit_ctl
(
&
acpi_desc
->
nd_desc
,
nvdimm
,
ND_CMD_GET_CONFIG_SIZE
,
cmds
.
buf
,
cmd_size
,
&
cmd_rc
);
if
(
rc
<
0
||
cmd_rc
||
cmds
.
cfg_size
.
status
!=
0
||
cmds
.
cfg_size
.
config_size
!=
SZ_128K
||
cmds
.
cfg_size
.
max_xfer
!=
SZ_4K
)
{
dev_dbg
(
dev
,
"%s: failed at: %d rc: %d cmd_rc: %d
\n
"
,
__func__
,
__LINE__
,
rc
,
cmd_rc
);
return
-
EIO
;
}
/* test ars_status with zero output */
cmd_size
=
offsetof
(
struct
nd_cmd_ars_status
,
address
);
cmds
.
ars_stat
=
(
struct
nd_cmd_ars_status
)
{
.
out_length
=
0
,
};
rc
=
setup_result
(
cmds
.
buf
,
cmd_size
);
if
(
rc
)
return
rc
;
rc
=
acpi_nfit_ctl
(
&
acpi_desc
->
nd_desc
,
NULL
,
ND_CMD_ARS_STATUS
,
cmds
.
buf
,
cmd_size
,
&
cmd_rc
);
if
(
rc
<
0
||
cmd_rc
)
{
dev_dbg
(
dev
,
"%s: failed at: %d rc: %d cmd_rc: %d
\n
"
,
__func__
,
__LINE__
,
rc
,
cmd_rc
);
return
-
EIO
;
}
/* test ars_cap with benign extended status */
cmd_size
=
sizeof
(
cmds
.
ars_cap
);
cmds
.
ars_cap
=
(
struct
nd_cmd_ars_cap
)
{
.
status
=
ND_ARS_PERSISTENT
<<
16
,
};
offset
=
offsetof
(
struct
nd_cmd_ars_cap
,
status
);
rc
=
setup_result
(
cmds
.
buf
+
offset
,
cmd_size
-
offset
);
if
(
rc
)
return
rc
;
rc
=
acpi_nfit_ctl
(
&
acpi_desc
->
nd_desc
,
NULL
,
ND_CMD_ARS_CAP
,
cmds
.
buf
,
cmd_size
,
&
cmd_rc
);
if
(
rc
<
0
||
cmd_rc
)
{
dev_dbg
(
dev
,
"%s: failed at: %d rc: %d cmd_rc: %d
\n
"
,
__func__
,
__LINE__
,
rc
,
cmd_rc
);
return
-
EIO
;
}
/* test ars_status with 'status' trimmed from 'out_length' */
cmd_size
=
sizeof
(
cmds
.
ars_stat
)
+
sizeof
(
struct
nd_ars_record
);
cmds
.
ars_stat
=
(
struct
nd_cmd_ars_status
)
{
.
out_length
=
cmd_size
-
4
,
};
record
=
&
cmds
.
ars_stat
.
records
[
0
];
*
record
=
(
struct
nd_ars_record
)
{
.
length
=
test_val
,
};
rc
=
setup_result
(
cmds
.
buf
,
cmd_size
);
if
(
rc
)
return
rc
;
rc
=
acpi_nfit_ctl
(
&
acpi_desc
->
nd_desc
,
NULL
,
ND_CMD_ARS_STATUS
,
cmds
.
buf
,
cmd_size
,
&
cmd_rc
);
if
(
rc
<
0
||
cmd_rc
||
record
->
length
!=
test_val
)
{
dev_dbg
(
dev
,
"%s: failed at: %d rc: %d cmd_rc: %d
\n
"
,
__func__
,
__LINE__
,
rc
,
cmd_rc
);
return
-
EIO
;
}
/* test ars_status with 'Output (Size)' including 'status' */
cmd_size
=
sizeof
(
cmds
.
ars_stat
)
+
sizeof
(
struct
nd_ars_record
);
cmds
.
ars_stat
=
(
struct
nd_cmd_ars_status
)
{
.
out_length
=
cmd_size
,
};
record
=
&
cmds
.
ars_stat
.
records
[
0
];
*
record
=
(
struct
nd_ars_record
)
{
.
length
=
test_val
,
};
rc
=
setup_result
(
cmds
.
buf
,
cmd_size
);
if
(
rc
)
return
rc
;
rc
=
acpi_nfit_ctl
(
&
acpi_desc
->
nd_desc
,
NULL
,
ND_CMD_ARS_STATUS
,
cmds
.
buf
,
cmd_size
,
&
cmd_rc
);
if
(
rc
<
0
||
cmd_rc
||
record
->
length
!=
test_val
)
{
dev_dbg
(
dev
,
"%s: failed at: %d rc: %d cmd_rc: %d
\n
"
,
__func__
,
__LINE__
,
rc
,
cmd_rc
);
return
-
EIO
;
}
/* test extended status for get_config_size results in failure */
cmd_size
=
sizeof
(
cmds
.
cfg_size
);
cmds
.
cfg_size
=
(
struct
nd_cmd_get_config_size
)
{
.
status
=
1
<<
16
,
};
rc
=
setup_result
(
cmds
.
buf
,
cmd_size
);
if
(
rc
)
return
rc
;
rc
=
acpi_nfit_ctl
(
&
acpi_desc
->
nd_desc
,
nvdimm
,
ND_CMD_GET_CONFIG_SIZE
,
cmds
.
buf
,
cmd_size
,
&
cmd_rc
);
if
(
rc
<
0
||
cmd_rc
>=
0
)
{
dev_dbg
(
dev
,
"%s: failed at: %d rc: %d cmd_rc: %d
\n
"
,
__func__
,
__LINE__
,
rc
,
cmd_rc
);
return
-
EIO
;
}
return
0
;
}
static
int
nfit_test_probe
(
struct
platform_device
*
pdev
)
{
struct
nvdimm_bus_descriptor
*
nd_desc
;
...
...
@@ -1516,6 +1736,12 @@ static int nfit_test_probe(struct platform_device *pdev)
union
acpi_object
*
obj
;
int
rc
;
if
(
strcmp
(
dev_name
(
&
pdev
->
dev
),
"nfit_test.0"
)
==
0
)
{
rc
=
nfit_ctl_test
(
&
pdev
->
dev
);
if
(
rc
)
return
rc
;
}
nfit_test
=
to_nfit_test
(
&
pdev
->
dev
);
/* common alloc */
...
...
@@ -1639,11 +1865,13 @@ static __init int nfit_test_init(void)
{
int
rc
,
i
;
nfit_test_dimm
=
class_create
(
THIS_MODULE
,
"nfit_test_dimm"
);
if
(
IS_ERR
(
nfit_test_dimm
))
return
PTR_ERR
(
nfit_test_dimm
);
nfit_test_setup
(
nfit_test_lookup
,
nfit_test_evaluate_dsm
);
nfit_test_setup
(
nfit_test_lookup
);
nfit_test_dimm
=
class_create
(
THIS_MODULE
,
"nfit_test_dimm"
);
if
(
IS_ERR
(
nfit_test_dimm
))
{
rc
=
PTR_ERR
(
nfit_test_dimm
);
goto
err_register
;
}
for
(
i
=
0
;
i
<
NUM_NFITS
;
i
++
)
{
struct
nfit_test
*
nfit_test
;
...
...
This diff is collapsed.
Click to expand it.
tools/testing/nvdimm/test/nfit_test.h
浏览文件 @
821781a9
...
...
@@ -31,11 +31,17 @@ struct nfit_test_resource {
void
*
buf
;
};
union
acpi_object
;
typedef
void
*
acpi_handle
;
typedef
struct
nfit_test_resource
*
(
*
nfit_test_lookup_fn
)(
resource_size_t
);
typedef
union
acpi_object
*
(
*
nfit_test_evaluate_dsm_fn
)(
acpi_handle
handle
,
const
u8
*
uuid
,
u64
rev
,
u64
func
,
union
acpi_object
*
argv4
);
void
__iomem
*
__wrap_ioremap_nocache
(
resource_size_t
offset
,
unsigned
long
size
);
void
__wrap_iounmap
(
volatile
void
__iomem
*
addr
);
void
nfit_test_setup
(
nfit_test_lookup_fn
lookup
);
void
nfit_test_setup
(
nfit_test_lookup_fn
lookup
,
nfit_test_evaluate_dsm_fn
evaluate
);
void
nfit_test_teardown
(
void
);
struct
nfit_test_resource
*
get_nfit_res
(
resource_size_t
resource
);
#endif
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
新手
引导
客服
返回
顶部