Skip to content

Commit

Permalink
net: qualcomm: rmnet: Remove duplicate setting of rmnet private info
Browse files Browse the repository at this point in the history
The end point is set twice in the local_ep as well as the mux_id and
the real_dev in the rmnet private structure. Remove the local_ep.
While these elements are equivalent, rmnet_endpoint will be
used only as part of the rmnet_port for muxed scenarios in VND mode.

Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Subash Abhinov Kasiviswanathan authored and David S. Miller committed Oct 12, 2017
1 parent 9148963 commit 56470c9
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 40 deletions.
10 changes: 2 additions & 8 deletions drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,8 @@ rmnet_get_endpoint(struct net_device *dev, int config_id)
struct rmnet_endpoint *ep;
struct rmnet_port *port;

if (!rmnet_is_real_dev_registered(dev)) {
ep = rmnet_vnd_get_endpoint(dev);
} else {
port = rmnet_get_port_rtnl(dev);

ep = &port->muxed_ep[config_id];
}
port = rmnet_get_port_rtnl(dev);
ep = &port->muxed_ep[config_id];

return ep;
}
Expand Down Expand Up @@ -183,7 +178,6 @@ static int rmnet_newlink(struct net *src_net, struct net_device *dev,
port->rmnet_mode = mode;

rmnet_set_endpoint_config(real_dev, mux_id, dev);
rmnet_set_endpoint_config(dev, mux_id, real_dev);
return 0;

err2:
Expand Down
4 changes: 0 additions & 4 deletions drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@

#define RMNET_MAX_LOGICAL_EP 255

/* Information about the next device to deliver the packet to.
* Exact usage of this parameter depends on the rmnet_mode.
*/
struct rmnet_endpoint {
u8 mux_id;
struct net_device *egress_dev;
Expand All @@ -44,7 +41,6 @@ struct rmnet_port {
extern struct rtnl_link_ops rmnet_link_ops;

struct rmnet_priv {
struct rmnet_endpoint local_ep;
u8 mux_id;
struct net_device *real_dev;
};
Expand Down
18 changes: 10 additions & 8 deletions drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,7 @@ rmnet_map_ingress_handler(struct sk_buff *skb,
}

static int rmnet_map_egress_handler(struct sk_buff *skb,
struct rmnet_port *port,
struct rmnet_endpoint *ep,
struct rmnet_port *port, u8 mux_id,
struct net_device *orig_dev)
{
int required_headroom, additional_header_len;
Expand All @@ -136,10 +135,10 @@ static int rmnet_map_egress_handler(struct sk_buff *skb,
return RMNET_MAP_CONSUMED;

if (port->egress_data_format & RMNET_EGRESS_FORMAT_MUXING) {
if (ep->mux_id == 0xff)
if (mux_id == 0xff)
map_header->mux_id = 0;
else
map_header->mux_id = ep->mux_id;
map_header->mux_id = mux_id;
}

skb->protocol = htons(ETH_P_MAP);
Expand Down Expand Up @@ -176,14 +175,17 @@ rx_handler_result_t rmnet_rx_handler(struct sk_buff **pskb)
* for egress device configured in logical endpoint. Packet is then transmitted
* on the egress device.
*/
void rmnet_egress_handler(struct sk_buff *skb,
struct rmnet_endpoint *ep)
void rmnet_egress_handler(struct sk_buff *skb)
{
struct net_device *orig_dev;
struct rmnet_port *port;
struct rmnet_priv *priv;
u8 mux_id;

orig_dev = skb->dev;
skb->dev = ep->egress_dev;
priv = netdev_priv(orig_dev);
skb->dev = priv->real_dev;
mux_id = priv->mux_id;

port = rmnet_get_port(skb->dev);
if (!port) {
Expand All @@ -192,7 +194,7 @@ void rmnet_egress_handler(struct sk_buff *skb,
}

if (port->egress_data_format & RMNET_EGRESS_FORMAT_MAP) {
switch (rmnet_map_egress_handler(skb, port, ep, orig_dev)) {
switch (rmnet_map_egress_handler(skb, port, mux_id, orig_dev)) {
case RMNET_MAP_CONSUMED:
return;

Expand Down
3 changes: 1 addition & 2 deletions drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@

#include "rmnet_config.h"

void rmnet_egress_handler(struct sk_buff *skb,
struct rmnet_endpoint *ep);
void rmnet_egress_handler(struct sk_buff *skb);

rx_handler_result_t rmnet_rx_handler(struct sk_buff **pskb);

Expand Down
19 changes: 2 additions & 17 deletions drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ static netdev_tx_t rmnet_vnd_start_xmit(struct sk_buff *skb,
struct rmnet_priv *priv;

priv = netdev_priv(dev);
if (priv->local_ep.egress_dev) {
rmnet_egress_handler(skb, &priv->local_ep);
if (priv->real_dev) {
rmnet_egress_handler(skb);
} else {
dev->stats.tx_dropped++;
kfree_skb(skb);
Expand Down Expand Up @@ -143,21 +143,6 @@ u8 rmnet_vnd_get_mux(struct net_device *rmnet_dev)
return priv->mux_id;
}

/* Gets the logical endpoint configuration for a RmNet virtual network device
* node. Caller should confirm that devices is a RmNet VND before calling.
*/
struct rmnet_endpoint *rmnet_vnd_get_endpoint(struct net_device *rmnet_dev)
{
struct rmnet_priv *priv;

if (!rmnet_dev)
return NULL;

priv = netdev_priv(rmnet_dev);

return &priv->local_ep;
}

int rmnet_vnd_do_flow_control(struct net_device *rmnet_dev, int enable)
{
netdev_dbg(rmnet_dev, "Setting VND TX queue state to %d\n", enable);
Expand Down
1 change: 0 additions & 1 deletion drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
#define _RMNET_VND_H_

int rmnet_vnd_do_flow_control(struct net_device *dev, int enable);
struct rmnet_endpoint *rmnet_vnd_get_endpoint(struct net_device *dev);
int rmnet_vnd_newlink(u8 id, struct net_device *rmnet_dev,
struct rmnet_port *port,
struct net_device *real_dev);
Expand Down

0 comments on commit 56470c9

Please sign in to comment.