From b672b2161931da8bf8bcd283444c41d1b2b32865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 12 Mar 2004 05:06:13 +0000 Subject: [PATCH] Renamed some variables to match our style guide better. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6954 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/core/port.c | 274 ++++++++++++++++++++--------------------- 1 file changed, 136 insertions(+), 138 deletions(-) diff --git a/src/kernel/core/port.c b/src/kernel/core/port.c index c22265ee36..ebc6622cfc 100644 --- a/src/kernel/core/port.c +++ b/src/kernel/core/port.c @@ -60,16 +60,15 @@ static void _dump_port_info(struct port_entry *port); #define MAX_QUEUE_LENGTH 4096 #define PORT_MAX_MESSAGE_SIZE 65536 -static struct port_entry *gPorts = NULL; -static region_id gPortRegion = 0; -static bool ports_active = false; +static struct port_entry *sPorts = NULL; +static area_id sPortArea = 0; +static bool sPortsActive = false; +static port_id sNextPort = 0; -static port_id gNextPort = 0; +static spinlock sPortSpinlock = 0; -static spinlock gPortSpinlock = 0; - -#define GRAB_PORT_LIST_LOCK() acquire_spinlock(&gPortSpinlock) -#define RELEASE_PORT_LIST_LOCK() release_spinlock(&gPortSpinlock) +#define GRAB_PORT_LIST_LOCK() acquire_spinlock(&sPortSpinlock) +#define RELEASE_PORT_LIST_LOCK() release_spinlock(&sPortSpinlock) #define GRAB_PORT_LOCK(s) acquire_spinlock(&(s).lock) #define RELEASE_PORT_LOCK(s) release_spinlock(&(s).lock) @@ -81,9 +80,9 @@ port_init(kernel_args *ka) int size = sizeof(struct port_entry) * MAX_PORTS; // create and initialize ports table - gPortRegion = create_area("port_table", (void **)&gPorts, B_ANY_KERNEL_ADDRESS, + sPortArea = create_area("port_table", (void **)&sPorts, B_ANY_KERNEL_ADDRESS, size, B_FULL_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA); - if (gPortRegion < 0) { + if (sPortArea < 0) { panic("unable to allocate kernel port table!\n"); } @@ -91,15 +90,15 @@ port_init(kernel_args *ka) // speed up actual message sending/receiving, a slab allocator // might do it as well, though :-) - memset(gPorts, 0, size); + memset(sPorts, 0, size); for (i = 0; i < MAX_PORTS; i++) - gPorts[i].id = -1; + sPorts[i].id = -1; // add debugger commands add_debugger_command("ports", &dump_port_list, "Dump a list of all active ports"); add_debugger_command("port", &dump_port_info, "Dump info about a particular port"); - ports_active = true; + sPortsActive = true; return 0; } @@ -214,8 +213,8 @@ dump_port_list(int argc, char **argv) int i; for (i = 0; i < MAX_PORTS; i++) { - if (gPorts[i].id >= 0) - dprintf("%p\tid: 0x%lx\t\tname: '%s'\n", &gPorts[i], gPorts[i].id, gPorts[i].name); + if (sPorts[i].id >= 0) + dprintf("%p\tid: 0x%lx\t\tname: '%s'\n", &sPorts[i], sPorts[i].id, sPorts[i].name); } return 0; } @@ -257,20 +256,20 @@ dump_port_info(int argc, char **argv) return 0; } else { unsigned slot = num % MAX_PORTS; - if(gPorts[slot].id != (int)num) { + if(sPorts[slot].id != (int)num) { dprintf("port 0x%lx doesn't exist!\n", num); return 0; } - _dump_port_info(&gPorts[slot]); + _dump_port_info(&sPorts[slot]); return 0; } } - // walk through the gPorts list, trying to match name + // walk through the ports list, trying to match name for (i = 0; i < MAX_PORTS; i++) { - if (gPorts[i].name != NULL - && strcmp(argv[1], gPorts[i].name) == 0) { - _dump_port_info(&gPorts[i]); + if (sPorts[i].name != NULL + && strcmp(argv[1], sPorts[i].name) == 0) { + _dump_port_info(&sPorts[i]); return 0; } } @@ -287,19 +286,19 @@ delete_owned_ports(team_id owner) { // ToDo: investigate maintaining a list of ports in the team // to make this simpler and more efficient. - int state; + cpu_status state; int i; int count = 0; - if (ports_active == false) + if (!sPortsActive) return B_BAD_PORT_ID; state = disable_interrupts(); GRAB_PORT_LIST_LOCK(); for (i = 0; i < MAX_PORTS; i++) { - if (gPorts[i].id != -1 && gPorts[i].owner == owner) { - port_id id = gPorts[i].id; + if (sPorts[i].id != -1 && sPorts[i].owner == owner) { + port_id id = sPorts[i].id; RELEASE_PORT_LIST_LOCK(); restore_interrupts(state); @@ -366,7 +365,7 @@ create_port(int32 queueLength, const char *name) team_id owner; int i; - if (ports_active == false) + if (!sPortsActive) return B_BAD_PORT_ID; // check queue length @@ -409,34 +408,34 @@ create_port(int32 queueLength, const char *name) // find the first empty spot for (i = 0; i < MAX_PORTS; i++) { - if (gPorts[i].id == -1) { + if (sPorts[i].id == -1) { // make the port_id be a multiple of the slot it's in - if (i >= gNextPort % MAX_PORTS) - gNextPort += i - gNextPort % MAX_PORTS; + if (i >= sNextPort % MAX_PORTS) + sNextPort += i - sNextPort % MAX_PORTS; else - gNextPort += MAX_PORTS - (gNextPort % MAX_PORTS - i); + sNextPort += MAX_PORTS - (sNextPort % MAX_PORTS - i); - GRAB_PORT_LOCK(gPorts[i]); - gPorts[i].id = gNextPort++; + GRAB_PORT_LOCK(sPorts[i]); + sPorts[i].id = sNextPort++; RELEASE_PORT_LIST_LOCK(); - gPorts[i].capacity = queueLength; - gPorts[i].owner = owner; - gPorts[i].name = name; + sPorts[i].capacity = queueLength; + sPorts[i].owner = owner; + sPorts[i].name = name; - gPorts[i].read_sem = readSem; - gPorts[i].write_sem = writeSem; + sPorts[i].read_sem = readSem; + sPorts[i].write_sem = writeSem; - list_init(&gPorts[i].msg_queue); - gPorts[i].total_count = 0; - returnValue = gPorts[i].id; + list_init(&sPorts[i].msg_queue); + sPorts[i].total_count = 0; + returnValue = sPorts[i].id; - RELEASE_PORT_LOCK(gPorts[i]); + RELEASE_PORT_LOCK(sPorts[i]); goto out; } } - // not enough gPorts... + // not enough ports... RELEASE_PORT_LIST_LOCK(); returnValue = B_NO_MORE_PORTS; dprintf("create_port(): B_NO_MORE_PORTS\n"); @@ -456,30 +455,29 @@ out: status_t close_port(port_id id) { - int state; - int slot; + cpu_status state; + int slot; - if (ports_active == false) - return B_BAD_PORT_ID; - if (id < 0) + if (!sPortsActive || id < 0) return B_BAD_PORT_ID; + slot = id % MAX_PORTS; // walk through the sem list, trying to match name state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[slot]); + GRAB_PORT_LOCK(sPorts[slot]); - if (gPorts[slot].id != id) { - RELEASE_PORT_LOCK(gPorts[slot]); + if (sPorts[slot].id != id) { + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); dprintf("close_port: invalid port_id %ld\n", id); return B_BAD_PORT_ID; } // mark port to disable writing - gPorts[slot].closed = true; + sPorts[slot].closed = true; - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); return B_NO_ERROR; @@ -496,30 +494,30 @@ delete_port(port_id id) port_msg *msg; int slot; - if (ports_active == false || id < 0) + if (!sPortsActive || id < 0) return B_BAD_PORT_ID; slot = id % MAX_PORTS; state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[slot]); + GRAB_PORT_LOCK(sPorts[slot]); - if (gPorts[slot].id != id) { - RELEASE_PORT_LOCK(gPorts[slot]); + if (sPorts[slot].id != id) { + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); dprintf("delete_port: invalid port_id %ld\n", id); return B_BAD_PORT_ID; } /* mark port as invalid */ - gPorts[slot].id = -1; - name = gPorts[slot].name; - list = gPorts[slot].msg_queue; - readSem = gPorts[slot].read_sem; - writeSem = gPorts[slot].write_sem; - gPorts[slot].name = NULL; + sPorts[slot].id = -1; + name = sPorts[slot].name; + list = sPorts[slot].msg_queue; + readSem = sPorts[slot].read_sem; + writeSem = sPorts[slot].write_sem; + sPorts[slot].name = NULL; - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); // free the queue @@ -545,7 +543,7 @@ find_port(const char *name) cpu_status state; int i; - if (ports_active == false) + if (!sPortsActive) return B_NAME_NOT_FOUND; if (name == NULL) return B_BAD_VALUE; @@ -558,12 +556,12 @@ find_port(const char *name) for (i = 0; i < MAX_PORTS && portFound < B_OK; i++) { // lock every individual port before comparing state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[i]); + GRAB_PORT_LOCK(sPorts[i]); - if (gPorts[i].id >= 0 && !strcmp(name, gPorts[i].name)) - portFound = gPorts[i].id; + if (sPorts[i].id >= 0 && !strcmp(name, sPorts[i].name)) + portFound = sPorts[i].id; - RELEASE_PORT_LOCK(gPorts[i]); + RELEASE_PORT_LOCK(sPorts[i]); restore_interrupts(state); } @@ -599,30 +597,30 @@ fill_port_info(struct port_entry *port, port_info *info, size_t size) status_t _get_port_info(port_id id, port_info *info, size_t size) { + cpu_status state; int slot; - int state; if (info == NULL || size != sizeof(port_info)) return B_BAD_VALUE; - if (!ports_active || id < 0) + if (!sPortsActive || id < 0) return B_BAD_PORT_ID; slot = id % MAX_PORTS; state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[slot]); + GRAB_PORT_LOCK(sPorts[slot]); - if (gPorts[slot].id != id) { - RELEASE_PORT_LOCK(gPorts[slot]); + if (sPorts[slot].id != id) { + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); dprintf("get_port_info: invalid port_id %ld\n", id); return B_BAD_PORT_ID; } // fill a port_info struct with info - fill_port_info(&gPorts[slot], info, size); + fill_port_info(&sPorts[slot], info, size); - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); return B_OK; @@ -632,12 +630,12 @@ _get_port_info(port_id id, port_info *info, size_t size) status_t _get_next_port_info(team_id team, int32 *_cookie, struct port_info *info, size_t size) { - int state; + cpu_status state; int slot; if (info == NULL || size != sizeof(port_info) || _cookie == NULL || team < B_OK) return B_BAD_VALUE; - if (!ports_active) + if (!sPortsActive) return B_BAD_PORT_ID; slot = *_cookie; @@ -654,16 +652,16 @@ _get_next_port_info(team_id team, int32 *_cookie, struct port_info *info, size_t GRAB_PORT_LIST_LOCK(); while (slot < MAX_PORTS) { - GRAB_PORT_LOCK(gPorts[slot]); - if (gPorts[slot].id != -1 && gPorts[slot].owner == team) { + GRAB_PORT_LOCK(sPorts[slot]); + if (sPorts[slot].id != -1 && sPorts[slot].owner == team) { // found one! - fill_port_info(&gPorts[slot], info, size); + fill_port_info(&sPorts[slot], info, size); - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); slot++; break; } - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); slot++; } RELEASE_PORT_LIST_LOCK(); @@ -694,24 +692,24 @@ port_buffer_size_etc(port_id id, uint32 flags, bigtime_t timeout) ssize_t size; int slot; - if (!ports_active || id < 0) + if (!sPortsActive || id < 0) return B_BAD_PORT_ID; slot = id % MAX_PORTS; state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[slot]); + GRAB_PORT_LOCK(sPorts[slot]); - if (gPorts[slot].id != id) { - RELEASE_PORT_LOCK(gPorts[slot]); + if (sPorts[slot].id != id) { + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); TRACE(("get_buffer_size_etc: invalid port_id %ld\n", id)); return B_BAD_PORT_ID; } - cachedSem = gPorts[slot].read_sem; + cachedSem = sPorts[slot].read_sem; - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); // block if no message, or, if B_TIMEOUT flag set, block with timeout @@ -726,23 +724,23 @@ port_buffer_size_etc(port_id id, uint32 flags, bigtime_t timeout) return status; state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[slot]); + GRAB_PORT_LOCK(sPorts[slot]); - if (gPorts[slot].id != id) { + if (sPorts[slot].id != id) { // the port is no longer there - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); return B_BAD_PORT_ID; } // determine tail & get the length of the message - msg = list_get_first_item(&gPorts[slot].msg_queue); + msg = list_get_first_item(&sPorts[slot].msg_queue); if (msg == NULL) - panic("port %ld: no messages found", gPorts[slot].id); + panic("port %ld: no messages found", sPorts[slot].id); size = msg->size; - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); // restore read_sem, as we haven't read from the port @@ -756,31 +754,31 @@ port_buffer_size_etc(port_id id, uint32 flags, bigtime_t timeout) ssize_t port_count(port_id id) { - int slot; - int state; + cpu_status state; int32 count; + int slot; - if (ports_active == false || id < 0) + if (!sPortsActive || id < 0) return B_BAD_PORT_ID; slot = id % MAX_PORTS; state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[slot]); + GRAB_PORT_LOCK(sPorts[slot]); - if (gPorts[slot].id != id) { - RELEASE_PORT_LOCK(gPorts[slot]); + if (sPorts[slot].id != id) { + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); TRACE(("port_count: invalid port_id %ld\n", id)); return B_BAD_PORT_ID; } - get_sem_count(gPorts[slot].read_sem, &count); + get_sem_count(sPorts[slot].read_sem, &count); // do not return negative numbers if (count < 0) count = 0; - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); // return count of messages (sem_count) @@ -807,7 +805,7 @@ read_port_etc(port_id id, int32 *_msgCode, void *msgBuffer, size_t bufferSize, size_t size; int slot; - if (!ports_active || id < 0) + if (!sPortsActive || id < 0) return B_BAD_PORT_ID; if (_msgCode == NULL @@ -819,19 +817,19 @@ read_port_etc(port_id id, int32 *_msgCode, void *msgBuffer, size_t bufferSize, slot = id % MAX_PORTS; state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[slot]); + GRAB_PORT_LOCK(sPorts[slot]); - if (gPorts[slot].id != id) { - RELEASE_PORT_LOCK(gPorts[slot]); + if (sPorts[slot].id != id) { + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); dprintf("read_port_etc: invalid port_id %ld\n", id); return B_BAD_PORT_ID; } // store sem_id in local variable - cachedSem = gPorts[slot].read_sem; + cachedSem = sPorts[slot].read_sem; // unlock port && enable ints/ - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); status = acquire_sem_etc(cachedSem, 1, flags, timeout); @@ -851,27 +849,27 @@ read_port_etc(port_id id, int32 *_msgCode, void *msgBuffer, size_t bufferSize, } state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[slot]); + GRAB_PORT_LOCK(sPorts[slot]); // first, let's check if the port is still alive - if (gPorts[slot].id == -1) { + if (sPorts[slot].id == -1) { // the port has been deleted in the meantime - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); return B_BAD_PORT_ID; } - msg = list_get_first_item(&gPorts[slot].msg_queue); + msg = list_get_first_item(&sPorts[slot].msg_queue); if (msg == NULL) - panic("port %ld: no messages found", gPorts[slot].id); + panic("port %ld: no messages found", sPorts[slot].id); list_remove_link(msg); - gPorts[slot].total_count++; + sPorts[slot].total_count++; - cachedSem = gPorts[slot].write_sem; + cachedSem = sPorts[slot].write_sem; - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); // check output buffer size @@ -919,7 +917,7 @@ write_port_etc(port_id id, int32 msgCode, const void *msgBuffer, bool userCopy = (flags & PORT_FLAG_USE_USER_MEMCPY) > 0; int slot; - if (!ports_active || id < 0) + if (!sPortsActive || id < 0) return B_BAD_PORT_ID; // mask irrelevant flags (for acquire_sem() usage) @@ -930,26 +928,26 @@ write_port_etc(port_id id, int32 msgCode, const void *msgBuffer, return EINVAL; state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[slot]); + GRAB_PORT_LOCK(sPorts[slot]); - if (gPorts[slot].id != id) { - RELEASE_PORT_LOCK(gPorts[slot]); + if (sPorts[slot].id != id) { + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); TRACE(("write_port_etc: invalid port_id %ld\n", id)); return B_BAD_PORT_ID; } - if (gPorts[slot].closed) { - RELEASE_PORT_LOCK(gPorts[slot]); + if (sPorts[slot].closed) { + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); TRACE(("write_port_etc: port %ld closed\n", id)); return B_BAD_PORT_ID; } // store sem_id in local variable - cachedSem = gPorts[slot].write_sem; + cachedSem = sPorts[slot].write_sem; - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); status = acquire_sem_etc(cachedSem, 1, flags, timeout); @@ -986,24 +984,24 @@ write_port_etc(port_id id, int32 msgCode, const void *msgBuffer, // attach message to queue state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[slot]); + GRAB_PORT_LOCK(sPorts[slot]); // first, let's check if the port is still alive - if (gPorts[slot].id == -1) { + if (sPorts[slot].id == -1) { // the port has been deleted in the meantime - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); put_port_msg(msg); return B_BAD_PORT_ID; } - list_add_item(&gPorts[slot].msg_queue, msg); + list_add_item(&sPorts[slot].msg_queue, msg); // store sem_id in local variable - cachedSem = gPorts[slot].read_sem; + cachedSem = sPorts[slot].read_sem; - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); // release sem, allowing read (might reschedule) @@ -1016,29 +1014,29 @@ write_port_etc(port_id id, int32 msgCode, const void *msgBuffer, status_t set_port_owner(port_id id, team_id team) { + cpu_status state; int slot; - int state; - if (!ports_active || id < 0) + if (!sPortsActive || id < 0) return B_BAD_PORT_ID; slot = id % MAX_PORTS; state = disable_interrupts(); - GRAB_PORT_LOCK(gPorts[slot]); + GRAB_PORT_LOCK(sPorts[slot]); - if (gPorts[slot].id != id) { - RELEASE_PORT_LOCK(gPorts[slot]); + if (sPorts[slot].id != id) { + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); TRACE(("set_port_owner: invalid port_id %ld\n", id)); return B_BAD_PORT_ID; } // transfer ownership to other team - gPorts[slot].owner = team; + sPorts[slot].owner = team; // unlock port - RELEASE_PORT_LOCK(gPorts[slot]); + RELEASE_PORT_LOCK(sPorts[slot]); restore_interrupts(state); return B_NO_ERROR; @@ -1047,7 +1045,7 @@ set_port_owner(port_id id, team_id team) // #pragma mark - /* - * user level gPorts + * user level ports */