netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Loic Poulain <loic.poulain@linaro.org>
To: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Cc: Johannes Berg <johannes@sipsolutions.net>,
	"David S. Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>,
	Network Development <netdev@vger.kernel.org>,
	M Chetan Kumar <m.chetan.kumar@intel.com>,
	Aleksander Morgado <aleksander@aleksander.es>
Subject: Re: [PATCH net-next 09/10] net: mhi_net: create default link via WWAN core
Date: Mon, 21 Jun 2021 08:53:23 +0200	[thread overview]
Message-ID: <CAMZdPi_-4tWfo-adLPJvbR5deAD1HsO6XYKSpdHOSs9t-6X1CQ@mail.gmail.com> (raw)
In-Reply-To: <CAHNKnsRDuf=zuqeAMJgZ5kW6Kd1GsOd6-v5AX4ScCt7_muJp6g@mail.gmail.com>

Hi Sergey,

On Sun, 20 Jun 2021 at 15:51, Sergey Ryazanov <ryazanov.s.a@gmail.com> wrote:
>
> Hi Loic,
>
> CC Aleksander, as the talk drifts towards ModemManager.
>
> On Tue, Jun 15, 2021 at 10:08 AM Loic Poulain <loic.poulain@linaro.org> wrote:
> > On Tue, 15 Jun 2021 at 02:30, Sergey Ryazanov <ryazanov.s.a@gmail.com> wrote:
> >> Utilize the just introduced WWAN core feature to create a default netdev
> >> for the default data channel. Since the netdev is now created via the
> >> WWAN core, rely on it ability to destroy all child netdevs on ops
> >> unregistering.
> >>
> >> While at it, remove the RTNL lock acquiring hacks that were earlier used
> >> to call addlink/dellink without holding the RTNL lock. Also make the
> >> WWAN netdev ops structure static to make sparse happy.
> >>
> >> Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
> >> ---
> >>  drivers/net/mhi/net.c | 54 +++++--------------------------------------
> >>  1 file changed, 6 insertions(+), 48 deletions(-)
> >>
> >> diff --git a/drivers/net/mhi/net.c b/drivers/net/mhi/net.c
> >> index b003003cbd42..06253acecaa2 100644
> >> --- a/drivers/net/mhi/net.c
> >> +++ b/drivers/net/mhi/net.c
> >> @@ -342,10 +342,7 @@ static int mhi_net_newlink(void *ctxt, struct net_device *ndev, u32 if_id,
> >>         /* Number of transfer descriptors determines size of the queue */
> >>         mhi_netdev->rx_queue_sz = mhi_get_free_desc_count(mhi_dev, DMA_FROM_DEVICE);
> >>
> >> -       if (extack)
> >> -               err = register_netdevice(ndev);
> >> -       else
> >> -               err = register_netdev(ndev);
> >> +       err = register_netdevice(ndev);
> >>         if (err)
> >>                 goto out_err;
> >>
> >> @@ -370,10 +367,7 @@ static void mhi_net_dellink(void *ctxt, struct net_device *ndev,
> >>         struct mhi_net_dev *mhi_netdev = netdev_priv(ndev);
> >>         struct mhi_device *mhi_dev = ctxt;
> >>
> >> -       if (head)
> >> -               unregister_netdevice_queue(ndev, head);
> >> -       else
> >> -               unregister_netdev(ndev);
> >> +       unregister_netdevice_queue(ndev, head);
> >>
> >>         mhi_unprepare_from_transfer(mhi_dev);
> >>
> >> @@ -382,7 +376,7 @@ static void mhi_net_dellink(void *ctxt, struct net_device *ndev,
> >>         dev_set_drvdata(&mhi_dev->dev, NULL);
> >>  }
> >>
> >> -const struct wwan_ops mhi_wwan_ops = {
> >> +static const struct wwan_ops mhi_wwan_ops = {
> >>         .priv_size = sizeof(struct mhi_net_dev),
> >>         .setup = mhi_net_setup,
> >>         .newlink = mhi_net_newlink,
> >> @@ -392,55 +386,19 @@ const struct wwan_ops mhi_wwan_ops = {
> >>  static int mhi_net_probe(struct mhi_device *mhi_dev,
> >>                          const struct mhi_device_id *id)
> >>  {
> >> -       const struct mhi_device_info *info = (struct mhi_device_info *)id->driver_data;
> >>         struct mhi_controller *cntrl = mhi_dev->mhi_cntrl;
> >> -       struct net_device *ndev;
> >> -       int err;
> >> -
> >> -       err = wwan_register_ops(&cntrl->mhi_dev->dev, &mhi_wwan_ops, mhi_dev,
> >> -                               WWAN_NO_DEFAULT_LINK);
> >> -       if (err)
> >> -               return err;
> >> -
> >> -       if (!create_default_iface)
> >> -               return 0;
> >> -
> >> -       /* Create a default interface which is used as either RMNET real-dev,
> >> -        * MBIM link 0 or ip link 0)
> >> -        */
> >> -       ndev = alloc_netdev(sizeof(struct mhi_net_dev), info->netname,
> >> -                           NET_NAME_PREDICTABLE, mhi_net_setup);
> >
> > I like the idea of the default link, but here we need to create the
> > netdev manually for several reasons:
> > - In case of QMAP/rmnet, this link is the lower netdev (transport
> > layer) and is not associated with any link id.
> > - In case of MBIM, it changes the netdev parent device from the MHI
> > dev to the WWAN dev, which (currently) breaks how ModemManager groups
> > ports/netdevs (based on bus).
> >
> > For the last one, I don't think device hierarchy is considered as
> > UAPI, so we probably just need to add this new wwan link support to
> > user tools like MM. For the first one, I plan to split the mhi_net
> > driver into two different ones (mhi_net_qmap, mhi_net_mbim), and in
> > the case of qmap(rmnet) forward newlink/dellink call to rmnet
> > rtnetlink ops.
>
> Looks like I missed the complexity of WWAN devices handling. Thank you
> for pointing that out. Now I will drop this patch from the series.
>
> Just curious, am I right to say that any network interface created
> with wwan-core is not usable with ModemManager at the moment? AFAIU,
> ModemManager is unable to bundle a control port and a netdev into a
> common "modem" object, even if they both have the same parent Linux
> device, just because that device is not a physical USB device.

Right, there is an ongoing discussion about supporting iosm:
https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/385#note_958408

So once we have it working for iosm, it should work for any WWAN
device using WWAN framework.

Regards,
Loic

  reply	other threads:[~2021-06-21  6:44 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-15  0:30 [PATCH net-next 00/10] net: WWAN link creation improvements Sergey Ryazanov
2021-06-15  0:30 ` [PATCH net-next 01/10] wwan_hwsim: support network interface creation Sergey Ryazanov
2021-06-15  0:30 ` [PATCH net-next 02/10] wwan: core: relocate ops registering code Sergey Ryazanov
2021-06-15  0:30 ` [PATCH net-next 03/10] wwan: core: require WWAN netdev setup callback existence Sergey Ryazanov
2021-06-15  0:30 ` [PATCH net-next 04/10] wwan: core: multiple netdevs deletion support Sergey Ryazanov
2021-06-15  0:30 ` [PATCH net-next 05/10] wwan: core: remove all netdevs on ops unregistering Sergey Ryazanov
2021-06-15  0:30 ` [PATCH net-next 06/10] net: iosm: drop custom netdev(s) removing Sergey Ryazanov
2021-06-20 15:20   ` Sergey Ryazanov
2021-06-20 15:42     ` Kumar, M Chetan
2021-06-20 16:53       ` Sergey Ryazanov
2021-06-29 14:14       ` Loic Poulain
2021-06-29 14:56         ` Kumar, M Chetan
2021-06-29 15:29           ` Loic Poulain
2021-06-30  5:11             ` Kumar, M Chetan
2021-06-15  0:30 ` [PATCH net-next 07/10] wwan: core: no more hold netdev ops owning module Sergey Ryazanov
2021-06-15  0:30 ` [PATCH net-next 08/10] wwan: core: support default netdev creation Sergey Ryazanov
2021-06-15  0:30 ` [PATCH net-next 09/10] net: mhi_net: create default link via WWAN core Sergey Ryazanov
2021-06-15  7:17   ` Loic Poulain
2021-06-20 13:51     ` Sergey Ryazanov
2021-06-21  6:53       ` Loic Poulain [this message]
2021-06-21  9:54         ` Sergey Ryazanov
2021-06-15  0:30 ` [PATCH net-next 10/10] wwan: core: add WWAN common private data for netdev Sergey Ryazanov
2021-06-15  7:31   ` Johannes Berg
2021-06-20 14:49     ` Sergey Ryazanov
2021-06-15  7:33   ` Loic Poulain
2021-06-20 14:39     ` Sergey Ryazanov
2021-06-21  7:37       ` Loic Poulain
2021-06-21 17:22         ` Sergey Ryazanov
2021-06-22  7:21           ` Loic Poulain

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=CAMZdPi_-4tWfo-adLPJvbR5deAD1HsO6XYKSpdHOSs9t-6X1CQ@mail.gmail.com \
    --to=loic.poulain@linaro.org \
    --cc=aleksander@aleksander.es \
    --cc=davem@davemloft.net \
    --cc=johannes@sipsolutions.net \
    --cc=kuba@kernel.org \
    --cc=m.chetan.kumar@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=ryazanov.s.a@gmail.com \
    /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).