summaryrefslogtreecommitdiffstats
path: root/plpa-1.3.2/src/libplpa/plpa_dispatch.c
diff options
context:
space:
mode:
Diffstat (limited to 'plpa-1.3.2/src/libplpa/plpa_dispatch.c')
-rw-r--r--plpa-1.3.2/src/libplpa/plpa_dispatch.c193
1 files changed, 0 insertions, 193 deletions
diff --git a/plpa-1.3.2/src/libplpa/plpa_dispatch.c b/plpa-1.3.2/src/libplpa/plpa_dispatch.c
deleted file mode 100644
index 13dc8208..00000000
--- a/plpa-1.3.2/src/libplpa/plpa_dispatch.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/* -*- c -*-
- *
- * Copyright (c) 2004-2006 The Trustees of Indiana University.
- * All rights reserved.
- * Copyright (c) 2004-2005 The Regents of the University of California.
- * All rights reserved.
- * Copyright (c) 2007-2008 Cisco Systems, Inc. All rights reserved.
- * $COPYRIGHT$
- *
- * Additional copyrights may follow
- *
- * $HEADER$
- */
-
-#include "plpa_config.h"
-#include "plpa.h"
-#include "plpa_internal.h"
-
-#include <errno.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-
-/**
- * Call the kernel's setaffinity, massaging the user's input
- * parameters as necessary
- */
-int PLPA_NAME(sched_setaffinity)(pid_t pid, size_t cpusetsize,
- const PLPA_NAME(cpu_set_t) *cpuset)
-{
- int ret;
- size_t i;
- PLPA_NAME(cpu_set_t) tmp;
- PLPA_NAME(api_type_t) api;
-
- /* Check to see that we're initialized */
- if (!PLPA_NAME(initialized)) {
- if (0 != (ret = PLPA_NAME(init)())) {
- return ret;
- }
- }
-
- /* Check for bozo arguments */
- if (NULL == cpuset) {
- return EINVAL;
- }
-
- /* Probe the API type */
- if (0 != (ret = PLPA_NAME(api_probe)(&api))) {
- return ret;
- }
- switch (api) {
- case PLPA_NAME_CAPS(PROBE_OK):
- /* This shouldn't happen, but check anyway */
- if (cpusetsize > sizeof(*cpuset)) {
- return EINVAL;
- }
-
- /* If the user-supplied bitmask is smaller than what the
- kernel wants, zero out a temporary buffer of the size that
- the kernel wants and copy the user-supplied bitmask to the
- lower part of the temporary buffer. This could be done
- more efficiently, but we're looking for clarity/simplicity
- of code here -- this is not intended to be
- performance-critical. */
- if (cpusetsize < PLPA_NAME(len)) {
- memset(&tmp, 0, sizeof(tmp));
- for (i = 0; i < cpusetsize * 8; ++i) {
- if (PLPA_CPU_ISSET(i, cpuset)) {
- PLPA_CPU_SET(i, &tmp);
- }
- }
- }
-
- /* If the user-supplied bitmask is larger than what the kernel
- will accept, scan it and see if there are any set bits in
- the part larger than what the kernel will accept. If so,
- return EINVAL. Otherwise, copy the part that the kernel
- will accept into a temporary and use that. Again,
- efficinency is not the issue of this code -- clarity is. */
- else if (cpusetsize > PLPA_NAME(len)) {
- for (i = PLPA_NAME(len) * 8; i < cpusetsize * 8; ++i) {
- if (PLPA_CPU_ISSET(i, cpuset)) {
- return EINVAL;
- }
- }
- /* No upper-level bits are set, so now copy over the bits
- that the kernel will look at */
- memset(&tmp, 0, sizeof(tmp));
- for (i = 0; i < PLPA_NAME(len) * 8; ++i) {
- if (PLPA_CPU_ISSET(i, cpuset)) {
- PLPA_CPU_SET(i, &tmp);
- }
- }
- }
-
- /* Otherwise, the user supplied a buffer that is exactly the
- right size. Just for clarity of code, copy the user's
- buffer into the temporary and use that. */
- else {
- memcpy(&tmp, cpuset, cpusetsize);
- }
-
- /* Now do the syscall */
- ret = syscall(__NR_sched_setaffinity, pid, PLPA_NAME(len), &tmp);
-
- /* Return 0 upon success. According to
- http://www.open-mpi.org/community/lists/plpa-users/2006/02/0016.php,
- all the kernel implementations return >= 0 upon success. */
- return (ret >= 0) ? 0 : ret;
- break;
-
- case PLPA_NAME_CAPS(PROBE_NOT_SUPPORTED):
- /* Process affinity not supported here */
- return ENOSYS;
- break;
-
- default:
- /* Something went wrong */
- /* JMS: would be good to have something other than EINVAL here
- -- suggestions? */
- return EINVAL;
- break;
- }
-}
-
-
-/**
- * Call the kernel's getaffinity, massaging the user's input
- * parameters as necessary
- */
-int PLPA_NAME(sched_getaffinity)(pid_t pid, size_t cpusetsize,
- PLPA_NAME(cpu_set_t) *cpuset)
-{
- int ret;
- PLPA_NAME(api_type_t) api;
-
- /* Check to see that we're initialized */
- if (!PLPA_NAME(initialized)) {
- if (0 != (ret = PLPA_NAME(init)())) {
- return ret;
- }
- }
-
- /* Check for bozo arguments */
- if (NULL == cpuset) {
- return EINVAL;
- }
- /* Probe the API type */
- if (0 != (ret = PLPA_NAME(api_probe)(&api))) {
- return ret;
- }
- switch (api) {
- case PLPA_NAME_CAPS(PROBE_OK):
- /* This shouldn't happen, but check anyway */
- if (PLPA_NAME(len) > sizeof(*cpuset)) {
- return EINVAL;
- }
-
- /* If the user supplied a buffer that is too small, then don't
- even bother */
- if (cpusetsize < PLPA_NAME(len)) {
- return EINVAL;
- }
-
- /* Now we know that the user's buffer is >= the size required
- by the kernel. If it's >, then zero it out so that the
- bits at the top are cleared (since they won't be set by the
- kernel) */
- if (cpusetsize > PLPA_NAME(len)) {
- memset(cpuset, 0, cpusetsize);
- }
-
- /* Now do the syscall */
- ret = syscall(__NR_sched_getaffinity, pid, PLPA_NAME(len), cpuset);
-
- /* Return 0 upon success. According to
- http://www.open-mpi.org/community/lists/plpa-users/2006/02/0016.php,
- all the kernel implementations return >= 0 upon success. */
- return (ret >= 0) ? 0 : ret;
- break;
-
- case PLPA_NAME_CAPS(PROBE_NOT_SUPPORTED):
- /* Process affinity not supported here */
- return ENOSYS;
- break;
-
- default:
- /* Something went wrong */
- return EINVAL;
- break;
- }
-}
-