From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [RFC bpf-next] bpf: devmap: move drop error path to devmpap for XDP_REDIRECT
Date: Thu, 11 Feb 2021 00:23:19 +0800 [thread overview]
Message-ID: <202102110055.gWXbY677-lkp@intel.com> (raw)
In-Reply-To: <6266fb2549a06cb63d1593f9cee297a04b096433.1612966415.git.lorenzo@kernel.org>
[-- Attachment #1: Type: text/plain, Size: 40229 bytes --]
Hi Lorenzo,
[FYI, it's a private test report for your RFC patch.]
[auto build test ERROR on bpf-next/master]
url: https://github.com/0day-ci/linux/commits/Lorenzo-Bianconi/bpf-devmap-move-drop-error-path-to-devmpap-for-XDP_REDIRECT/20210210-222154
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
config: arm-randconfig-s032-20210209 (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-215-g0fb77bb6-dirty
# https://github.com/0day-ci/linux/commit/96ef538bb5cf75f19f3973722e4f66c7f65781db
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Lorenzo-Bianconi/bpf-devmap-move-drop-error-path-to-devmpap-for-XDP_REDIRECT/20210210-222154
git checkout 96ef538bb5cf75f19f3973722e4f66c7f65781db
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
drivers/net/ethernet/socionext/netsec.c: In function 'netsec_xdp_xmit':
>> drivers/net/ethernet/socionext/netsec.c:1787:12: error: invalid storage class for function 'netsec_xdp_setup'
1787 | static int netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog,
| ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1787:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
1787 | static int netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog,
| ^~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1813:12: error: invalid storage class for function 'netsec_xdp'
1813 | static int netsec_xdp(struct net_device *ndev, struct netdev_bpf *xdp)
| ^~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1836:14: error: initializer element is not constant
1836 | .ndo_bpf = netsec_xdp,
| ^~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:1836:14: note: (near initialization for 'netsec_netdev_ops.ndo_bpf')
>> drivers/net/ethernet/socionext/netsec.c:1839:12: error: invalid storage class for function 'netsec_of_probe'
1839 | static int netsec_of_probe(struct platform_device *pdev,
| ^~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1868:12: error: invalid storage class for function 'netsec_acpi_probe'
1868 | static int netsec_acpi_probe(struct platform_device *pdev,
| ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1900:13: error: invalid storage class for function 'netsec_unregister_mdio'
1900 | static void netsec_unregister_mdio(struct netsec_priv *priv)
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1912:12: error: invalid storage class for function 'netsec_register_mdio'
1912 | static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr)
| ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:1977:12: error: invalid storage class for function 'netsec_probe'
1977 | static int netsec_probe(struct platform_device *pdev)
| ^~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:2140:12: error: invalid storage class for function 'netsec_remove'
2140 | static int netsec_remove(struct platform_device *pdev)
| ^~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:2157:12: error: invalid storage class for function 'netsec_runtime_suspend'
2157 | static int netsec_runtime_suspend(struct device *dev)
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:2168:12: error: invalid storage class for function 'netsec_runtime_resume'
2168 | static int netsec_runtime_resume(struct device *dev)
| ^~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/device.h:25,
from include/linux/platform_device.h:13,
from drivers/net/ethernet/socionext/netsec.c:5:
drivers/net/ethernet/socionext/netsec.c:2182:21: error: initializer element is not constant
2182 | SET_RUNTIME_PM_OPS(netsec_runtime_suspend, netsec_runtime_resume, NULL)
| ^~~~~~~~~~~~~~~~~~~~~~
include/linux/pm.h:342:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
342 | .runtime_suspend = suspend_fn, \
| ^~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2182:21: note: (near initialization for 'netsec_pm_ops.runtime_suspend')
2182 | SET_RUNTIME_PM_OPS(netsec_runtime_suspend, netsec_runtime_resume, NULL)
| ^~~~~~~~~~~~~~~~~~~~~~
include/linux/pm.h:342:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
342 | .runtime_suspend = suspend_fn, \
| ^~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2182:45: error: initializer element is not constant
2182 | SET_RUNTIME_PM_OPS(netsec_runtime_suspend, netsec_runtime_resume, NULL)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/pm.h:343:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
343 | .runtime_resume = resume_fn, \
| ^~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2182:45: note: (near initialization for 'netsec_pm_ops.runtime_resume')
2182 | SET_RUNTIME_PM_OPS(netsec_runtime_suspend, netsec_runtime_resume, NULL)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/pm.h:343:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
343 | .runtime_resume = resume_fn, \
| ^~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2189:1: warning: 'alias' attribute ignored [-Wattributes]
2189 | MODULE_DEVICE_TABLE(of, netsec_dt_ids);
| ^~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2200:11: error: initializer element is not constant
2200 | .probe = netsec_probe,
| ^~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2200:11: note: (near initialization for 'netsec_driver.probe')
drivers/net/ethernet/socionext/netsec.c:2201:12: error: initializer element is not constant
2201 | .remove = netsec_remove,
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2201:12: note: (near initialization for 'netsec_driver.remove')
In file included from include/linux/device.h:32,
from include/linux/platform_device.h:13,
from drivers/net/ethernet/socionext/netsec.c:5:
>> drivers/net/ethernet/socionext/netsec.c:2209:24: error: invalid storage class for function 'netsec_driver_init'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~
include/linux/device/driver.h:259:19: note: in definition of macro 'module_driver'
259 | static int __init __driver##_init(void) \
| ^~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
>> include/linux/module.h:132:42: error: invalid storage class for function '__inittest'
132 | static inline initcall_t __maybe_unused __inittest(void) \
| ^~~~~~~~~~
include/linux/device/driver.h:263:1: note: in expansion of macro 'module_init'
263 | module_init(__driver##_init); \
| ^~~~~~~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro 'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: warning: 'alias' attribute ignored [-Wattributes]
In file included from include/linux/device.h:32,
from include/linux/platform_device.h:13,
from drivers/net/ethernet/socionext/netsec.c:5:
>> drivers/net/ethernet/socionext/netsec.c:2209:24: error: invalid storage class for function 'netsec_driver_exit'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~
include/linux/device/driver.h:264:20: note: in definition of macro 'module_driver'
264 | static void __exit __driver##_exit(void) \
| ^~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
>> include/linux/device/driver.h:264:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
264 | static void __exit __driver##_exit(void) \
| ^~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro 'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
>> include/linux/module.h:138:42: error: invalid storage class for function '__exittest'
138 | static inline exitcall_t __maybe_unused __exittest(void) \
| ^~~~~~~~~~
include/linux/device/driver.h:268:1: note: in expansion of macro 'module_exit'
268 | module_exit(__driver##_exit);
| ^~~~~~~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro 'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro 'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: warning: 'alias' attribute ignored [-Wattributes]
In file included from include/linux/module.h:21,
from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
>> include/linux/moduleparam.h:24:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
24 | static const char __UNIQUE_ID(name)[] \
| ^~~~~~
include/linux/module.h:163:32: note: in expansion of macro '__MODULE_INFO'
163 | #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
| ^~~~~~~~~~~~~
include/linux/module.h:233:32: note: in expansion of macro 'MODULE_INFO'
233 | #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
| ^~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2211:1: note: in expansion of macro 'MODULE_AUTHOR'
2211 | MODULE_AUTHOR("Jassi Brar <jaswinder.singh@linaro.org>");
| ^~~~~~~~~~~~~
>> drivers/net/ethernet/socionext/netsec.c:2214:1: error: expected declaration or statement at end of input
2214 | MODULE_LICENSE("GPL");
| ^~~~~~~~~~~~~~
At top level:
drivers/net/ethernet/socionext/netsec.c:1755:12: warning: 'netsec_xdp_xmit' defined but not used [-Wunused-function]
1755 | static int netsec_xdp_xmit(struct net_device *ndev, int n,
| ^~~~~~~~~~~~~~~
vim +/netsec_xdp_setup +1787 drivers/net/ethernet/socionext/netsec.c
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1786
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1787 static int netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1788 struct netlink_ext_ack *extack)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1789 {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1790 struct net_device *dev = priv->ndev;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1791 struct bpf_prog *old_prog;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1792
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1793 /* For now just support only the usual MTU sized frames */
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1794 if (prog && dev->mtu > 1500) {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1795 NL_SET_ERR_MSG_MOD(extack, "Jumbo frames not supported on XDP");
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1796 return -EOPNOTSUPP;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1797 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1798
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1799 if (netif_running(dev))
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1800 netsec_netdev_stop(dev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1801
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1802 /* Detach old prog, if any */
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1803 old_prog = xchg(&priv->xdp_prog, prog);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1804 if (old_prog)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1805 bpf_prog_put(old_prog);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1806
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1807 if (netif_running(dev))
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1808 netsec_netdev_open(dev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1809
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1810 return 0;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1811 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1812
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1813 static int netsec_xdp(struct net_device *ndev, struct netdev_bpf *xdp)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1814 {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1815 struct netsec_priv *priv = netdev_priv(ndev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1816
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1817 switch (xdp->command) {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1818 case XDP_SETUP_PROG:
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1819 return netsec_xdp_setup(priv, xdp->prog, xdp->extack);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1820 default:
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1821 return -EINVAL;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1822 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1823 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1824
533dd11a12f698c Jassi Brar 2018-01-06 1825 static const struct net_device_ops netsec_netdev_ops = {
533dd11a12f698c Jassi Brar 2018-01-06 1826 .ndo_init = netsec_netdev_init,
533dd11a12f698c Jassi Brar 2018-01-06 1827 .ndo_uninit = netsec_netdev_uninit,
533dd11a12f698c Jassi Brar 2018-01-06 1828 .ndo_open = netsec_netdev_open,
533dd11a12f698c Jassi Brar 2018-01-06 1829 .ndo_stop = netsec_netdev_stop,
533dd11a12f698c Jassi Brar 2018-01-06 1830 .ndo_start_xmit = netsec_netdev_start_xmit,
533dd11a12f698c Jassi Brar 2018-01-06 1831 .ndo_set_features = netsec_netdev_set_features,
533dd11a12f698c Jassi Brar 2018-01-06 1832 .ndo_set_mac_address = eth_mac_addr,
533dd11a12f698c Jassi Brar 2018-01-06 1833 .ndo_validate_addr = eth_validate_addr,
c5d19a6ecfce72d Heiner Kallweit 2020-01-21 1834 .ndo_do_ioctl = phy_do_ioctl,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1835 .ndo_xdp_xmit = netsec_xdp_xmit,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1836 .ndo_bpf = netsec_xdp,
533dd11a12f698c Jassi Brar 2018-01-06 1837 };
533dd11a12f698c Jassi Brar 2018-01-06 1838
533dd11a12f698c Jassi Brar 2018-01-06 @1839 static int netsec_of_probe(struct platform_device *pdev,
8e850f25b5812ae Masahisa Kojima 2018-10-23 1840 struct netsec_priv *priv, u32 *phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1841 {
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1842 int err;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1843
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1844 err = of_get_phy_mode(pdev->dev.of_node, &priv->phy_interface);
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1845 if (err) {
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1846 dev_err(&pdev->dev, "missing required property 'phy-mode'\n");
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1847 return err;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1848 }
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1849
533dd11a12f698c Jassi Brar 2018-01-06 1850 priv->phy_np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
533dd11a12f698c Jassi Brar 2018-01-06 1851 if (!priv->phy_np) {
533dd11a12f698c Jassi Brar 2018-01-06 1852 dev_err(&pdev->dev, "missing required property 'phy-handle'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1853 return -EINVAL;
533dd11a12f698c Jassi Brar 2018-01-06 1854 }
533dd11a12f698c Jassi Brar 2018-01-06 1855
8e850f25b5812ae Masahisa Kojima 2018-10-23 1856 *phy_addr = of_mdio_parse_addr(&pdev->dev, priv->phy_np);
8e850f25b5812ae Masahisa Kojima 2018-10-23 1857
533dd11a12f698c Jassi Brar 2018-01-06 1858 priv->clk = devm_clk_get(&pdev->dev, NULL); /* get by 'phy_ref_clk' */
533dd11a12f698c Jassi Brar 2018-01-06 1859 if (IS_ERR(priv->clk)) {
533dd11a12f698c Jassi Brar 2018-01-06 1860 dev_err(&pdev->dev, "phy_ref_clk not found\n");
533dd11a12f698c Jassi Brar 2018-01-06 1861 return PTR_ERR(priv->clk);
533dd11a12f698c Jassi Brar 2018-01-06 1862 }
533dd11a12f698c Jassi Brar 2018-01-06 1863 priv->freq = clk_get_rate(priv->clk);
533dd11a12f698c Jassi Brar 2018-01-06 1864
533dd11a12f698c Jassi Brar 2018-01-06 1865 return 0;
533dd11a12f698c Jassi Brar 2018-01-06 1866 }
533dd11a12f698c Jassi Brar 2018-01-06 1867
533dd11a12f698c Jassi Brar 2018-01-06 @1868 static int netsec_acpi_probe(struct platform_device *pdev,
533dd11a12f698c Jassi Brar 2018-01-06 1869 struct netsec_priv *priv, u32 *phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1870 {
533dd11a12f698c Jassi Brar 2018-01-06 1871 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1872
533dd11a12f698c Jassi Brar 2018-01-06 1873 if (!IS_ENABLED(CONFIG_ACPI))
533dd11a12f698c Jassi Brar 2018-01-06 1874 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1875
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1876 /* ACPI systems are assumed to configure the PHY in firmware, so
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1877 * there is really no need to discover the PHY mode from the DSDT.
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1878 * Since firmware is known to exist in the field that configures the
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1879 * PHY correctly but passes the wrong mode string in the phy-mode
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1880 * device property, we have no choice but to ignore it.
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1881 */
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1882 priv->phy_interface = PHY_INTERFACE_MODE_NA;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1883
533dd11a12f698c Jassi Brar 2018-01-06 1884 ret = device_property_read_u32(&pdev->dev, "phy-channel", phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 1885 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1886 dev_err(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1887 "missing required property 'phy-channel'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1888 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1889 }
533dd11a12f698c Jassi Brar 2018-01-06 1890
533dd11a12f698c Jassi Brar 2018-01-06 1891 ret = device_property_read_u32(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1892 "socionext,phy-clock-frequency",
533dd11a12f698c Jassi Brar 2018-01-06 1893 &priv->freq);
533dd11a12f698c Jassi Brar 2018-01-06 1894 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 1895 dev_err(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1896 "missing required property 'socionext,phy-clock-frequency'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1897 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1898 }
533dd11a12f698c Jassi Brar 2018-01-06 1899
533dd11a12f698c Jassi Brar 2018-01-06 @1900 static void netsec_unregister_mdio(struct netsec_priv *priv)
533dd11a12f698c Jassi Brar 2018-01-06 1901 {
533dd11a12f698c Jassi Brar 2018-01-06 1902 struct phy_device *phydev = priv->phydev;
533dd11a12f698c Jassi Brar 2018-01-06 1903
533dd11a12f698c Jassi Brar 2018-01-06 1904 if (!dev_of_node(priv->dev) && phydev) {
533dd11a12f698c Jassi Brar 2018-01-06 1905 phy_device_remove(phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1906 phy_device_free(phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1907 }
533dd11a12f698c Jassi Brar 2018-01-06 1908
533dd11a12f698c Jassi Brar 2018-01-06 1909 mdiobus_unregister(priv->mii_bus);
533dd11a12f698c Jassi Brar 2018-01-06 1910 }
533dd11a12f698c Jassi Brar 2018-01-06 1911
533dd11a12f698c Jassi Brar 2018-01-06 @1912 static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1913 {
533dd11a12f698c Jassi Brar 2018-01-06 1914 struct mii_bus *bus;
533dd11a12f698c Jassi Brar 2018-01-06 1915 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1916
533dd11a12f698c Jassi Brar 2018-01-06 1917 bus = devm_mdiobus_alloc(priv->dev);
533dd11a12f698c Jassi Brar 2018-01-06 1918 if (!bus)
533dd11a12f698c Jassi Brar 2018-01-06 1919 return -ENOMEM;
533dd11a12f698c Jassi Brar 2018-01-06 1920
533dd11a12f698c Jassi Brar 2018-01-06 1921 snprintf(bus->id, MII_BUS_ID_SIZE, "%s", dev_name(priv->dev));
533dd11a12f698c Jassi Brar 2018-01-06 1922 bus->priv = priv;
533dd11a12f698c Jassi Brar 2018-01-06 1923 bus->name = "SNI NETSEC MDIO";
533dd11a12f698c Jassi Brar 2018-01-06 1924 bus->read = netsec_phy_read;
533dd11a12f698c Jassi Brar 2018-01-06 1925 bus->write = netsec_phy_write;
533dd11a12f698c Jassi Brar 2018-01-06 1926 bus->parent = priv->dev;
533dd11a12f698c Jassi Brar 2018-01-06 1927 priv->mii_bus = bus;
533dd11a12f698c Jassi Brar 2018-01-06 1928
533dd11a12f698c Jassi Brar 2018-01-06 1929 if (dev_of_node(priv->dev)) {
533dd11a12f698c Jassi Brar 2018-01-06 1930 struct device_node *mdio_node, *parent = dev_of_node(priv->dev);
533dd11a12f698c Jassi Brar 2018-01-06 1931
533dd11a12f698c Jassi Brar 2018-01-06 1932 mdio_node = of_get_child_by_name(parent, "mdio");
533dd11a12f698c Jassi Brar 2018-01-06 1933 if (mdio_node) {
533dd11a12f698c Jassi Brar 2018-01-06 1934 parent = mdio_node;
533dd11a12f698c Jassi Brar 2018-01-06 1935 } else {
533dd11a12f698c Jassi Brar 2018-01-06 1936 /* older f/w doesn't populate the mdio subnode,
533dd11a12f698c Jassi Brar 2018-01-06 1937 * allow relaxed upgrade of f/w in due time.
533dd11a12f698c Jassi Brar 2018-01-06 1938 */
533dd11a12f698c Jassi Brar 2018-01-06 1939 dev_info(priv->dev, "Upgrade f/w for mdio subnode!\n");
533dd11a12f698c Jassi Brar 2018-01-06 1940 }
533dd11a12f698c Jassi Brar 2018-01-06 1941
533dd11a12f698c Jassi Brar 2018-01-06 1942 ret = of_mdiobus_register(bus, parent);
533dd11a12f698c Jassi Brar 2018-01-06 1943 of_node_put(mdio_node);
533dd11a12f698c Jassi Brar 2018-01-06 1944
533dd11a12f698c Jassi Brar 2018-01-06 1945 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1946 dev_err(priv->dev, "mdiobus register err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1947 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1948 }
533dd11a12f698c Jassi Brar 2018-01-06 1949 } else {
533dd11a12f698c Jassi Brar 2018-01-06 1950 /* Mask out all PHYs from auto probing. */
533dd11a12f698c Jassi Brar 2018-01-06 1951 bus->phy_mask = ~0;
533dd11a12f698c Jassi Brar 2018-01-06 1952 ret = mdiobus_register(bus);
533dd11a12f698c Jassi Brar 2018-01-06 1953 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1954 dev_err(priv->dev, "mdiobus register err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1955 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1956 }
533dd11a12f698c Jassi Brar 2018-01-06 1957
533dd11a12f698c Jassi Brar 2018-01-06 1958 priv->phydev = get_phy_device(bus, phy_addr, false);
533dd11a12f698c Jassi Brar 2018-01-06 1959 if (IS_ERR(priv->phydev)) {
533dd11a12f698c Jassi Brar 2018-01-06 1960 ret = PTR_ERR(priv->phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1961 dev_err(priv->dev, "get_phy_device err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1962 priv->phydev = NULL;
533dd11a12f698c Jassi Brar 2018-01-06 1963 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1964 }
533dd11a12f698c Jassi Brar 2018-01-06 1965
533dd11a12f698c Jassi Brar 2018-01-06 1966 ret = phy_device_register(priv->phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1967 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1968 mdiobus_unregister(bus);
533dd11a12f698c Jassi Brar 2018-01-06 1969 dev_err(priv->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1970 "phy_device_register err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1971 }
533dd11a12f698c Jassi Brar 2018-01-06 1972 }
533dd11a12f698c Jassi Brar 2018-01-06 1973
533dd11a12f698c Jassi Brar 2018-01-06 1974 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1975 }
533dd11a12f698c Jassi Brar 2018-01-06 1976
533dd11a12f698c Jassi Brar 2018-01-06 @1977 static int netsec_probe(struct platform_device *pdev)
533dd11a12f698c Jassi Brar 2018-01-06 1978 {
533dd11a12f698c Jassi Brar 2018-01-06 1979 struct resource *mmio_res, *eeprom_res, *irq_res;
533dd11a12f698c Jassi Brar 2018-01-06 1980 u8 *mac, macbuf[ETH_ALEN];
533dd11a12f698c Jassi Brar 2018-01-06 1981 struct netsec_priv *priv;
533dd11a12f698c Jassi Brar 2018-01-06 1982 u32 hw_ver, phy_addr = 0;
533dd11a12f698c Jassi Brar 2018-01-06 1983 struct net_device *ndev;
533dd11a12f698c Jassi Brar 2018-01-06 1984 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1985
533dd11a12f698c Jassi Brar 2018-01-06 1986 mmio_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
533dd11a12f698c Jassi Brar 2018-01-06 1987 if (!mmio_res) {
533dd11a12f698c Jassi Brar 2018-01-06 1988 dev_err(&pdev->dev, "No MMIO resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 1989 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1990 }
533dd11a12f698c Jassi Brar 2018-01-06 1991
533dd11a12f698c Jassi Brar 2018-01-06 1992 eeprom_res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
533dd11a12f698c Jassi Brar 2018-01-06 1993 if (!eeprom_res) {
533dd11a12f698c Jassi Brar 2018-01-06 1994 dev_info(&pdev->dev, "No EEPROM resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 1995 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1996 }
533dd11a12f698c Jassi Brar 2018-01-06 1997
533dd11a12f698c Jassi Brar 2018-01-06 1998 irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
533dd11a12f698c Jassi Brar 2018-01-06 1999 if (!irq_res) {
533dd11a12f698c Jassi Brar 2018-01-06 2000 dev_err(&pdev->dev, "No IRQ resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 2001 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2002 }
533dd11a12f698c Jassi Brar 2018-01-06 2003
533dd11a12f698c Jassi Brar 2018-01-06 2004 ndev = alloc_etherdev(sizeof(*priv));
533dd11a12f698c Jassi Brar 2018-01-06 2005 if (!ndev)
533dd11a12f698c Jassi Brar 2018-01-06 2006 return -ENOMEM;
533dd11a12f698c Jassi Brar 2018-01-06 2007
533dd11a12f698c Jassi Brar 2018-01-06 2008 priv = netdev_priv(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2009
533dd11a12f698c Jassi Brar 2018-01-06 2010 spin_lock_init(&priv->reglock);
533dd11a12f698c Jassi Brar 2018-01-06 2011 SET_NETDEV_DEV(ndev, &pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2012 platform_set_drvdata(pdev, priv);
533dd11a12f698c Jassi Brar 2018-01-06 2013 ndev->irq = irq_res->start;
533dd11a12f698c Jassi Brar 2018-01-06 2014 priv->dev = &pdev->dev;
533dd11a12f698c Jassi Brar 2018-01-06 2015 priv->ndev = ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2016
533dd11a12f698c Jassi Brar 2018-01-06 2017 priv->msg_enable = NETIF_MSG_TX_ERR | NETIF_MSG_HW | NETIF_MSG_DRV |
533dd11a12f698c Jassi Brar 2018-01-06 2018 NETIF_MSG_LINK | NETIF_MSG_PROBE;
533dd11a12f698c Jassi Brar 2018-01-06 2019
533dd11a12f698c Jassi Brar 2018-01-06 2020 priv->ioaddr = devm_ioremap(&pdev->dev, mmio_res->start,
533dd11a12f698c Jassi Brar 2018-01-06 2021 resource_size(mmio_res));
533dd11a12f698c Jassi Brar 2018-01-06 2022 if (!priv->ioaddr) {
533dd11a12f698c Jassi Brar 2018-01-06 2023 dev_err(&pdev->dev, "devm_ioremap() failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2024 ret = -ENXIO;
533dd11a12f698c Jassi Brar 2018-01-06 2025 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2026 }
533dd11a12f698c Jassi Brar 2018-01-06 2027
533dd11a12f698c Jassi Brar 2018-01-06 2028 priv->eeprom_base = devm_ioremap(&pdev->dev, eeprom_res->start,
533dd11a12f698c Jassi Brar 2018-01-06 2029 resource_size(eeprom_res));
533dd11a12f698c Jassi Brar 2018-01-06 2030 if (!priv->eeprom_base) {
533dd11a12f698c Jassi Brar 2018-01-06 2031 dev_err(&pdev->dev, "devm_ioremap() failed for EEPROM\n");
533dd11a12f698c Jassi Brar 2018-01-06 2032 ret = -ENXIO;
533dd11a12f698c Jassi Brar 2018-01-06 2033 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2034 }
533dd11a12f698c Jassi Brar 2018-01-06 2035
533dd11a12f698c Jassi Brar 2018-01-06 2036 mac = device_get_mac_address(&pdev->dev, macbuf, sizeof(macbuf));
533dd11a12f698c Jassi Brar 2018-01-06 2037 if (mac)
533dd11a12f698c Jassi Brar 2018-01-06 2038 ether_addr_copy(ndev->dev_addr, mac);
533dd11a12f698c Jassi Brar 2018-01-06 2039
533dd11a12f698c Jassi Brar 2018-01-06 2040 if (priv->eeprom_base &&
533dd11a12f698c Jassi Brar 2018-01-06 2041 (!mac || !is_valid_ether_addr(ndev->dev_addr))) {
533dd11a12f698c Jassi Brar 2018-01-06 2042 void __iomem *macp = priv->eeprom_base +
533dd11a12f698c Jassi Brar 2018-01-06 2043 NETSEC_EEPROM_MAC_ADDRESS;
533dd11a12f698c Jassi Brar 2018-01-06 2044
533dd11a12f698c Jassi Brar 2018-01-06 2045 ndev->dev_addr[0] = readb(macp + 3);
533dd11a12f698c Jassi Brar 2018-01-06 2046 ndev->dev_addr[1] = readb(macp + 2);
533dd11a12f698c Jassi Brar 2018-01-06 2047 ndev->dev_addr[2] = readb(macp + 1);
533dd11a12f698c Jassi Brar 2018-01-06 2048 ndev->dev_addr[3] = readb(macp + 0);
533dd11a12f698c Jassi Brar 2018-01-06 2049 ndev->dev_addr[4] = readb(macp + 7);
533dd11a12f698c Jassi Brar 2018-01-06 2050 ndev->dev_addr[5] = readb(macp + 6);
533dd11a12f698c Jassi Brar 2018-01-06 2051 }
533dd11a12f698c Jassi Brar 2018-01-06 2052
533dd11a12f698c Jassi Brar 2018-01-06 2053 if (!is_valid_ether_addr(ndev->dev_addr)) {
533dd11a12f698c Jassi Brar 2018-01-06 2054 dev_warn(&pdev->dev, "No MAC address found, using random\n");
533dd11a12f698c Jassi Brar 2018-01-06 2055 eth_hw_addr_random(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2056 }
533dd11a12f698c Jassi Brar 2018-01-06 2057
533dd11a12f698c Jassi Brar 2018-01-06 2058 if (dev_of_node(&pdev->dev))
8e850f25b5812ae Masahisa Kojima 2018-10-23 2059 ret = netsec_of_probe(pdev, priv, &phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2060 else
533dd11a12f698c Jassi Brar 2018-01-06 2061 ret = netsec_acpi_probe(pdev, priv, &phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2062 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 2063 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2064
8e850f25b5812ae Masahisa Kojima 2018-10-23 2065 priv->phy_addr = phy_addr;
8e850f25b5812ae Masahisa Kojima 2018-10-23 2066
533dd11a12f698c Jassi Brar 2018-01-06 2067 if (!priv->freq) {
533dd11a12f698c Jassi Brar 2018-01-06 2068 dev_err(&pdev->dev, "missing PHY reference clock frequency\n");
533dd11a12f698c Jassi Brar 2018-01-06 2069 ret = -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2070 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2071 }
533dd11a12f698c Jassi Brar 2018-01-06 2072
533dd11a12f698c Jassi Brar 2018-01-06 2073 /* default for throughput */
533dd11a12f698c Jassi Brar 2018-01-06 2074 priv->et_coalesce.rx_coalesce_usecs = 500;
533dd11a12f698c Jassi Brar 2018-01-06 2075 priv->et_coalesce.rx_max_coalesced_frames = 8;
533dd11a12f698c Jassi Brar 2018-01-06 2076 priv->et_coalesce.tx_coalesce_usecs = 500;
533dd11a12f698c Jassi Brar 2018-01-06 2077 priv->et_coalesce.tx_max_coalesced_frames = 8;
533dd11a12f698c Jassi Brar 2018-01-06 2078
533dd11a12f698c Jassi Brar 2018-01-06 2079 ret = device_property_read_u32(&pdev->dev, "max-frame-size",
533dd11a12f698c Jassi Brar 2018-01-06 2080 &ndev->max_mtu);
533dd11a12f698c Jassi Brar 2018-01-06 2081 if (ret < 0)
533dd11a12f698c Jassi Brar 2018-01-06 2082 ndev->max_mtu = ETH_DATA_LEN;
533dd11a12f698c Jassi Brar 2018-01-06 2083
533dd11a12f698c Jassi Brar 2018-01-06 2084 /* runtime_pm coverage just for probe, open/close also cover it */
533dd11a12f698c Jassi Brar 2018-01-06 2085 pm_runtime_enable(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2086 pm_runtime_get_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2087
533dd11a12f698c Jassi Brar 2018-01-06 2088 hw_ver = netsec_read(priv, NETSEC_REG_F_TAIKI_VER);
533dd11a12f698c Jassi Brar 2018-01-06 2089 /* this driver only supports F_TAIKI style NETSEC */
533dd11a12f698c Jassi Brar 2018-01-06 2090 if (NETSEC_F_NETSEC_VER_MAJOR_NUM(hw_ver) !=
533dd11a12f698c Jassi Brar 2018-01-06 2091 NETSEC_F_NETSEC_VER_MAJOR_NUM(NETSEC_REG_NETSEC_VER_F_TAIKI)) {
533dd11a12f698c Jassi Brar 2018-01-06 2092 ret = -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2093 goto pm_disable;
533dd11a12f698c Jassi Brar 2018-01-06 2094 }
533dd11a12f698c Jassi Brar 2018-01-06 2095
533dd11a12f698c Jassi Brar 2018-01-06 2096 dev_info(&pdev->dev, "hardware revision %d.%d\n",
533dd11a12f698c Jassi Brar 2018-01-06 2097 hw_ver >> 16, hw_ver & 0xffff);
533dd11a12f698c Jassi Brar 2018-01-06 2098
b6311b7bea41963 Ilias Apalodimas 2018-08-10 2099 netif_napi_add(ndev, &priv->napi, netsec_napi_poll, NAPI_POLL_WEIGHT);
533dd11a12f698c Jassi Brar 2018-01-06 2100
533dd11a12f698c Jassi Brar 2018-01-06 2101 ndev->netdev_ops = &netsec_netdev_ops;
533dd11a12f698c Jassi Brar 2018-01-06 2102 ndev->ethtool_ops = &netsec_ethtool_ops;
533dd11a12f698c Jassi Brar 2018-01-06 2103
533dd11a12f698c Jassi Brar 2018-01-06 2104 ndev->features |= NETIF_F_HIGHDMA | NETIF_F_RXCSUM | NETIF_F_GSO |
533dd11a12f698c Jassi Brar 2018-01-06 2105 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
533dd11a12f698c Jassi Brar 2018-01-06 2106 ndev->hw_features = ndev->features;
533dd11a12f698c Jassi Brar 2018-01-06 2107
533dd11a12f698c Jassi Brar 2018-01-06 2108 priv->rx_cksum_offload_flag = true;
533dd11a12f698c Jassi Brar 2018-01-06 2109
533dd11a12f698c Jassi Brar 2018-01-06 2110 ret = netsec_register_mdio(priv, phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2111 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 2112 goto unreg_napi;
533dd11a12f698c Jassi Brar 2018-01-06 2113
312564269535892 Ard Biesheuvel 2018-05-25 2114 if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(40)))
312564269535892 Ard Biesheuvel 2018-05-25 2115 dev_warn(&pdev->dev, "Failed to set DMA mask\n");
533dd11a12f698c Jassi Brar 2018-01-06 2116
533dd11a12f698c Jassi Brar 2018-01-06 2117 ret = register_netdev(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2118 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 2119 netif_err(priv, probe, ndev, "register_netdev() failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2120 goto unreg_mii;
533dd11a12f698c Jassi Brar 2018-01-06 2121 }
533dd11a12f698c Jassi Brar 2018-01-06 2122
533dd11a12f698c Jassi Brar 2018-01-06 2123 pm_runtime_put_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2124 return 0;
533dd11a12f698c Jassi Brar 2018-01-06 2125
533dd11a12f698c Jassi Brar 2018-01-06 2126 unreg_mii:
533dd11a12f698c Jassi Brar 2018-01-06 2127 netsec_unregister_mdio(priv);
533dd11a12f698c Jassi Brar 2018-01-06 2128 unreg_napi:
533dd11a12f698c Jassi Brar 2018-01-06 2129 netif_napi_del(&priv->napi);
533dd11a12f698c Jassi Brar 2018-01-06 2130 pm_disable:
533dd11a12f698c Jassi Brar 2018-01-06 2131 pm_runtime_put_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2132 pm_runtime_disable(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2133 free_ndev:
533dd11a12f698c Jassi Brar 2018-01-06 2134 free_netdev(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2135 dev_err(&pdev->dev, "init failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2136
533dd11a12f698c Jassi Brar 2018-01-06 2137 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 2138 }
533dd11a12f698c Jassi Brar 2018-01-06 2139
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 43101 bytes --]
next prev parent reply other threads:[~2021-02-10 16:23 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-10 14:18 [RFC bpf-next] bpf: devmap: move drop error path to devmpap for XDP_REDIRECT Lorenzo Bianconi
2021-02-10 15:29 ` Jesper Dangaard Brouer
2021-02-10 16:23 ` kernel test robot [this message]
2021-02-10 18:19 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202102110055.gWXbY677-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.