* sysdeps/unix/sysv/linux/tst-getcpu.c: New file.
* sysdeps/unix/sysv/linux/Makefile [subdir=posix] (tests): Add tst-getcpu. * include/link.h: Move l_version and l_nversion members around to fill gaps.
This commit is contained in:
parent
a53fa282ac
commit
341c566f05
@ -1,5 +1,12 @@
|
||||
2007-05-10 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/tst-getcpu.c: New file.
|
||||
* sysdeps/unix/sysv/linux/Makefile [subdir=posix] (tests): Add
|
||||
tst-getcpu.
|
||||
|
||||
* include/link.h: Move l_version and l_nversion members around to
|
||||
fill gaps.
|
||||
|
||||
* scripts/check-c++-types.sh: Don't use -fnu89-inline option.
|
||||
|
||||
* sysdeps/unix/sysv/linux/sched_setaffinity.c
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Data structure for communication from the run-time dynamic linker for
|
||||
loaded ELF shared objects.
|
||||
Copyright (C) 1995-2002,2003,2004,2005,2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995-2006, 2007 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -141,6 +141,10 @@ struct link_map
|
||||
/* Dependent object that first caused this object to be loaded. */
|
||||
struct link_map *l_loader;
|
||||
|
||||
/* Array with version names. */
|
||||
struct r_found_version *l_versions;
|
||||
unsigned int l_nversions;
|
||||
|
||||
/* Symbol hash table. */
|
||||
Elf_Symndx l_nbuckets;
|
||||
Elf32_Word l_gnu_bitmask_idxbits;
|
||||
@ -184,10 +188,6 @@ struct link_map
|
||||
unsigned int l_removed:1; /* Nozero if the object cannot be used anymore
|
||||
since it is removed. */
|
||||
|
||||
/* Array with version names. */
|
||||
unsigned int l_nversions;
|
||||
struct r_found_version *l_versions;
|
||||
|
||||
/* Collected information about own RPATH directories. */
|
||||
struct r_search_path_struct l_rpath_dirs;
|
||||
|
||||
|
@ -1,5 +1,8 @@
|
||||
2007-05-10 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* descr.h (struct pthread): Rearrange members to fill hole in
|
||||
64-bit layout.
|
||||
|
||||
* sysdeps/unix/sysv/linux/pthread_setaffinity.c
|
||||
(__pthread_setaffinity_new): If syscall was successful and
|
||||
RESET_VGETCPU_CACHE is defined, use it before returning.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002-2006, 2007 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@ -268,6 +268,9 @@ struct pthread
|
||||
| EXITING_BITMASK | CANCEL_RESTMASK | TERMINATED_BITMASK)) \
|
||||
== (CANCELTYPE_BITMASK | CANCELED_BITMASK))
|
||||
|
||||
/* Flags. Including those copied from the thread attribute. */
|
||||
int flags;
|
||||
|
||||
/* We allocate one block of references here. This should be enough
|
||||
to avoid allocating any memory dynamically for most applications. */
|
||||
struct pthread_key_data
|
||||
@ -321,9 +324,6 @@ struct pthread
|
||||
/* Check whether a thread is detached. */
|
||||
#define IS_DETACHED(pd) ((pd)->joinid == (pd))
|
||||
|
||||
/* Flags. Including those copied from the thread attribute. */
|
||||
int flags;
|
||||
|
||||
/* The result of the thread function. */
|
||||
void *result;
|
||||
|
||||
|
@ -113,6 +113,8 @@ ifeq ($(subdir),posix)
|
||||
sysdep_headers += bits/initspin.h
|
||||
|
||||
sysdep_routines += exit-thread sched_getcpu
|
||||
|
||||
tests += tst-getcpu
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),inet)
|
||||
|
53
sysdeps/unix/sysv/linux/tst-getcpu.c
Normal file
53
sysdeps/unix/sysv/linux/tst-getcpu.c
Normal file
@ -0,0 +1,53 @@
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <sched.h>
|
||||
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
cpu_set_t cs;
|
||||
if (sched_getaffinity (getpid (), sizeof (cs), &cs) != 0)
|
||||
{
|
||||
printf ("getaffinity failed: %m\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int result = 0;
|
||||
int cpu = 0;
|
||||
while (CPU_COUNT (&cs) != 0)
|
||||
{
|
||||
if (CPU_ISSET (cpu, &cs))
|
||||
{
|
||||
cpu_set_t cs2;
|
||||
CPU_ZERO (&cs2);
|
||||
CPU_SET (cpu, &cs2);
|
||||
if (sched_setaffinity (getpid (), sizeof (cs2), &cs2) != 0)
|
||||
{
|
||||
printf ("setaffinity(%d) failed: %m\n", cpu);
|
||||
result = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
int cpu2 = sched_getcpu ();
|
||||
if (cpu2 == -1 && errno == ENOSYS)
|
||||
{
|
||||
puts ("getcpu syscall not implemented");
|
||||
return 0;
|
||||
}
|
||||
if (cpu2 != cpu)
|
||||
{
|
||||
printf ("getcpu results %d not possible\n", cpu2);
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
CPU_CLR (cpu, &cs);
|
||||
}
|
||||
++cpu;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#define TEST_FUNCTION do_test ()
|
||||
#include <test-skeleton.c>
|
Loading…
x
Reference in New Issue
Block a user