Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 54287
b: refs/heads/master
c: f34d9d2
h: refs/heads/master
i:
  54285: 5200d06
  54283: d2195e2
  54279: ba90aad
  54271: 677fab2
v: v3
  • Loading branch information
Jeff Dike authored and Linus Torvalds committed May 7, 2007
1 parent dc6f477 commit 17d5274
Show file tree
Hide file tree
Showing 10 changed files with 65 additions and 45 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b16895b63c504698b0c3ab26ca3c41a4fa162a42
refs/heads/master: f34d9d2dcb7f17b64124841345b23adc0843e7a5
5 changes: 4 additions & 1 deletion trunk/arch/um/drivers/daemon_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ static int connect_to_switch(struct daemon_data *pri)
return err;
}

static void daemon_user_init(void *data, void *dev)
static int daemon_user_init(void *data, void *dev)
{
struct daemon_data *pri = data;
struct timeval tv;
Expand All @@ -146,7 +146,10 @@ static void daemon_user_init(void *data, void *dev)
if(pri->fd < 0){
kfree(pri->local_addr);
pri->local_addr = NULL;
return pri->fd;
}

return 0;
}

static int daemon_open(void *data)
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/um/drivers/mcast_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,13 @@ static struct sockaddr_in *new_addr(char *addr, unsigned short port)
return sin;
}

static void mcast_user_init(void *data, void *dev)
static int mcast_user_init(void *data, void *dev)
{
struct mcast_data *pri = data;

pri->mcast_addr = new_addr(pri->addr, pri->port);
pri->dev = dev;
return 0;
}

static void mcast_remove(void *data)
Expand Down
81 changes: 46 additions & 35 deletions trunk/arch/um/drivers/net_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -325,8 +325,8 @@ static struct platform_driver uml_net_driver = {
};
static int driver_registered;

static int eth_configure(int n, void *init, char *mac,
struct transport *transport)
static void eth_configure(int n, void *init, char *mac,
struct transport *transport)
{
struct uml_net *device;
struct net_device *dev;
Expand All @@ -339,16 +339,12 @@ static int eth_configure(int n, void *init, char *mac,
device = kzalloc(sizeof(*device), GFP_KERNEL);
if (device == NULL) {
printk(KERN_ERR "eth_configure failed to allocate uml_net\n");
return(1);
return;
}

INIT_LIST_HEAD(&device->list);
device->index = n;

spin_lock(&devices_lock);
list_add(&device->list, &devices);
spin_unlock(&devices_lock);

setup_etheraddr(mac, device->mac);

printk(KERN_INFO "Netdevice %d ", n);
Expand All @@ -360,7 +356,7 @@ static int eth_configure(int n, void *init, char *mac,
dev = alloc_etherdev(size);
if (dev == NULL) {
printk(KERN_ERR "eth_configure: failed to allocate device\n");
return 1;
goto out_free_device;
}

lp = dev->priv;
Expand All @@ -376,7 +372,8 @@ static int eth_configure(int n, void *init, char *mac,
}
device->pdev.id = n;
device->pdev.name = DRIVER_NAME;
platform_device_register(&device->pdev);
if(platform_device_register(&device->pdev))
goto out_free_netdev;
SET_NETDEV_DEV(dev,&device->pdev.dev);

/* If this name ends up conflicting with an existing registered
Expand All @@ -386,31 +383,12 @@ static int eth_configure(int n, void *init, char *mac,
snprintf(dev->name, sizeof(dev->name), "eth%d", n);
device->dev = dev;

/*
* These just fill in a data structure, so there's no failure
* to be worried about.
*/
(*transport->kern->init)(dev, init);

dev->mtu = transport->user->max_packet;
dev->open = uml_net_open;
dev->hard_start_xmit = uml_net_start_xmit;
dev->stop = uml_net_close;
dev->get_stats = uml_net_get_stats;
dev->set_multicast_list = uml_net_set_multicast_list;
dev->tx_timeout = uml_net_tx_timeout;
dev->set_mac_address = uml_net_set_mac;
dev->change_mtu = uml_net_change_mtu;
dev->ethtool_ops = &uml_net_ethtool_ops;
dev->watchdog_timeo = (HZ >> 1);
dev->irq = UM_ETH_IRQ;

rtnl_lock();
err = register_netdevice(dev);
rtnl_unlock();
if (err) {
device->dev = NULL;
/* XXX: should we call ->remove() here? */
free_netdev(dev);
return 1;
}

/* lp.user is the first four bytes of the transport data, which
* has already been initialized. This structure assignment will
* overwrite that, so we make sure that .user gets overwritten with
Expand Down Expand Up @@ -438,12 +416,45 @@ static int eth_configure(int n, void *init, char *mac,
lp->tl.function = uml_net_user_timer_expire;
memcpy(lp->mac, device->mac, sizeof(lp->mac));

if (transport->user->init)
(*transport->user->init)(&lp->user, dev);
if ((transport->user->init != NULL) &&
((*transport->user->init)(&lp->user, dev) != 0))
goto out_unregister;

set_ether_mac(dev, device->mac);
dev->mtu = transport->user->max_packet;
dev->open = uml_net_open;
dev->hard_start_xmit = uml_net_start_xmit;
dev->stop = uml_net_close;
dev->get_stats = uml_net_get_stats;
dev->set_multicast_list = uml_net_set_multicast_list;
dev->tx_timeout = uml_net_tx_timeout;
dev->set_mac_address = uml_net_set_mac;
dev->change_mtu = uml_net_change_mtu;
dev->ethtool_ops = &uml_net_ethtool_ops;
dev->watchdog_timeo = (HZ >> 1);
dev->irq = UM_ETH_IRQ;

return 0;
rtnl_lock();
err = register_netdevice(dev);
rtnl_unlock();
if (err)
goto out_undo_user_init;

spin_lock(&devices_lock);
list_add(&device->list, &devices);
spin_unlock(&devices_lock);

return;

out_undo_user_init:
if (transport->user->init != NULL)
(*transport->user->remove)(&lp->user);
out_unregister:
platform_device_unregister(&device->pdev);
out_free_netdev:
free_netdev(dev);
out_free_device: ;
kfree(device);
}

static struct uml_net *find_device(int n)
Expand Down
5 changes: 3 additions & 2 deletions trunk/arch/um/drivers/pcap_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

#define PCAP_FD(p) (*(int *)(p))

static void pcap_user_init(void *data, void *dev)
static int pcap_user_init(void *data, void *dev)
{
struct pcap_data *pri = data;
pcap_t *p;
Expand All @@ -28,11 +28,12 @@ static void pcap_user_init(void *data, void *dev)
if(p == NULL){
printk("pcap_user_init : pcap_open_live failed - '%s'\n",
errors);
return;
return -EINVAL;
}

pri->dev = dev;
pri->pcap = p;
return 0;
}

static int pcap_open(void *data)
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/um/drivers/slip_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@
#include "os.h"
#include "um_malloc.h"

void slip_user_init(void *data, void *dev)
static int slip_user_init(void *data, void *dev)
{
struct slip_data *pri = data;

pri->dev = dev;
return 0;
}

static int set_up_tty(int fd)
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/um/drivers/slirp_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@
#include "slip_common.h"
#include "os.h"

void slirp_user_init(void *data, void *dev)
static int slirp_user_init(void *data, void *dev)
{
struct slirp_data *pri = data;

pri->dev = dev;
return 0;
}

struct slirp_pre_exec_data {
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/um/include/net_user.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#define UML_NET_VERSION (4)

struct net_user_info {
void (*init)(void *, void *);
int (*init)(void *, void *);
int (*open)(void *);
void (*close)(int, void *);
void (*remove)(void *);
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/um/os-Linux/drivers/ethertap_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@

#define MAX_PACKET ETH_MAX_PACKET

void etap_user_init(void *data, void *dev)
static int etap_user_init(void *data, void *dev)
{
struct ethertap_data *pri = data;

pri->dev = dev;
return 0;
}

struct addr_change {
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/um/os-Linux/drivers/tuntap_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@

#define MAX_PACKET ETH_MAX_PACKET

void tuntap_user_init(void *data, void *dev)
static int tuntap_user_init(void *data, void *dev)
{
struct tuntap_data *pri = data;

pri->dev = dev;
return 0;
}

static void tuntap_add_addr(unsigned char *addr, unsigned char *netmask,
Expand Down

0 comments on commit 17d5274

Please sign in to comment.