Commit 1c42c330 authored by Jeff Dike's avatar Jeff Dike

A set of small bug fixes brought over from 2.4.19-8.

parent fb28eb82
......@@ -118,7 +118,7 @@ int port_listen_fd(int port)
goto out;
}
if(listen(fd, 1) < 0){
if((listen(fd, 1) < 0) || (os_set_fd_block(fd, 0))){
err = -errno;
goto out;
}
......@@ -190,7 +190,8 @@ int port_connection(int fd, int *socket, int *pid_out)
"/usr/lib/uml/port-helper", NULL };
struct port_pre_exec_data data;
if((new = accept(fd, NULL, 0)) < 0) return(-errno);
if((new = os_accept_connection(fd)) < 0)
return(-errno);
err = os_pipe(socket, 0, 0);
if(err) goto out_close;
......
......@@ -9,7 +9,10 @@ struct slip_data {
char *addr;
char *gate_addr;
int slave;
char buf[2 * BUF_SIZE];
/* two bytes each for a (pathological) max packet of escaped chars +
* terminating END char + inital END char
*/
char buf[2 * BUF_SIZE + 2];
int pos;
int esc;
};
......
......@@ -61,7 +61,7 @@ void sigio_handler(int sig, struct uml_pt_regs *regs)
for(i = 0; i < pollfds_num; i++){
if(pollfds[i].revents != 0){
irq_fd->current_events = pollfds[i].revents;
pollfds[i].events = 0;
pollfds[i].fd = -1;
}
irq_fd = irq_fd->next;
}
......@@ -185,7 +185,8 @@ static void free_irq_by_cb(int (*test)(struct irq_fd *, void *), void *arg)
while(*prev != NULL){
if((*test)(*prev, arg)){
struct irq_fd *old_fd = *prev;
if(pollfds[i].fd != (*prev)->fd){
if((pollfds[i].fd != -1) &&
(pollfds[i].fd != (*prev)->fd)){
printk("free_irq_by_cb - mismatch between "
"active_fds and pollfds, fd %d vs %d\n",
(*prev)->fd, pollfds[i].fd);
......@@ -250,7 +251,7 @@ static struct irq_fd *find_irq_by_fd(int fd, int irqnum, int *index_out)
printk("find_irq_by_fd doesn't have descriptor %d\n", fd);
return(NULL);
}
if(pollfds[i].fd != fd){
if((pollfds[i].fd != -1) && (pollfds[i].fd != fd)){
printk("find_irq_by_fd - mismatch between active_fds and "
"pollfds, fd %d vs %d, need %d\n", irq->fd,
pollfds[i].fd, fd);
......@@ -283,7 +284,7 @@ void reactivate_fd(int fd, int irqnum)
irq = find_irq_by_fd(fd, irqnum, &i);
if(irq == NULL) return;
pollfds[i].events = irq->events;
pollfds[i].fd = irq->fd;
maybe_sigio_broken(fd, irq->type);
}
......@@ -294,7 +295,7 @@ void deactivate_fd(int fd, int irqnum)
irq = find_irq_by_fd(fd, irqnum, &i);
if(irq == NULL) return;
pollfds[i].events = 0;
pollfds[i].fd = -1;
}
void forward_ipi(int fd, int pid)
......
......@@ -49,7 +49,7 @@ mmu_gather_t mmu_gathers[NR_CPUS];
int kmalloc_ok = 0;
#define NREGIONS (phys_region_index(0xffffffff) - phys_region_index(0x0))
#define NREGIONS (phys_region_index(0xffffffff) - phys_region_index(0x0) + 1)
struct mem_region *regions[NREGIONS] = { [ 0 ... NREGIONS - 1 ] = NULL };
#define REGION_SIZE ((0xffffffff & ~REGION_MASK) + 1)
......
......@@ -227,12 +227,12 @@ int os_set_fd_block(int fd, int blocking)
int os_accept_connection(int fd)
{
int err;
int new;
err = accept(fd, NULL, 0);
if(err)
new = accept(fd, NULL, 0);
if(new < 0)
return(-errno);
return(0);
return(new);
}
#ifndef SHUT_RD
......
#ifndef __UM_XOR_H
#define __UM_XOR_H
#include "asm-generic/xor.h"
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment