From: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
To: David Miller <davem@davemloft.net>,
David Laight <David.Laight@aculab.com>
Cc: netdev@vger.kernel.org, fengguang.wu@intel.com, dcbw@redhat.com,
jiri@resnulli.us, stephen@networkplumber.org
Subject: Re: [PATCH net-next 3/3 v4] drivers: net: ethernet: qualcomm: rmnet: Initial implementation
Date: Wed, 16 Aug 2017 11:38:16 -0600 [thread overview]
Message-ID: <60e2cdb8b1c442cc1c40dab750e8b7b6@codeaurora.org> (raw)
In-Reply-To: <20170815.212414.71937112074428743.davem@davemloft.net>
>> > +static int rmnet_unregister_real_device(struct net_device *dev)
>> > +{
>> > + int config_id = RMNET_LOCAL_LOGICAL_ENDPOINT;
>> > + struct rmnet_logical_ep_conf_s *epconfig_l;
>> > + struct rmnet_phys_ep_conf_s *config;
>> > +
>> > + ASSERT_RTNL();
>> > +
>> > + netdev_info(dev, "Removing device %s\n", dev->name);
>> > +
>> > + if (!rmnet_is_real_dev_registered(dev))
>> > + return -EINVAL;
>> > +
>> > + for (; config_id < RMNET_MAX_LOGICAL_EP; config_id++) {
>>
>> This loop is so much harder to understand because you initialize
>> the loop index several lines above the for() statement. Just
>> initialize it here at the beginning of the for() loop and deal
>> with the fact that this will have to therefore be a multi-line
>> for() statement the best you can.
> ...
>
> One way to split the multi-line for() is to put the initialiser
> on the immediately preceding line:
> config_id = RMNET_LOCAL_LOGICAL_ENDPOINT;
> for (; config_id < RMNET_MAX_LOGICAL_EP; config_id++) {
>
> David
Hi DaveM / David
I'll move the initialization as above.
>
>> +static int rmnet_set_egress_data_format(struct net_device *dev, u32
>> edf,
>> + u16 agg_size, u16 agg_count)
>
> Use a space instead of a TAB character before the "u32 edf," argument.
>
I'll fix this.
>> +static int
>> +__rmnet_set_logical_endpoint_config(struct net_device *dev,
>> + int config_id,
>> + struct rmnet_logical_ep_conf_s *epconfig)
>> +{
>> + struct rmnet_logical_ep_conf_s *epconfig_l;
>> +
>> + ASSERT_RTNL();
>> +
>> + epconfig_l = rmnet_get_logical_ep(dev, config_id);
>> +
>> + if (!epconfig_l || epconfig_l->refcount)
>> + return -EINVAL;
>> +
>> + memcpy(epconfig_l, epconfig, sizeof(struct
>> rmnet_logical_ep_conf_s));
>> + if (config_id == RMNET_LOCAL_LOGICAL_ENDPOINT)
>> + epconfig_l->mux_id = 0;
>> + else
>> + epconfig_l->mux_id = config_id;
>> +
>> + dev_hold(epconfig_l->egress_dev);
>> + return 0;
>> +}
>
> This looks really messy.
>
> One invariant that must hold is that if I try to take down netdev
> "X", all resources holding a reference to X will be immediately
> (or quickly) dropped when that request comes in via notifiers.
>
> Will this happen properly for this egress_dev reference counting?
>
>> +static int rmnet_config_notify_cb(struct notifier_block *nb,
>> + unsigned long event, void *data)
>> +{
>> + struct net_device *dev = netdev_notifier_info_to_dev(data);
>> +
>> + if (!dev)
>> + return NOTIFY_DONE;
>> +
>> + switch (event) {
>> + case NETDEV_UNREGISTER_FINAL:
>> + case NETDEV_UNREGISTER:
>> + netdev_info(dev, "Kernel unregister\n");
>> + rmnet_force_unassociate_device(dev);
>> + break;
>
> So I guess it happens here?
Yes, all the rmnet devices are removed from the real_dev
in the notifier callback.
next prev parent reply other threads:[~2017-08-16 17:38 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-16 4:15 [PATCH net-next 0/3 v4] Add support for rmnet driver Subash Abhinov Kasiviswanathan
2017-08-16 4:15 ` [PATCH net-next 1/3 v4] net: ether: Add support for multiplexing and aggregation type Subash Abhinov Kasiviswanathan
2017-08-16 4:15 ` [PATCH net-next 2/3 v4] net: arp: Add support for raw IP device Subash Abhinov Kasiviswanathan
2017-08-16 4:52 ` Marcel Holtmann
2017-08-17 0:59 ` Subash Abhinov Kasiviswanathan
2017-08-16 4:15 ` [PATCH net-next 3/3 v4] drivers: net: ethernet: qualcomm: rmnet: Initial implementation Subash Abhinov Kasiviswanathan
2017-08-16 4:24 ` David Miller
2017-08-16 11:08 ` David Laight
2017-08-16 17:38 ` Subash Abhinov Kasiviswanathan [this message]
2017-08-16 11:30 ` Jiri Pirko
2017-08-16 17:46 ` Subash Abhinov Kasiviswanathan
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=60e2cdb8b1c442cc1c40dab750e8b7b6@codeaurora.org \
--to=subashab@codeaurora.org \
--cc=David.Laight@aculab.com \
--cc=davem@davemloft.net \
--cc=dcbw@redhat.com \
--cc=fengguang.wu@intel.com \
--cc=jiri@resnulli.us \
--cc=netdev@vger.kernel.org \
--cc=stephen@networkplumber.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 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).