https://github.com/torvalds/linux
Revision 2dc91abe03d8ce6dd7f9251faffafca5f6b9e85d authored by Nick Piggin on 17 August 2010, 18:37:37 UTC, committed by Al Viro on 18 August 2010, 12:35:48 UTC
lglock: introduce special lglock and brlock spin locks This patch introduces "local-global" locks (lglocks). These can be used to: - Provide fast exclusive access to per-CPU data, with exclusive access to another CPU's data allowed but possibly subject to contention, and to provide very slow exclusive access to all per-CPU data. - Or to provide very fast and scalable read serialisation, and to provide very slow exclusive serialisation of data (not necessarily per-CPU data). Brlocks are also implemented as a short-hand notation for the latter use case. Thanks to Paul for local/global naming convention. Cc: linux-kernel@vger.kernel.org Cc: Al Viro <viro@ZenIV.linux.org.uk> Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> Signed-off-by: Nick Piggin <npiggin@kernel.dk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent d996b62
Tip revision: 2dc91abe03d8ce6dd7f9251faffafca5f6b9e85d authored by Nick Piggin on 17 August 2010, 18:37:37 UTC
lglock: introduce special lglock and brlock spin locks
lglock: introduce special lglock and brlock spin locks
Tip revision: 2dc91ab
feature-tests.mak
define SOURCE_HELLO
#include <stdio.h>
int main(void)
{
return puts(\"hi\");
}
endef
ifndef NO_DWARF
define SOURCE_DWARF
#include <dwarf.h>
#include <libdw.h>
#include <version.h>
#ifndef _ELFUTILS_PREREQ
#error
#endif
int main(void)
{
Dwarf *dbg = dwarf_begin(0, DWARF_C_READ);
return (long)dbg;
}
endef
endif
define SOURCE_LIBELF
#include <libelf.h>
int main(void)
{
Elf *elf = elf_begin(0, ELF_C_READ, 0);
return (long)elf;
}
endef
define SOURCE_GLIBC
#include <gnu/libc-version.h>
int main(void)
{
const char *version = gnu_get_libc_version();
return (long)version;
}
endef
define SOURCE_ELF_MMAP
#include <libelf.h>
int main(void)
{
Elf *elf = elf_begin(0, ELF_C_READ_MMAP, 0);
return (long)elf;
}
endef
ifndef NO_NEWT
define SOURCE_NEWT
#include <newt.h>
int main(void)
{
newtInit();
newtCls();
return newtFinished();
}
endef
endif
ifndef NO_LIBPERL
define SOURCE_PERL_EMBED
#include <EXTERN.h>
#include <perl.h>
int main(void)
{
perl_alloc();
return 0;
}
endef
endif
ifndef NO_LIBPYTHON
define SOURCE_PYTHON_EMBED
#include <Python.h>
int main(void)
{
Py_Initialize();
return 0;
}
endef
endif
define SOURCE_BFD
#include <bfd.h>
int main(void)
{
bfd_demangle(0, 0, 0);
return 0;
}
endef
define SOURCE_CPLUS_DEMANGLE
extern char *cplus_demangle(const char *, int);
int main(void)
{
cplus_demangle(0, 0);
return 0;
}
endef
# try-cc
# Usage: option = $(call try-cc, source-to-build, cc-options)
try-cc = $(shell sh -c \
'TMP="$(TMPOUT).$$$$"; \
echo "$(1)" | \
$(CC) -x c - $(2) -o "$$TMP" > /dev/null 2>&1 && echo y; \
rm -f "$$TMP"')
Computing file changes ...