From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f196.google.com ([209.85.128.196]:36084 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751745AbeCWGuM (ORCPT ); Fri, 23 Mar 2018 02:50:12 -0400 Received: by mail-wr0-f196.google.com with SMTP id d10so10984380wrf.3 for ; Thu, 22 Mar 2018 23:50:12 -0700 (PDT) Date: Fri, 23 Mar 2018 07:50:10 +0100 From: Jiri Pirko To: David Ahern Cc: netdev@vger.kernel.org, davem@davemloft.net, roopa@cumulusnetworks.com, shm@cumulusnetworks.com, jiri@mellanox.com, idosch@mellanox.com, jakub.kicinski@netronome.com, David Ahern Subject: Re: [PATCH RFC net-next 7/7] netdevsim: Add simple FIB resource controller via devlink Message-ID: <20180323065010.GM2074@nanopsycho.orion> References: <20180322225757.10377-1-dsa@cumulusnetworks.com> <20180322225757.10377-8-dsa@cumulusnetworks.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180322225757.10377-8-dsa@cumulusnetworks.com> Sender: netdev-owner@vger.kernel.org List-ID: Thu, Mar 22, 2018 at 11:57:57PM CET, dsa@cumulusnetworks.com wrote: >From: David Ahern [...] >+void nsim_devlink_teardown(struct netdevsim *ns) >+{ >+ if (ns->devlink) { >+ struct net *net = dev_net(ns->netdev); >+ bool *reg_devlink = net_generic(net, nsim_devlink_id); >+ >+ devlink_unregister(ns->devlink); >+ devlink_free(ns->devlink); >+ ns->devlink = NULL; >+ >+ nsim_devlink_net_reset(net); >+ *reg_devlink = true; >+ } >+} >+ >+void nsim_devlink_setup(struct netdevsim *ns) >+{ >+ struct net *net = dev_net(ns->netdev); >+ bool *reg_devlink = net_generic(net, nsim_devlink_id); >+ struct devlink *devlink; >+ int err = -ENOMEM; >+ >+ /* only one device per namespace controls devlink */ >+ if (!*reg_devlink) { >+ ns->devlink = NULL; >+ return; >+ } >+ >+ devlink = devlink_alloc(&nsim_devlink_ops, 0); >+ if (!devlink) >+ return; >+ >+ devlink_net_set(devlink, net); >+ err = devlink_register(devlink, &ns->dev); This reg_devlink construct looks odd. Why don't you leave the devlink instance in init_ns? >+ if (err) >+ goto err_devlink_free; >+ >+ err = devlink_resources_register(devlink); >+ if (err) >+ goto err_dl_unregister; >+ >+ ns->devlink = devlink; >+ >+ *reg_devlink = false; >+ >+ return; >+ >+err_dl_unregister: >+ devlink_unregister(devlink); >+err_devlink_free: >+ devlink_free(devlink); >+} >+ >+/* Initialize per network namespace state */ >+static int __net_init nsim_devlink_netns_init(struct net *net) >+{ >+ bool *reg_devlink = net_generic(net, nsim_devlink_id); >+ >+ *reg_devlink = true; >+ >+ return 0; >+} >+ >+static struct pernet_operations nsim_devlink_net_ops __net_initdata = { >+ .init = nsim_devlink_netns_init, >+ .id = &nsim_devlink_id, >+ .size = sizeof(bool), >+ .async = true, >+};