* [PATCH ethtool v2 0/3] Add copybreak support
@ 2014-10-06 23:12 Govindarajulu Varadarajan
2014-10-06 23:12 ` [PATCH ethtool v2 1/3] ethtool-copy.h: Sync with net-next 3.17.0-rc7 Govindarajulu Varadarajan
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Govindarajulu Varadarajan @ 2014-10-06 23:12 UTC (permalink / raw)
To: ben; +Cc: netdev, ogerlitz, yevgenyp, Govindarajulu Varadarajan
This series add support for setting/getting driver's copybreak value.
copybreak is set/get using ethtool tunable interface.
This was added to net-next in
commit: f0db9b073415848709dd59a6394969882f517da9
ethtool: Add generic options for tunables
v2:
Add support for tx_copybreak
Add 'ethtool -B eth0 rx 100 tx 256' instead of 'ethtool -B eth0 100'
Govindarajulu Varadarajan (3):
ethtool-copy.h: Sync with net-next 3.17.0-rc7
ethtool: Add copybreak support
ethtool.8.in: Add man page for copybreak
ethtool-copy.h | 29 ++++++++++
ethtool.8.in | 20 +++++++
ethtool.c | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 226 insertions(+)
--
2.1.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH ethtool v2 1/3] ethtool-copy.h: Sync with net-next 3.17.0-rc7 2014-10-06 23:12 [PATCH ethtool v2 0/3] Add copybreak support Govindarajulu Varadarajan @ 2014-10-06 23:12 ` Govindarajulu Varadarajan 2014-10-06 23:12 ` [PATCH ethtool v2 2/3] ethtool: Add copybreak support Govindarajulu Varadarajan 2014-10-06 23:12 ` [PATCH ethtool v2 3/3] ethtool.8.in: Add man page for copybreak Govindarajulu Varadarajan 2 siblings, 0 replies; 7+ messages in thread From: Govindarajulu Varadarajan @ 2014-10-06 23:12 UTC (permalink / raw) To: ben; +Cc: netdev, ogerlitz, yevgenyp, Govindarajulu Varadarajan This covers kernel changes up to: commit: 1255a5055449781a92076fc5429952f2b33cf309 Author: Eric Dumazet <edumazet@google.com> Date: Sun Oct 5 12:35:21 2014 +0300 ethtool: Ethtool parameter to dynamically change tx_copybreak Signed-off-by: Govindarajulu Varadarajan <_govind@gmx.com> --- ethtool-copy.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/ethtool-copy.h b/ethtool-copy.h index 61b78fc..3c89379 100644 --- a/ethtool-copy.h +++ b/ethtool-copy.h @@ -209,6 +209,33 @@ struct ethtool_value { __u32 data; }; +enum tunable_id { + ETHTOOL_ID_UNSPEC, + ETHTOOL_RX_COPYBREAK, + ETHTOOL_TX_COPYBREAK, +}; + +enum tunable_type_id { + ETHTOOL_TUNABLE_UNSPEC, + ETHTOOL_TUNABLE_U8, + ETHTOOL_TUNABLE_U16, + ETHTOOL_TUNABLE_U32, + ETHTOOL_TUNABLE_U64, + ETHTOOL_TUNABLE_STRING, + ETHTOOL_TUNABLE_S8, + ETHTOOL_TUNABLE_S16, + ETHTOOL_TUNABLE_S32, + ETHTOOL_TUNABLE_S64, +}; + +struct ethtool_tunable { + __u32 cmd; + __u32 id; + __u32 type_id; + __u32 len; + void *data[0]; +}; + /** * struct ethtool_regs - hardware register dump * @cmd: Command number = %ETHTOOL_GREGS @@ -1152,6 +1179,8 @@ enum ethtool_sfeatures_retval_bits { #define ETHTOOL_GRSSH 0x00000046 /* Get RX flow hash configuration */ #define ETHTOOL_SRSSH 0x00000047 /* Set RX flow hash configuration */ +#define ETHTOOL_GTUNABLE 0x00000048 /* Get tunable configuration */ +#define ETHTOOL_STUNABLE 0x00000049 /* Set tunable configuration */ /* compatibility with older code */ #define SPARC_ETH_GSET ETHTOOL_GSET -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH ethtool v2 2/3] ethtool: Add copybreak support 2014-10-06 23:12 [PATCH ethtool v2 0/3] Add copybreak support Govindarajulu Varadarajan 2014-10-06 23:12 ` [PATCH ethtool v2 1/3] ethtool-copy.h: Sync with net-next 3.17.0-rc7 Govindarajulu Varadarajan @ 2014-10-06 23:12 ` Govindarajulu Varadarajan 2014-12-14 17:46 ` Ben Hutchings 2014-10-06 23:12 ` [PATCH ethtool v2 3/3] ethtool.8.in: Add man page for copybreak Govindarajulu Varadarajan 2 siblings, 1 reply; 7+ messages in thread From: Govindarajulu Varadarajan @ 2014-10-06 23:12 UTC (permalink / raw) To: ben; +Cc: netdev, ogerlitz, yevgenyp, Govindarajulu Varadarajan This patch adds support for setting/getting driver's rx_copybreak value. copybreak is set/get using new ethtool tunable interface. This was added to net-next in commit: f0db9b073415848709dd59a6394969882f517da9 ethtool: Add generic options for tunables Signed-off-by: Govindarajulu Varadarajan <_govind@gmx.com> --- ethtool.c | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) diff --git a/ethtool.c b/ethtool.c index bf583f3..4045356 100644 --- a/ethtool.c +++ b/ethtool.c @@ -179,6 +179,12 @@ static const struct flag_info flags_msglvl[] = { { "wol", NETIF_MSG_WOL }, }; +static const char *tunable_name[] = { + [ETHTOOL_ID_UNSPEC] = "Unspec", + [ETHTOOL_RX_COPYBREAK] = "rx", + [ETHTOOL_TX_COPYBREAK] = "tx", +}; + struct off_flag_def { const char *short_name; const char *long_name; @@ -1805,6 +1811,173 @@ static int do_gring(struct cmd_context *ctx) return 0; } +static int get_u32tunable(struct cmd_context *ctx, enum tunable_id id, + __u32 *value) +{ + struct ethtool_tunable *etuna; + int ret; + + etuna = calloc(sizeof(*etuna) + sizeof(__u32), 1); + if (!etuna) + return 1; + etuna->cmd = ETHTOOL_GTUNABLE; + etuna->id = id; + etuna->type_id = ETHTOOL_TUNABLE_U32; + etuna->len = sizeof(__u32); + ret = send_ioctl(ctx, etuna); + *value = *(__u32 *)((void *)etuna + sizeof(*etuna)); + free(etuna); + + return ret; +} + +static int print_u32tunable(int err, enum tunable_id id, const __u32 value) +{ + if (err) { + switch (errno) { + /* Driver does not support this particular tunable + * Usually displays 0 + */ + case EINVAL: + goto print; + /* Driver does not support get tunables ops or no such device + * No point in proceeding further + */ + case EOPNOTSUPP: + case ENODEV: + perror("Cannot get device settings"); + exit(err); + default: + perror(tunable_name[id]); + return err; + } + } +print: + fprintf(stdout, "%s: %u\n", tunable_name[id], value); + + return 0; +} + +static int do_gcopybreak(struct cmd_context *ctx) +{ + int err, anyerror = 0; + __u32 u32value; + + if (ctx->argc != 0) + exit_bad_args(); + + fprintf(stdout, "Copybreak settings for device %s\n", ctx->devname); + + err = get_u32tunable(ctx, ETHTOOL_RX_COPYBREAK, &u32value); + err = print_u32tunable(err, ETHTOOL_RX_COPYBREAK, u32value); + if (err) + anyerror = err; + + err = get_u32tunable(ctx, ETHTOOL_TX_COPYBREAK, &u32value); + err = print_u32tunable(err, ETHTOOL_TX_COPYBREAK, u32value); + if (err) + anyerror = err; + + if (anyerror) + fprintf(stderr, "Failed to get all settings. displayed partial settings\n"); + + return anyerror; +} + +static int set_u32tunable(struct cmd_context *ctx, enum tunable_id id, + const __u32 value) +{ + struct ethtool_tunable *etuna; + int ret; + __u32 *data; + + etuna = malloc(sizeof(*etuna) + sizeof(__u32)); + if (!etuna) { + perror(tunable_name[id]); + return 1; + } + data = (void *)etuna + sizeof(*etuna); + *data = value; + etuna->cmd = ETHTOOL_STUNABLE; + etuna->id = id; + etuna->type_id = ETHTOOL_TUNABLE_U32; + etuna->len = sizeof(__u32); + ret = send_ioctl(ctx, etuna); + free(etuna); + + return ret; +} + +static int check_set_u32tunable(int err, enum tunable_id id) +{ + if (err) { + switch (errno) { + /* Driver does not support get tunables ops or no such device + * No point in proceeding further + */ + case EOPNOTSUPP: + case ENODEV: + perror("Cannot set device settings"); + exit(err); + default: + perror(tunable_name[id]); + return err; + } + } + + return 0; +} + +static int do_scopybreak(struct cmd_context *ctx) +{ + int err, anyerr = 0; + int copybreak_changed = 0; + __u32 rx, tx; + s32 rx_seen = 0; + s32 tx_seen = 0; + + struct cmdline_info cmdline_channels[] = { + { .name = "rx", + .type = CMDL_U32, + .wanted_val = &rx, + .seen_val = &rx_seen, }, + + { .name = "tx", + .type = CMDL_U32, + .wanted_val = &tx, + .seen_val = &tx_seen, }, + }; + + parse_generic_cmdline(ctx, ©break_changed, cmdline_channels, + ARRAY_SIZE(cmdline_channels)); + + if (!copybreak_changed) { + fprintf(stderr, "no copybreak parameters changed\n"); + return 0; + } + + if (rx_seen) { + err = set_u32tunable(ctx, ETHTOOL_RX_COPYBREAK, rx); + err = check_set_u32tunable(err, ETHTOOL_RX_COPYBREAK); + if (err) + anyerr = err; + } + + if (tx_seen) { + err = set_u32tunable(ctx, ETHTOOL_TX_COPYBREAK, tx); + err = check_set_u32tunable(err, ETHTOOL_TX_COPYBREAK); + if (err) + anyerr = err; + } + + if (anyerr) { + fprintf(stderr, "Failed to set all requested parameters\n"); + return anyerr; + } + + return 0; +} + static int do_schannels(struct cmd_context *ctx) { struct ethtool_channels echannels; @@ -4055,6 +4228,10 @@ static const struct option { " [ rx-mini N ]\n" " [ rx-jumbo N ]\n" " [ tx N ]\n" }, + { "-b|--show-copybreak", 1, do_gcopybreak, "Show copybreak values" }, + { "-B|--set-copybreak", 1, do_scopybreak, "Set copybreak values", + " [ rx N]\n" + " [ tx N]\n" }, { "-k|--show-features|--show-offload", 1, do_gfeatures, "Get state of protocol offload and other features" }, { "-K|--features|--offload", 1, do_sfeatures, -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH ethtool v2 2/3] ethtool: Add copybreak support 2014-10-06 23:12 ` [PATCH ethtool v2 2/3] ethtool: Add copybreak support Govindarajulu Varadarajan @ 2014-12-14 17:46 ` Ben Hutchings 2015-05-13 7:18 ` Hadar Hen Zion 0 siblings, 1 reply; 7+ messages in thread From: Ben Hutchings @ 2014-12-14 17:46 UTC (permalink / raw) To: Govindarajulu Varadarajan; +Cc: netdev, ogerlitz, yevgenyp [-- Attachment #1: Type: text/plain, Size: 1987 bytes --] On Tue, 2014-10-07 at 04:42 +0530, Govindarajulu Varadarajan wrote: > This patch adds support for setting/getting driver's rx_copybreak value. > copybreak is set/get using new ethtool tunable interface. > > This was added to net-next in > commit: f0db9b073415848709dd59a6394969882f517da9 > > ethtool: Add generic options for tunables > > Signed-off-by: Govindarajulu Varadarajan <_govind@gmx.com> > --- > ethtool.c | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 177 insertions(+) > > diff --git a/ethtool.c b/ethtool.c > index bf583f3..4045356 100644 > --- a/ethtool.c > +++ b/ethtool.c > @@ -179,6 +179,12 @@ static const struct flag_info flags_msglvl[] = { > { "wol", NETIF_MSG_WOL }, > }; > > +static const char *tunable_name[] = { > + [ETHTOOL_ID_UNSPEC] = "Unspec", > + [ETHTOOL_RX_COPYBREAK] = "rx", > + [ETHTOOL_TX_COPYBREAK] = "tx", > +}; Tunables should be named by a string set defined in the kernel. [...] > @@ -4055,6 +4228,10 @@ static const struct option { > " [ rx-mini N ]\n" > " [ rx-jumbo N ]\n" > " [ tx N ]\n" }, > + { "-b|--show-copybreak", 1, do_gcopybreak, "Show copybreak values" }, > + { "-B|--set-copybreak", 1, do_scopybreak, "Set copybreak values", > + " [ rx N]\n" > + " [ tx N]\n" }, > { "-k|--show-features|--show-offload", 1, do_gfeatures, > "Get state of protocol offload and other features" }, > { "-K|--features|--offload", 1, do_sfeatures, [...] T don't think this is worth two options of its own. You should be able to add generic get/set-tunable optins. You'll need to get the string set to find out the names of tunables. When setting a tunable, you'll need to get it first to find out its type. Ben. -- Ben Hutchings The two most common things in the universe are hydrogen and stupidity. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 811 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH ethtool v2 2/3] ethtool: Add copybreak support 2014-12-14 17:46 ` Ben Hutchings @ 2015-05-13 7:18 ` Hadar Hen Zion 2015-05-19 3:47 ` Govindarajulu Varadarajan 0 siblings, 1 reply; 7+ messages in thread From: Hadar Hen Zion @ 2015-05-13 7:18 UTC (permalink / raw) To: Govindarajulu Varadarajan, Ben Hutchings Cc: netdev, Or Gerlitz, yevgenyp, Amir Vadai On Sun, Dec 14, 2014 at 8:46 PM, Ben Hutchings <ben@decadent.org.uk> wrote: > On Tue, 2014-10-07 at 04:42 +0530, Govindarajulu Varadarajan wrote: >> This patch adds support for setting/getting driver's rx_copybreak value. >> copybreak is set/get using new ethtool tunable interface. >> >> This was added to net-next in >> commit: f0db9b073415848709dd59a6394969882f517da9 >> >> ethtool: Add generic options for tunables >> >> Signed-off-by: Govindarajulu Varadarajan <_govind@gmx.com> >> --- >> ethtool.c | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 177 insertions(+) >> >> diff --git a/ethtool.c b/ethtool.c >> index bf583f3..4045356 100644 >> --- a/ethtool.c >> +++ b/ethtool.c >> @@ -179,6 +179,12 @@ static const struct flag_info flags_msglvl[] = { >> { "wol", NETIF_MSG_WOL }, >> }; >> >> +static const char *tunable_name[] = { >> + [ETHTOOL_ID_UNSPEC] = "Unspec", >> + [ETHTOOL_RX_COPYBREAK] = "rx", >> + [ETHTOOL_TX_COPYBREAK] = "tx", >> +}; > > Tunables should be named by a string set defined in the kernel. > > [...] >> @@ -4055,6 +4228,10 @@ static const struct option { >> " [ rx-mini N ]\n" >> " [ rx-jumbo N ]\n" >> " [ tx N ]\n" }, >> + { "-b|--show-copybreak", 1, do_gcopybreak, "Show copybreak values" }, >> + { "-B|--set-copybreak", 1, do_scopybreak, "Set copybreak values", >> + " [ rx N]\n" >> + " [ tx N]\n" }, >> { "-k|--show-features|--show-offload", 1, do_gfeatures, >> "Get state of protocol offload and other features" }, >> { "-K|--features|--offload", 1, do_sfeatures, > [...] > > T don't think this is worth two options of its own. You should be able > to add generic get/set-tunable optins. You'll need to get the string > set to find out the names of tunables. When setting a tunable, you'll > need to get it first to find out its type. > > Ben. > > -- > Ben Hutchings > The two most common things in the universe are hydrogen and stupidity. Hi Govindarajulu, Do you have a patch that fixes Ben's comments? I would like to add the copybreak feature so let me know if you want me to fix the patch according to Ben's comments and resend it. Thanks, Hadar ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH ethtool v2 2/3] ethtool: Add copybreak support 2015-05-13 7:18 ` Hadar Hen Zion @ 2015-05-19 3:47 ` Govindarajulu Varadarajan 0 siblings, 0 replies; 7+ messages in thread From: Govindarajulu Varadarajan @ 2015-05-19 3:47 UTC (permalink / raw) To: Hadar Hen Zion Cc: Govindarajulu Varadarajan, Ben Hutchings, netdev, Or Gerlitz, yevgenyp, Amir Vadai On Wed, 13 May 2015, Hadar Hen Zion wrote: > Hi Govindarajulu, > > Do you have a patch that fixes Ben's comments? > > I would like to add the copybreak feature so let me know if you want > me to fix the patch according to Ben's comments and resend it. > Hi Hadar I haven't looked at this for a while. Please go ahead. Thanks ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH ethtool v2 3/3] ethtool.8.in: Add man page for copybreak 2014-10-06 23:12 [PATCH ethtool v2 0/3] Add copybreak support Govindarajulu Varadarajan 2014-10-06 23:12 ` [PATCH ethtool v2 1/3] ethtool-copy.h: Sync with net-next 3.17.0-rc7 Govindarajulu Varadarajan 2014-10-06 23:12 ` [PATCH ethtool v2 2/3] ethtool: Add copybreak support Govindarajulu Varadarajan @ 2014-10-06 23:12 ` Govindarajulu Varadarajan 2 siblings, 0 replies; 7+ messages in thread From: Govindarajulu Varadarajan @ 2014-10-06 23:12 UTC (permalink / raw) To: ben; +Cc: netdev, ogerlitz, yevgenyp, Govindarajulu Varadarajan Signed-off-by: Govindarajulu Varadarajan <_govind@gmx.com> --- ethtool.8.in | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/ethtool.8.in b/ethtool.8.in index ae56293..9f0955f 100644 --- a/ethtool.8.in +++ b/ethtool.8.in @@ -176,6 +176,14 @@ ethtool \- query or control network driver and hardware settings .BN rx\-jumbo .BN tx .HP +.B ethtool \-b|\-\-show\-copybreak +.I devname +.HP +.B ethtool \-B|\-\-set\-copybreak +.I devname +.BN rx +.BN tx +.HP .B ethtool \-i|\-\-driver .I devname .HP @@ -399,6 +407,18 @@ Changes the number of ring entries for the Rx Jumbo ring. .BI tx \ N Changes the number of ring entries for the Tx ring. .TP +.B \-b|\-\-show\-copybreak +Get device copybreak values +.TP +.B \-B|\-\-set\-copybreak +Set device copybreak values +.TP +.BI rx \ N +Change rx_copybreak +.TP +.BI tx \ N +Change tx_copybreak +.TP .B \-i \-\-driver Queries the specified network device for associated driver information. .TP -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-05-19 3:47 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-10-06 23:12 [PATCH ethtool v2 0/3] Add copybreak support Govindarajulu Varadarajan 2014-10-06 23:12 ` [PATCH ethtool v2 1/3] ethtool-copy.h: Sync with net-next 3.17.0-rc7 Govindarajulu Varadarajan 2014-10-06 23:12 ` [PATCH ethtool v2 2/3] ethtool: Add copybreak support Govindarajulu Varadarajan 2014-12-14 17:46 ` Ben Hutchings 2015-05-13 7:18 ` Hadar Hen Zion 2015-05-19 3:47 ` Govindarajulu Varadarajan 2014-10-06 23:12 ` [PATCH ethtool v2 3/3] ethtool.8.in: Add man page for copybreak Govindarajulu Varadarajan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).