123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741 |
- From 74243154052af635ee9ce9d07aab273ce219c855 Mon Sep 17 00:00:00 2001
- From: Biwen Li <[email protected]>
- Date: Thu, 13 Dec 2018 13:23:52 +0800
- Subject: [PATCH] core-linux: support layerscape
- This is an integrated patch of core-linux for layerscape.
- Signed-off-by: Abhijit Ayarekar <[email protected]>
- Signed-off-by: Amrita Kumari <[email protected]>
- Signed-off-by: Ashish Kumar <[email protected]>
- Signed-off-by: Camelia Groza <[email protected]>
- Signed-off-by: Christoph Hellwig <[email protected]>
- Signed-off-by: David Ahern <[email protected]>
- Signed-off-by: David S. Miller <[email protected]>
- Signed-off-by: Guanhua Gao <[email protected]>
- Signed-off-by: Jiri Pirko <[email protected]>
- Signed-off-by: Joel Fernandes <[email protected]>
- Signed-off-by: Li Yang <[email protected]>
- Signed-off-by: Madalin Bucur <[email protected]>
- Signed-off-by: Madalin Bucur <[email protected]>
- Signed-off-by: Nikhil Badola <[email protected]>
- Signed-off-by: Nipun Gupta <[email protected]>
- Signed-off-by: Ramneek Mehresh <[email protected]>
- Signed-off-by: Robin Murphy <[email protected]>
- Signed-off-by: Suresh Gupta <[email protected]>
- Signed-off-by: Yangbo Lu <[email protected]>
- Signed-off-by: yinbo.zhu <[email protected]>
- Signed-off-by: Biwen Li <[email protected]>
- ---
- drivers/base/dma-mapping.c | 7 ++
- drivers/net/bonding/bond_main.c | 5 +-
- drivers/net/bonding/bond_options.c | 2 +-
- drivers/net/team/team.c | 3 +-
- drivers/net/vrf.c | 3 +-
- drivers/of/device.c | 13 +++-
- drivers/soc/fsl/guts.c | 3 +
- include/linux/fsl_devices.h | 2 +
- include/linux/netdevice.h | 13 +++-
- include/linux/skbuff.h | 2 +
- include/net/bonding.h | 3 +-
- net/batman-adv/soft-interface.c | 3 +-
- net/bridge/br_device.c | 3 +-
- net/core/dev.c | 81 ++++++++++++++---------
- net/core/rtnetlink.c | 10 +--
- net/core/skbuff.c | 29 +++++++-
- samples/bpf/Makefile | 12 +++-
- samples/bpf/map_perf_test_kern.c | 2 +-
- samples/bpf/map_perf_test_user.c | 2 +-
- tools/testing/selftests/bpf/bpf_helpers.h | 56 ++++++++++++++--
- 20 files changed, 193 insertions(+), 61 deletions(-)
- --- a/drivers/base/dma-mapping.c
- +++ b/drivers/base/dma-mapping.c
- @@ -335,6 +335,7 @@ void dma_common_free_remap(void *cpu_add
- * Common configuration to enable DMA API use for a device
- */
- #include <linux/pci.h>
- +#include <linux/fsl/mc.h>
-
- int dma_configure(struct device *dev)
- {
- @@ -350,6 +351,12 @@ int dma_configure(struct device *dev)
- dma_dev = dma_dev->parent;
- }
-
- + if (dev_is_fsl_mc(dev)) {
- + dma_dev = dev;
- + while (dev_is_fsl_mc(dma_dev))
- + dma_dev = dma_dev->parent;
- + }
- +
- if (dma_dev->of_node) {
- ret = of_dma_configure(dev, dma_dev->of_node);
- } else if (has_acpi_companion(dma_dev)) {
- --- a/drivers/net/bonding/bond_main.c
- +++ b/drivers/net/bonding/bond_main.c
- @@ -1337,7 +1337,8 @@ void bond_lower_state_changed(struct sla
- }
-
- /* enslave device <slave> to bond device <master> */
- -int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
- +int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
- + struct netlink_ext_ack *extack)
- {
- struct bonding *bond = netdev_priv(bond_dev);
- const struct net_device_ops *slave_ops = slave_dev->netdev_ops;
- @@ -3509,7 +3510,7 @@ static int bond_do_ioctl(struct net_devi
- switch (cmd) {
- case BOND_ENSLAVE_OLD:
- case SIOCBONDENSLAVE:
- - res = bond_enslave(bond_dev, slave_dev);
- + res = bond_enslave(bond_dev, slave_dev, NULL);
- break;
- case BOND_RELEASE_OLD:
- case SIOCBONDRELEASE:
- --- a/drivers/net/bonding/bond_options.c
- +++ b/drivers/net/bonding/bond_options.c
- @@ -1389,7 +1389,7 @@ static int bond_option_slaves_set(struct
- switch (command[0]) {
- case '+':
- netdev_dbg(bond->dev, "Adding slave %s\n", dev->name);
- - ret = bond_enslave(bond->dev, dev);
- + ret = bond_enslave(bond->dev, dev, NULL);
- break;
-
- case '-':
- --- a/drivers/net/team/team.c
- +++ b/drivers/net/team/team.c
- @@ -1932,7 +1932,8 @@ static int team_netpoll_setup(struct net
- }
- #endif
-
- -static int team_add_slave(struct net_device *dev, struct net_device *port_dev)
- +static int team_add_slave(struct net_device *dev, struct net_device *port_dev,
- + struct netlink_ext_ack *extack)
- {
- struct team *team = netdev_priv(dev);
- int err;
- --- a/drivers/net/vrf.c
- +++ b/drivers/net/vrf.c
- @@ -791,7 +791,8 @@ err:
- return ret;
- }
-
- -static int vrf_add_slave(struct net_device *dev, struct net_device *port_dev)
- +static int vrf_add_slave(struct net_device *dev, struct net_device *port_dev,
- + struct netlink_ext_ack *extack)
- {
- if (netif_is_l3_master(port_dev) || netif_is_l3_slave(port_dev))
- return -EINVAL;
- --- a/drivers/of/device.c
- +++ b/drivers/of/device.c
- @@ -15,6 +15,9 @@
-
- #include <asm/errno.h>
- #include "of_private.h"
- +#ifdef CONFIG_FSL_MC_BUS
- +#include <linux/fsl/mc.h>
- +#endif
-
- /**
- * of_match_device - Tell if a struct device matches an of_device_id list
- @@ -105,6 +108,9 @@ int of_dma_configure(struct device *dev,
- #ifdef CONFIG_ARM_AMBA
- dev->bus != &amba_bustype &&
- #endif
- +#ifdef CONFIG_FSL_MC_BUS
- + dev->bus != &fsl_mc_bus_type &&
- +#endif
- dev->bus != &platform_bus_type)
- return ret == -ENODEV ? 0 : ret;
-
- @@ -155,7 +161,12 @@ int of_dma_configure(struct device *dev,
- dev->coherent_dma_mask &= mask;
- *dev->dma_mask &= mask;
-
- - coherent = of_dma_is_coherent(np);
- +#ifdef CONFIG_FSL_MC_BUS
- + if (dev_is_fsl_mc(dev))
- + coherent = fsl_mc_is_dev_coherent(dev);
- + else
- +#endif
- + coherent = of_dma_is_coherent(np);
- dev_dbg(dev, "device is%sdma coherent\n",
- coherent ? " " : " not ");
-
- --- a/drivers/soc/fsl/guts.c
- +++ b/drivers/soc/fsl/guts.c
- @@ -213,6 +213,9 @@ static const struct of_device_id fsl_gut
- { .compatible = "fsl,ls1021a-dcfg", },
- { .compatible = "fsl,ls1043a-dcfg", },
- { .compatible = "fsl,ls2080a-dcfg", },
- + { .compatible = "fsl,ls1088a-dcfg", },
- + { .compatible = "fsl,ls1012a-dcfg", },
- + { .compatible = "fsl,ls1046a-dcfg", },
- {}
- };
- MODULE_DEVICE_TABLE(of, fsl_guts_of_match);
- --- a/include/linux/fsl_devices.h
- +++ b/include/linux/fsl_devices.h
- @@ -99,7 +99,9 @@ struct fsl_usb2_platform_data {
- unsigned suspended:1;
- unsigned already_suspended:1;
- unsigned has_fsl_erratum_a007792:1;
- + unsigned has_fsl_erratum_14:1;
- unsigned has_fsl_erratum_a005275:1;
- + unsigned has_fsl_erratum_a006918:1;
- unsigned has_fsl_erratum_a005697:1;
- unsigned check_phy_clk_valid:1;
-
- --- a/include/linux/netdevice.h
- +++ b/include/linux/netdevice.h
- @@ -1260,7 +1260,8 @@ struct net_device_ops {
- u32 flow_id);
- #endif
- int (*ndo_add_slave)(struct net_device *dev,
- - struct net_device *slave_dev);
- + struct net_device *slave_dev,
- + struct netlink_ext_ack *extack);
- int (*ndo_del_slave)(struct net_device *dev,
- struct net_device *slave_dev);
- netdev_features_t (*ndo_fix_features)(struct net_device *dev,
- @@ -2341,7 +2342,8 @@ int register_netdevice_notifier(struct n
- int unregister_netdevice_notifier(struct notifier_block *nb);
-
- struct netdev_notifier_info {
- - struct net_device *dev;
- + struct net_device *dev;
- + struct netlink_ext_ack *extack;
- };
-
- struct netdev_notifier_info_ext {
- @@ -2373,6 +2375,7 @@ static inline void netdev_notifier_info_
- struct net_device *dev)
- {
- info->dev = dev;
- + info->extack = NULL;
- }
-
- static inline struct net_device *
- @@ -2381,6 +2384,12 @@ netdev_notifier_info_to_dev(const struct
- return info->dev;
- }
-
- +static inline struct netlink_ext_ack *
- +netdev_notifier_info_to_extack(const struct netdev_notifier_info *info)
- +{
- + return info->extack;
- +}
- +
- int call_netdevice_notifiers(unsigned long val, struct net_device *dev);
-
-
- --- a/include/linux/skbuff.h
- +++ b/include/linux/skbuff.h
- @@ -964,6 +964,7 @@ void kfree_skb_list(struct sk_buff *segs
- void skb_tx_error(struct sk_buff *skb);
- void consume_skb(struct sk_buff *skb);
- void __consume_stateless_skb(struct sk_buff *skb);
- +void skb_recycle(struct sk_buff *skb);
- void __kfree_skb(struct sk_buff *skb);
- extern struct kmem_cache *skbuff_head_cache;
-
- @@ -3294,6 +3295,7 @@ static inline void skb_free_datagram_loc
- }
- int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags);
- int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len);
- +void copy_skb_header(struct sk_buff *new, const struct sk_buff *old);
- int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len);
- __wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to,
- int len, __wsum csum);
- --- a/include/net/bonding.h
- +++ b/include/net/bonding.h
- @@ -592,7 +592,8 @@ void bond_destroy_sysfs(struct bond_net
- void bond_prepare_sysfs_group(struct bonding *bond);
- int bond_sysfs_slave_add(struct slave *slave);
- void bond_sysfs_slave_del(struct slave *slave);
- -int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev);
- +int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
- + struct netlink_ext_ack *extack);
- int bond_release(struct net_device *bond_dev, struct net_device *slave_dev);
- u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb);
- int bond_set_carrier(struct bonding *bond);
- --- a/net/batman-adv/soft-interface.c
- +++ b/net/batman-adv/soft-interface.c
- @@ -872,7 +872,8 @@ free_bat_counters:
- * Return: 0 if successful or error otherwise.
- */
- static int batadv_softif_slave_add(struct net_device *dev,
- - struct net_device *slave_dev)
- + struct net_device *slave_dev,
- + struct netlink_ext_ack *extack)
- {
- struct batadv_hard_iface *hard_iface;
- struct net *net = dev_net(dev);
- --- a/net/bridge/br_device.c
- +++ b/net/bridge/br_device.c
- @@ -324,7 +324,8 @@ void br_netpoll_disable(struct net_bridg
-
- #endif
-
- -static int br_add_slave(struct net_device *dev, struct net_device *slave_dev)
- +static int br_add_slave(struct net_device *dev, struct net_device *slave_dev,
- + struct netlink_ext_ack *extack)
-
- {
- struct net_bridge *br = netdev_priv(dev);
- --- a/net/core/dev.c
- +++ b/net/core/dev.c
- @@ -162,7 +162,6 @@ static struct list_head offload_base __r
-
- static int netif_rx_internal(struct sk_buff *skb);
- static int call_netdevice_notifiers_info(unsigned long val,
- - struct net_device *dev,
- struct netdev_notifier_info *info);
- static struct napi_struct *napi_by_id(unsigned int napi_id);
-
- @@ -1312,10 +1311,11 @@ EXPORT_SYMBOL(netdev_features_change);
- void netdev_state_change(struct net_device *dev)
- {
- if (dev->flags & IFF_UP) {
- - struct netdev_notifier_change_info change_info;
- + struct netdev_notifier_change_info change_info = {
- + .info.dev = dev,
- + };
-
- - change_info.flags_changed = 0;
- - call_netdevice_notifiers_info(NETDEV_CHANGE, dev,
- + call_netdevice_notifiers_info(NETDEV_CHANGE,
- &change_info.info);
- rtmsg_ifinfo(RTM_NEWLINK, dev, 0, GFP_KERNEL);
- }
- @@ -1536,9 +1536,10 @@ EXPORT_SYMBOL(dev_disable_lro);
- static int call_netdevice_notifier(struct notifier_block *nb, unsigned long val,
- struct net_device *dev)
- {
- - struct netdev_notifier_info info;
- + struct netdev_notifier_info info = {
- + .dev = dev,
- + };
-
- - netdev_notifier_info_init(&info, dev);
- return nb->notifier_call(nb, val, &info);
- }
-
- @@ -1663,11 +1664,9 @@ EXPORT_SYMBOL(unregister_netdevice_notif
- */
-
- static int call_netdevice_notifiers_info(unsigned long val,
- - struct net_device *dev,
- struct netdev_notifier_info *info)
- {
- ASSERT_RTNL();
- - netdev_notifier_info_init(info, dev);
- return raw_notifier_call_chain(&netdev_chain, val, info);
- }
-
- @@ -1682,9 +1681,11 @@ static int call_netdevice_notifiers_info
-
- int call_netdevice_notifiers(unsigned long val, struct net_device *dev)
- {
- - struct netdev_notifier_info info;
- + struct netdev_notifier_info info = {
- + .dev = dev,
- + };
-
- - return call_netdevice_notifiers_info(val, dev, &info);
- + return call_netdevice_notifiers_info(val, &info);
- }
- EXPORT_SYMBOL(call_netdevice_notifiers);
-
- @@ -1707,7 +1708,7 @@ static int call_netdevice_notifiers_mtu(
-
- BUILD_BUG_ON(offsetof(struct netdev_notifier_info_ext, info) != 0);
-
- - return call_netdevice_notifiers_info(val, dev, &info.info);
- + return call_netdevice_notifiers_info(val, &info.info);
- }
-
- #ifdef CONFIG_NET_INGRESS
- @@ -6338,7 +6339,15 @@ static int __netdev_upper_dev_link(struc
- struct net_device *upper_dev, bool master,
- void *upper_priv, void *upper_info)
- {
- - struct netdev_notifier_changeupper_info changeupper_info;
- + struct netdev_notifier_changeupper_info changeupper_info = {
- + .info = {
- + .dev = dev,
- + },
- + .upper_dev = upper_dev,
- + .master = master,
- + .linking = true,
- + .upper_info = upper_info,
- + };
- int ret = 0;
-
- ASSERT_RTNL();
- @@ -6356,12 +6365,7 @@ static int __netdev_upper_dev_link(struc
- if (master && netdev_master_upper_dev_get(dev))
- return -EBUSY;
-
- - changeupper_info.upper_dev = upper_dev;
- - changeupper_info.master = master;
- - changeupper_info.linking = true;
- - changeupper_info.upper_info = upper_info;
- -
- - ret = call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER, dev,
- + ret = call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER,
- &changeupper_info.info);
- ret = notifier_to_errno(ret);
- if (ret)
- @@ -6373,7 +6377,7 @@ static int __netdev_upper_dev_link(struc
- return ret;
-
- netdev_update_addr_mask(dev);
- - ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
- + ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
- &changeupper_info.info);
- ret = notifier_to_errno(ret);
- if (ret)
- @@ -6437,21 +6441,25 @@ EXPORT_SYMBOL(netdev_master_upper_dev_li
- void netdev_upper_dev_unlink(struct net_device *dev,
- struct net_device *upper_dev)
- {
- - struct netdev_notifier_changeupper_info changeupper_info;
- + struct netdev_notifier_changeupper_info changeupper_info = {
- + .info = {
- + .dev = dev,
- + },
- + .upper_dev = upper_dev,
- + .linking = false,
- + };
-
- ASSERT_RTNL();
-
- - changeupper_info.upper_dev = upper_dev;
- changeupper_info.master = netdev_master_upper_dev_get(dev) == upper_dev;
- - changeupper_info.linking = false;
-
- - call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER, dev,
- + call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER,
- &changeupper_info.info);
-
- __netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
-
- netdev_update_addr_mask(dev);
- - call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
- + call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
- &changeupper_info.info);
- }
- EXPORT_SYMBOL(netdev_upper_dev_unlink);
- @@ -6467,11 +6475,13 @@ EXPORT_SYMBOL(netdev_upper_dev_unlink);
- void netdev_bonding_info_change(struct net_device *dev,
- struct netdev_bonding_info *bonding_info)
- {
- - struct netdev_notifier_bonding_info info;
- + struct netdev_notifier_bonding_info info = {
- + .info.dev = dev,
- + };
-
- memcpy(&info.bonding_info, bonding_info,
- sizeof(struct netdev_bonding_info));
- - call_netdevice_notifiers_info(NETDEV_BONDING_INFO, dev,
- + call_netdevice_notifiers_info(NETDEV_BONDING_INFO,
- &info.info);
- }
- EXPORT_SYMBOL(netdev_bonding_info_change);
- @@ -6597,11 +6607,13 @@ EXPORT_SYMBOL(dev_get_nest_level);
- void netdev_lower_state_changed(struct net_device *lower_dev,
- void *lower_state_info)
- {
- - struct netdev_notifier_changelowerstate_info changelowerstate_info;
- + struct netdev_notifier_changelowerstate_info changelowerstate_info = {
- + .info.dev = lower_dev,
- + };
-
- ASSERT_RTNL();
- changelowerstate_info.lower_state_info = lower_state_info;
- - call_netdevice_notifiers_info(NETDEV_CHANGELOWERSTATE, lower_dev,
- + call_netdevice_notifiers_info(NETDEV_CHANGELOWERSTATE,
- &changelowerstate_info.info);
- }
- EXPORT_SYMBOL(netdev_lower_state_changed);
- @@ -6892,11 +6904,14 @@ void __dev_notify_flags(struct net_devic
-
- if (dev->flags & IFF_UP &&
- (changes & ~(IFF_UP | IFF_PROMISC | IFF_ALLMULTI | IFF_VOLATILE))) {
- - struct netdev_notifier_change_info change_info;
- + struct netdev_notifier_change_info change_info = {
- + .info = {
- + .dev = dev,
- + },
- + .flags_changed = changes,
- + };
-
- - change_info.flags_changed = changes;
- - call_netdevice_notifiers_info(NETDEV_CHANGE, dev,
- - &change_info.info);
- + call_netdevice_notifiers_info(NETDEV_CHANGE, &change_info.info);
- }
- }
-
- --- a/net/core/rtnetlink.c
- +++ b/net/core/rtnetlink.c
- @@ -1912,7 +1912,8 @@ static int do_setvfinfo(struct net_devic
- return err;
- }
-
- -static int do_set_master(struct net_device *dev, int ifindex)
- +static int do_set_master(struct net_device *dev, int ifindex,
- + struct netlink_ext_ack *extack)
- {
- struct net_device *upper_dev = netdev_master_upper_dev_get(dev);
- const struct net_device_ops *ops;
- @@ -1937,7 +1938,7 @@ static int do_set_master(struct net_devi
- return -EINVAL;
- ops = upper_dev->netdev_ops;
- if (ops->ndo_add_slave) {
- - err = ops->ndo_add_slave(upper_dev, dev);
- + err = ops->ndo_add_slave(upper_dev, dev, extack);
- if (err)
- return err;
- } else {
- @@ -2074,7 +2075,7 @@ static int do_setlink(const struct sk_bu
- }
-
- if (tb[IFLA_MASTER]) {
- - err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]));
- + err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]), extack);
- if (err)
- goto errout;
- status |= DO_SETLINK_MODIFIED;
- @@ -2723,7 +2724,8 @@ replay:
- goto out_unregister;
- }
- if (tb[IFLA_MASTER]) {
- - err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]));
- + err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]),
- + extack);
- if (err)
- goto out_unregister;
- }
- --- a/net/core/skbuff.c
- +++ b/net/core/skbuff.c
- @@ -799,6 +799,32 @@ void napi_consume_skb(struct sk_buff *sk
- }
- EXPORT_SYMBOL(napi_consume_skb);
-
- +/**
- + * skb_recycle - clean up an skb for reuse
- + * @skb: buffer
- + *
- + * Recycles the skb to be reused as a receive buffer. This
- + * function does any necessary reference count dropping, and
- + * cleans up the skbuff as if it just came from __alloc_skb().
- + */
- +void skb_recycle(struct sk_buff *skb)
- +{
- + struct skb_shared_info *shinfo;
- + u8 head_frag = skb->head_frag;
- +
- + skb_release_head_state(skb);
- +
- + shinfo = skb_shinfo(skb);
- + memset(shinfo, 0, offsetof(struct skb_shared_info, dataref));
- + atomic_set(&shinfo->dataref, 1);
- +
- + memset(skb, 0, offsetof(struct sk_buff, tail));
- + skb->data = skb->head + NET_SKB_PAD;
- + skb->head_frag = head_frag;
- + skb_reset_tail_pointer(skb);
- +}
- +EXPORT_SYMBOL(skb_recycle);
- +
- /* Make sure a field is enclosed inside headers_start/headers_end section */
- #define CHECK_SKB_FIELD(field) \
- BUILD_BUG_ON(offsetof(struct sk_buff, field) < \
- @@ -1318,7 +1344,7 @@ static void skb_headers_offset_update(st
- skb->inner_mac_header += off;
- }
-
- -static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
- +void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
- {
- __copy_skb_header(new, old);
-
- @@ -1326,6 +1352,7 @@ static void copy_skb_header(struct sk_bu
- skb_shinfo(new)->gso_segs = skb_shinfo(old)->gso_segs;
- skb_shinfo(new)->gso_type = skb_shinfo(old)->gso_type;
- }
- +EXPORT_SYMBOL(copy_skb_header);
-
- static inline int skb_alloc_rx_flag(const struct sk_buff *skb)
- {
- --- a/samples/bpf/Makefile
- +++ b/samples/bpf/Makefile
- @@ -178,6 +178,12 @@ HOSTLOADLIBES_syscall_tp += -lelf
- LLC ?= llc
- CLANG ?= clang
-
- +# Detect that we're cross compiling and use the cross compiler
- +ifdef CROSS_COMPILE
- +HOSTCC = $(CROSS_COMPILE)gcc
- +CLANG_ARCH_ARGS = -target $(ARCH)
- +endif
- +
- # Trick to allow make to be run from this directory
- all: $(LIBBPF)
- $(MAKE) -C ../../ $(CURDIR)/
- @@ -228,9 +234,9 @@ $(obj)/tracex5_kern.o: $(obj)/syscall_nr
- $(obj)/%.o: $(src)/%.c
- $(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS) -I$(obj) \
- -I$(srctree)/tools/testing/selftests/bpf/ \
- - -D__KERNEL__ -D__ASM_SYSREG_H -Wno-unused-value -Wno-pointer-sign \
- - -Wno-compare-distinct-pointer-types \
- + -D__KERNEL__ -Wno-unused-value -Wno-pointer-sign \
- + -D__TARGET_ARCH_$(ARCH) -Wno-compare-distinct-pointer-types \
- -Wno-gnu-variable-sized-type-not-at-end \
- -Wno-address-of-packed-member -Wno-tautological-compare \
- - -Wno-unknown-warning-option \
- + -Wno-unknown-warning-option $(CLANG_ARCH_ARGS) \
- -O2 -emit-llvm -c $< -o -| $(LLC) -march=bpf -filetype=obj -o $@
- --- a/samples/bpf/map_perf_test_kern.c
- +++ b/samples/bpf/map_perf_test_kern.c
- @@ -266,7 +266,7 @@ int stress_hash_map_lookup(struct pt_reg
- return 0;
- }
-
- -SEC("kprobe/sys_getpgrp")
- +SEC("kprobe/sys_getppid")
- int stress_array_map_lookup(struct pt_regs *ctx)
- {
- u32 key = 1, i;
- --- a/samples/bpf/map_perf_test_user.c
- +++ b/samples/bpf/map_perf_test_user.c
- @@ -282,7 +282,7 @@ static void test_array_lookup(int cpu)
-
- start_time = time_get_ns();
- for (i = 0; i < max_cnt; i++)
- - syscall(__NR_getpgrp, 0);
- + syscall(__NR_getppid, 0);
- printf("%d:array_lookup %lld lookups per sec\n",
- cpu, max_cnt * 1000000000ll * 64 / (time_get_ns() - start_time));
- }
- --- a/tools/testing/selftests/bpf/bpf_helpers.h
- +++ b/tools/testing/selftests/bpf/bpf_helpers.h
- @@ -110,7 +110,47 @@ static int (*bpf_skb_under_cgroup)(void
- static int (*bpf_skb_change_head)(void *, int len, int flags) =
- (void *) BPF_FUNC_skb_change_head;
-
- +/* Scan the ARCH passed in from ARCH env variable (see Makefile) */
- +#if defined(__TARGET_ARCH_x86)
- + #define bpf_target_x86
- + #define bpf_target_defined
- +#elif defined(__TARGET_ARCH_s930x)
- + #define bpf_target_s930x
- + #define bpf_target_defined
- +#elif defined(__TARGET_ARCH_arm64)
- + #define bpf_target_arm64
- + #define bpf_target_defined
- +#elif defined(__TARGET_ARCH_mips)
- + #define bpf_target_mips
- + #define bpf_target_defined
- +#elif defined(__TARGET_ARCH_powerpc)
- + #define bpf_target_powerpc
- + #define bpf_target_defined
- +#elif defined(__TARGET_ARCH_sparc)
- + #define bpf_target_sparc
- + #define bpf_target_defined
- +#else
- + #undef bpf_target_defined
- +#endif
- +
- +/* Fall back to what the compiler says */
- +#ifndef bpf_target_defined
- #if defined(__x86_64__)
- + #define bpf_target_x86
- +#elif defined(__s390x__)
- + #define bpf_target_s930x
- +#elif defined(__aarch64__)
- + #define bpf_target_arm64
- +#elif defined(__mips__)
- + #define bpf_target_mips
- +#elif defined(__powerpc__)
- + #define bpf_target_powerpc
- +#elif defined(__sparc__)
- + #define bpf_target_sparc
- +#endif
- +#endif
- +
- +#if defined(bpf_target_x86)
-
- #define PT_REGS_PARM1(x) ((x)->di)
- #define PT_REGS_PARM2(x) ((x)->si)
- @@ -123,7 +163,7 @@ static int (*bpf_skb_change_head)(void *
- #define PT_REGS_SP(x) ((x)->sp)
- #define PT_REGS_IP(x) ((x)->ip)
-
- -#elif defined(__s390x__)
- +#elif defined(bpf_target_s390x)
-
- #define PT_REGS_PARM1(x) ((x)->gprs[2])
- #define PT_REGS_PARM2(x) ((x)->gprs[3])
- @@ -136,7 +176,7 @@ static int (*bpf_skb_change_head)(void *
- #define PT_REGS_SP(x) ((x)->gprs[15])
- #define PT_REGS_IP(x) ((x)->psw.addr)
-
- -#elif defined(__aarch64__)
- +#elif defined(bpf_target_arm64)
-
- #define PT_REGS_PARM1(x) ((x)->regs[0])
- #define PT_REGS_PARM2(x) ((x)->regs[1])
- @@ -149,7 +189,7 @@ static int (*bpf_skb_change_head)(void *
- #define PT_REGS_SP(x) ((x)->sp)
- #define PT_REGS_IP(x) ((x)->pc)
-
- -#elif defined(__mips__)
- +#elif defined(bpf_target_mips)
-
- #define PT_REGS_PARM1(x) ((x)->regs[4])
- #define PT_REGS_PARM2(x) ((x)->regs[5])
- @@ -162,7 +202,7 @@ static int (*bpf_skb_change_head)(void *
- #define PT_REGS_SP(x) ((x)->regs[29])
- #define PT_REGS_IP(x) ((x)->cp0_epc)
-
- -#elif defined(__powerpc__)
- +#elif defined(bpf_target_powerpc)
-
- #define PT_REGS_PARM1(x) ((x)->gpr[3])
- #define PT_REGS_PARM2(x) ((x)->gpr[4])
- @@ -173,7 +213,7 @@ static int (*bpf_skb_change_head)(void *
- #define PT_REGS_SP(x) ((x)->sp)
- #define PT_REGS_IP(x) ((x)->nip)
-
- -#elif defined(__sparc__)
- +#elif defined(bpf_target_sparc)
-
- #define PT_REGS_PARM1(x) ((x)->u_regs[UREG_I0])
- #define PT_REGS_PARM2(x) ((x)->u_regs[UREG_I1])
- @@ -183,6 +223,8 @@ static int (*bpf_skb_change_head)(void *
- #define PT_REGS_RET(x) ((x)->u_regs[UREG_I7])
- #define PT_REGS_RC(x) ((x)->u_regs[UREG_I0])
- #define PT_REGS_SP(x) ((x)->u_regs[UREG_FP])
- +
- +/* Should this also be a bpf_target check for the sparc case? */
- #if defined(__arch64__)
- #define PT_REGS_IP(x) ((x)->tpc)
- #else
- @@ -191,10 +233,10 @@ static int (*bpf_skb_change_head)(void *
-
- #endif
-
- -#ifdef __powerpc__
- +#ifdef bpf_target_powerpc
- #define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ (ip) = (ctx)->link; })
- #define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP
- -#elif defined(__sparc__)
- +#elif bpf_target_sparc
- #define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ (ip) = PT_REGS_RET(ctx); })
- #define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP
- #else
|