lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Mon, 9 Aug 2021 13:17:13 -0400 From: Jonathan Toppins <jtoppins@...hat.com> To: Joe Perches <joe@...ches.com>, netdev@...r.kernel.org Cc: Jay Vosburgh <j.vosburgh@...il.com>, Veaceslav Falico <vfalico@...il.com>, Andy Gospodarek <andy@...yhouse.net>, "David S. Miller" <davem@...emloft.net>, Jakub Kicinski <kuba@...nel.org>, linux-kernel@...r.kernel.org Subject: Re: [PATCH net-next 2/2] bonding: combine netlink and console error messages On 8/9/21 1:05 AM, Joe Perches wrote: > On Sun, 2021-08-08 at 22:07 -0400, Jonathan Toppins wrote: >> On 8/8/21 6:02 AM, Joe Perches wrote: >>> On Sat, 2021-08-07 at 17:54 -0400, Jonathan Toppins wrote: >>>> On 8/6/21 11:52 PM, Joe Perches wrote: >>>>> On Fri, 2021-08-06 at 23:30 -0400, Jonathan Toppins wrote: >>>>>> There seems to be no reason to have different error messages between >>>>>> netlink and printk. It also cleans up the function slightly. >>>>> [] >>>>>> diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c >>>>> [] >>>>>> +#define BOND_NL_ERR(bond_dev, extack, errmsg) do { \ >>>>>> + NL_SET_ERR_MSG(extack, errmsg); \ >>>>>> + netdev_err(bond_dev, "Error: " errmsg "\n"); \ >>>>>> +} while (0) >>>>>> + >>>>>> +#define SLAVE_NL_ERR(bond_dev, slave_dev, extack, errmsg) do { \ >>>>>> + NL_SET_ERR_MSG(extack, errmsg); \ >>>>>> + slave_err(bond_dev, slave_dev, "Error: " errmsg "\n"); \ >>>>>> +} while (0) >>>>> >>>>> If you are doing this, it's probably smaller object code to use >>>>> "%s", errmsg >>>>> as the errmsg string can be reused >>>>> >>>>> #define BOND_NL_ERR(bond_dev, extack, errmsg) \ >>>>> do { \ >>>>> NL_SET_ERR_MSG(extack, errmsg); \ >>>>> netdev_err(bond_dev, "Error: %s\n", errmsg); \ >>>>> } while (0) >>>>> >>>>> #define SLAVE_NL_ERR(bond_dev, slave_dev, extack, errmsg) \ >>>>> do { \ >>>>> NL_SET_ERR_MSG(extack, errmsg); \ >>>>> slave_err(bond_dev, slave_dev, "Error: %s\n", errmsg); \ >>>>> } while (0) >>>>> >>>>> >>>> >>>> I like the thought and would agree if not for how NL_SET_ERR_MSG is >>>> coded. Unfortunately it does not appear as though doing the above change >>>> actually generates smaller object code. Maybe I have incorrectly >>>> interpreted something? >>> >>> No, it's because you are compiling allyesconfig or equivalent. >>> Try defconfig with bonding. >>> >>> >> >> $ git clean -dxf >> $ git log -1 -p >> commit 8985f8d3fa38bca5f5384f9210ed735d58fd94f2 (HEAD -> >> upstream-bonding-cleanup) >> Author: Jonathan Toppins <jtoppins@...hat.com> >> Date: Sun Aug 8 21:45:14 2021 -0400 >> >> object code optimization >> >> diff --git a/drivers/net/bonding/bond_main.c >> b/drivers/net/bonding/bond_main.c >> index 46b95175690b..e2903ae7cdab 100644 >> --- a/drivers/net/bonding/bond_main.c >> +++ b/drivers/net/bonding/bond_main.c >> @@ -1714,12 +1714,12 @@ void bond_lower_state_changed(struct slave *slave) >> >> #define BOND_NL_ERR(bond_dev, extack, errmsg) do { \ >> NL_SET_ERR_MSG(extack, errmsg); \ >> - netdev_err(bond_dev, "Error: " errmsg "\n"); \ >> + netdev_err(bond_dev, "Error: %s\n", errmsg); \ >> } while (0) >> >> #define SLAVE_NL_ERR(bond_dev, slave_dev, extack, errmsg) do { \ >> NL_SET_ERR_MSG(extack, errmsg); \ >> - slave_err(bond_dev, slave_dev, "Error: " errmsg "\n"); \ >> + slave_err(bond_dev, slave_dev, "Error: %s\n", errmsg); \ >> } while (0) >> >> /* enslave device <slave> to bond device <master> */ >> $ git log --oneline -2 >> 8985f8d3fa38 (HEAD -> upstream-bonding-cleanup) object code optimization >> e326bf8fd30f bonding: combine netlink and console error messages >> $ make defconfig >> HOSTCC scripts/basic/fixdep >> [...] >> *** Default configuration is based on 'x86_64_defconfig' >> # >> # configuration written to .config >> # >> $ grep "BONDING" .config >> # CONFIG_BONDING is not set >> $ make menuconfig >> UPD scripts/kconfig/mconf-cfg >> [...] >> configuration written to .config >> >> *** End of the configuration. >> *** Execute 'make' to start the build or try 'make help'. >> >> $ grep "BONDING" .config >> CONFIG_BONDING=m >> $ git rebase -i --exec "make drivers/net/bonding/bond_main.o; ls -l >> drivers/net/bonding/bond_main.o" HEAD^^ >> Executing: make drivers/net/bonding/bond_main.o; ls -l >> drivers/net/bonding/bond_main.o >> SYNC include/config/auto.conf.cmd >> [...] >> CC /home/jtoppins/projects/linux-rhel7/tools/objtool/librbtree.o >> LD /home/jtoppins/projects/linux-rhel7/tools/objtool/objtool-in.o >> LINK /home/jtoppins/projects/linux-rhel7/tools/objtool/objtool >> CC [M] drivers/net/bonding/bond_main.o >> -rw-r--r--. 1 jtoppins jtoppins 131800 Aug 8 21:47 >> drivers/net/bonding/bond_main.o >> Executing: make drivers/net/bonding/bond_main.o; ls -l >> drivers/net/bonding/bond_main.o >> CALL scripts/checksyscalls.sh >> CALL scripts/atomic/check-atomics.sh >> DESCEND objtool >> CC [M] drivers/net/bonding/bond_main.o >> -rw-r--r--. 1 jtoppins jtoppins 131928 Aug 8 21:47 > > Your size is significantly different than mine (x86-64 defconfig w/ bonding) > > $ gcc --version > gcc (Ubuntu 10.3.0-1ubuntu1) 10.3.0 > Copyright (C) 2020 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > > Original: > > $ git log -1 > commit 7999516e20bd9bb5d1f7351cbd05ca529a3a8d60 (HEAD, tag: next-20210806, origin/master, origin/HEAD) > Author: Mark Brown <broonie@...nel.org> > Date: Fri Aug 6 17:52:53 2021 +0100 > > Add linux-next specific files for 20210806 > > Signed-off-by: Mark Brown <broonie@...nel.org> > > $ size drivers/net/bonding/built-in.a -t > text data bss dec hex filename > 59630 399 460 60489 ec49 drivers/net/bonding/bond_main.o (ex drivers/net/bonding/built-in.a) > 16790 14 2 16806 41a6 drivers/net/bonding/bond_3ad.o (ex drivers/net/bonding/built-in.a) > 17101 50 0 17151 42ff drivers/net/bonding/bond_alb.o (ex drivers/net/bonding/built-in.a) > 7116 1516 0 8632 21b8 drivers/net/bonding/bond_sysfs.o (ex drivers/net/bonding/built-in.a) > 1411 72 0 1483 5cb drivers/net/bonding/bond_sysfs_slave.o (ex drivers/net/bonding/built-in.a) > 165 0 0 165 a5 drivers/net/bonding/bond_debugfs.o (ex drivers/net/bonding/built-in.a) > 6971 232 0 7203 1c23 drivers/net/bonding/bond_netlink.o (ex drivers/net/bonding/built-in.a) > 15889 74 0 15963 3e5b drivers/net/bonding/bond_options.o (ex drivers/net/bonding/built-in.a) > 4769 0 0 4769 12a1 drivers/net/bonding/bond_procfs.o (ex drivers/net/bonding/built-in.a) > 129842 2357 462 132661 20635 (TOTALS) > > Then with your 2 patches: > > $ size -t drivers/net/bonding/built-in.a > text data bss dec hex filename > 59590 399 460 60449 ec21 drivers/net/bonding/bond_main.o (ex drivers/net/bonding/built-in.a) > 16790 14 2 16806 41a6 drivers/net/bonding/bond_3ad.o (ex drivers/net/bonding/built-in.a) > 17101 50 0 17151 42ff drivers/net/bonding/bond_alb.o (ex drivers/net/bonding/built-in.a) > 7116 1516 0 8632 21b8 drivers/net/bonding/bond_sysfs.o (ex drivers/net/bonding/built-in.a) > 1411 72 0 1483 5cb drivers/net/bonding/bond_sysfs_slave.o (ex drivers/net/bonding/built-in.a) > 165 0 0 165 a5 drivers/net/bonding/bond_debugfs.o (ex drivers/net/bonding/built-in.a) > 6971 232 0 7203 1c23 drivers/net/bonding/bond_netlink.o (ex drivers/net/bonding/built-in.a) > 15889 74 0 15963 3e5b drivers/net/bonding/bond_options.o (ex drivers/net/bonding/built-in.a) > 4769 0 0 4769 12a1 drivers/net/bonding/bond_procfs.o (ex drivers/net/bonding/built-in.a) > 129802 2357 462 132621 2060d (TOTALS) > > Then with my suggestion: > > $ size -t drivers/net/bonding/built-in.a > text data bss dec hex filename > 59561 399 460 60420 ec04 drivers/net/bonding/bond_main.o (ex drivers/net/bonding/built-in.a) > 16790 14 2 16806 41a6 drivers/net/bonding/bond_3ad.o (ex drivers/net/bonding/built-in.a) > 17101 50 0 17151 42ff drivers/net/bonding/bond_alb.o (ex drivers/net/bonding/built-in.a) > 7116 1516 0 8632 21b8 drivers/net/bonding/bond_sysfs.o (ex drivers/net/bonding/built-in.a) > 1411 72 0 1483 5cb drivers/net/bonding/bond_sysfs_slave.o (ex drivers/net/bonding/built-in.a) > 165 0 0 165 a5 drivers/net/bonding/bond_debugfs.o (ex drivers/net/bonding/built-in.a) > 6971 232 0 7203 1c23 drivers/net/bonding/bond_netlink.o (ex drivers/net/bonding/built-in.a) > 15889 74 0 15963 3e5b drivers/net/bonding/bond_options.o (ex drivers/net/bonding/built-in.a) > 4769 0 0 4769 12a1 drivers/net/bonding/bond_procfs.o (ex drivers/net/bonding/built-in.a) > 129773 2357 462 132592 205f0 (TOTALS) > > cheers, Joe > Humm I was just building the .o of the one compilation unit. I wonder if there is further optimization later. Will post a v2 with yours and Leon's changes later this evening. Appreciate the suggestions. -Jon
Powered by blists - more mailing lists