Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / um / drivers / port_user.c
index 1e8592e..c43e8bb 100644 (file)
@@ -18,7 +18,6 @@
 #include "user.h"
 #include "chan_user.h"
 #include "port.h"
-#include "helper.h"
 #include "os.h"
 
 struct port_chan {
@@ -28,7 +27,7 @@ struct port_chan {
        char dev[sizeof("32768\0")];
 };
 
-void *port_init(char *str, int device, struct chan_opts *opts)
+static void *port_init(char *str, int device, struct chan_opts *opts)
 {
        struct port_chan *data;
        void *kern_data;
@@ -65,7 +64,7 @@ void *port_init(char *str, int device, struct chan_opts *opts)
        return(NULL);
 }
 
-void port_free(void *d)
+static void port_free(void *d)
 {
        struct port_chan *data = d;
 
@@ -73,7 +72,8 @@ void port_free(void *d)
        kfree(data);
 }
 
-int port_open(int input, int output, int primary, void *d, char **dev_out)
+static int port_open(int input, int output, int primary, void *d,
+                    char **dev_out)
 {
        struct port_chan *data = d;
        int fd, err;
@@ -92,7 +92,7 @@ int port_open(int input, int output, int primary, void *d, char **dev_out)
        return(fd);
 }
 
-void port_close(int fd, void *d)
+static void port_close(int fd, void *d)
 {
        struct port_chan *data = d;
 
@@ -100,13 +100,6 @@ void port_close(int fd, void *d)
        os_close_file(fd);
 }
 
-int port_console_write(int fd, const char *buf, int n, void *d)
-{
-       struct port_chan *data = d;
-
-       return(generic_console_write(fd, buf, n, &data->tt));
-}
-
 struct chan_ops port_ops = {
        .type           = "port",
        .init           = port_init,
@@ -114,7 +107,7 @@ struct chan_ops port_ops = {
        .close          = port_close,
        .read           = generic_read,
        .write          = generic_write,
-       .console_write  = port_console_write,
+       .console_write  = generic_console_write,
        .window_size    = generic_window_size,
        .free           = port_free,
        .winch          = 1,
@@ -123,12 +116,18 @@ struct chan_ops port_ops = {
 int port_listen_fd(int port)
 {
        struct sockaddr_in addr;
-       int fd, err;
+       int fd, err, arg;
 
        fd = socket(PF_INET, SOCK_STREAM, 0);
        if(fd == -1) 
                return(-errno);
 
+       arg = 1;
+       if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &arg, sizeof(arg)) < 0){
+               err = -errno;
+               goto out;
+       }
+
        addr.sin_family = AF_INET;
        addr.sin_port = htons(port);
        addr.sin_addr.s_addr = htonl(INADDR_ANY);