diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig index b476b105ee103a0f626392044d646a4d6a591891..460fcdcca62b91a453d7945b077d8b421a8d4e34 100644 --- a/arch/arm64/configs/openeuler_defconfig +++ b/arch/arm64/configs/openeuler_defconfig @@ -6090,6 +6090,7 @@ CONFIG_USB4=m # Vendor Hooks # CONFIG_VENDOR_HOOKS=y +CONFIG_VENDOR_BOND_HOOKS=y # end of Vendor Hooks CONFIG_LIBNVDIMM=m diff --git a/arch/x86/configs/openeuler_defconfig b/arch/x86/configs/openeuler_defconfig index 6c0f50e766a76969538a9f4eed019304f56de3e6..64afe7021c45692da862b0664b63f6ed7beef9d6 100644 --- a/arch/x86/configs/openeuler_defconfig +++ b/arch/x86/configs/openeuler_defconfig @@ -7183,6 +7183,7 @@ CONFIG_USB4=m # Vendor Hooks # CONFIG_VENDOR_HOOKS=y +CONFIG_VENDOR_BOND_HOOKS=y # end of Vendor Hooks CONFIG_LIBNVDIMM=m diff --git a/drivers/hooks/Kconfig b/drivers/hooks/Kconfig index 1c0e33ef9a564971365d906d4b2303a75fdb84a6..6a00168e67ad6c38c44fe5032929ed0f3a4d200f 100644 --- a/drivers/hooks/Kconfig +++ b/drivers/hooks/Kconfig @@ -10,4 +10,14 @@ config VENDOR_HOOKS Allow vendor modules to attach to tracepoint "hooks" defined via DECLARE_HOOK or DECLARE_RESTRICTED_HOOK. +config VENDOR_BOND_HOOKS + bool "Ethernet Bonding driver Vendor Hooks" + depends on VENDOR_HOOKS && BONDING + default n + help + Enable ethernet bonding driver vendor hooks + + Allow vendor modules to attach bonding driver hooks defined via + DECLARE_HOOK or DECLARE_RESTRICTED_HOOK. + endmenu diff --git a/drivers/hooks/vendor_hooks.c b/drivers/hooks/vendor_hooks.c index 359989d1bb32e39f9b656a8e1091e1250a55645e..85bda58159f69f9a0f3bb5555d09d3ba84ac2d64 100644 --- a/drivers/hooks/vendor_hooks.c +++ b/drivers/hooks/vendor_hooks.c @@ -8,9 +8,13 @@ #define CREATE_TRACE_POINTS #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event * associated with them) to allow external modules to probe them. */ +#ifdef CONFIG_VENDOR_BOND_HOOKS +EXPORT_TRACEPOINT_SYMBOL_GPL(vendor_bond_check_dev_link); +#endif diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index c065da5b6ca25c8372aaa8da241ea63444057c0f..4804264c012fdcba3001178a4124491593b1ce25 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -83,6 +83,7 @@ #include #include #include +#include #include "bonding_priv.h" @@ -2415,6 +2416,10 @@ static int bond_miimon_inspect(struct bonding *bond) link_state = bond_check_dev_link(bond, slave->dev, 0); +#ifdef CONFIG_VENDOR_BOND_HOOKS + trace_vendor_bond_check_dev_link(bond, slave, &link_state); +#endif + switch (slave->link) { case BOND_LINK_UP: if (link_state) diff --git a/include/trace/hooks/bonding.h b/include/trace/hooks/bonding.h new file mode 100644 index 0000000000000000000000000000000000000000..fc77d6da3a19df50de410f8a97a16d68fbf71eec --- /dev/null +++ b/include/trace/hooks/bonding.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Ethernet Bonding driver Vendor Hooks + * + * Copyright (c) 2022, Huawei Tech. Co., Ltd. + */ + +#ifdef CONFIG_VENDOR_BOND_HOOKS + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM bonding + +#define TRACE_INCLUDE_PATH trace/hooks +#if !defined(_TRACE_HOOK_BONDING_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_BONDING_H +#include +#include + +struct bonding; +struct slave; +DECLARE_HOOK(vendor_bond_check_dev_link, + TP_PROTO(const struct bonding *bond, const struct slave *slave, int *state), + TP_ARGS(bond, slave, state)); + +#endif +/* This part must be outside protection */ +#include + +#endif