From: Mathieu Desnoyers Date: Mon, 28 Oct 2013 12:11:00 +0000 (+0000) Subject: lttng-statedump-impl: Use generic hard irqs for Linux >= 3.12 X-Git-Tag: v2.4.0-rc1~6 X-Git-Url: http://git.lttng.org/?p=lttng-modules.git;a=commitdiff_plain;h=29784493cd9a17bddb3a22c41056c95695988e2e lttng-statedump-impl: Use generic hard irqs for Linux >= 3.12 Quoting the original patch changelog from Otavio Salvador: > The Linux kernel 3.12 uses the generic hard irqs system for all > architectures and dropped the GENERIC_HARDIRQ option, as can be seen > at the commit quoted below: > > ,---- > | commit 0244ad004a54e39308d495fee0a2e637f8b5c317 > | Author: Martin Schwidefsky > | Date: Fri Aug 30 09:39:53 2013 +0200 > | > | Remove GENERIC_HARDIRQ config option > | > | After the last architecture switched to generic hard irqs the config > | options HAVE_GENERIC_HARDIRQS & GENERIC_HARDIRQS and the related code > | for !CONFIG_GENERIC_HARDIRQS can be removed. > | > | Signed-off-by: Martin Schwidefsky > `---- Introduce wrapper/irq.h to move the feature availability testing logic into a specific wrapper header. It now tests if the kernel version is >= 3.12 or if CONFIG_GENERIC_HARDIRQS is defined (for older kernels). Introduce the lttng-specific CONFIG_LTTNG_HAS_LIST_IRQ to track availability of this feature within LTTng. Reported-by: Philippe Mangaud Reported-by: Otavio Salvador Signed-off-by: Mathieu Desnoyers --- diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c index b8f9d356..1269a3e0 100755 --- a/lttng-statedump-impl.c +++ b/lttng-statedump-impl.c @@ -51,8 +51,9 @@ #include "wrapper/spinlock.h" #include "wrapper/fdtable.h" #include "wrapper/nsproxy.h" +#include "wrapper/irq.h" -#ifdef CONFIG_GENERIC_HARDIRQS +#ifdef CONFIG_LTTNG_HAS_LIST_IRQ #include #endif @@ -244,7 +245,7 @@ int lttng_enumerate_vm_maps(struct lttng_session *session) } #endif -#ifdef CONFIG_GENERIC_HARDIRQS +#ifdef CONFIG_LTTNG_HAS_LIST_IRQ #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)) #define irq_desc_get_chip(desc) get_irq_desc_chip(desc) diff --git a/wrapper/irq.h b/wrapper/irq.h new file mode 100644 index 00000000..b6feb0c5 --- /dev/null +++ b/wrapper/irq.h @@ -0,0 +1,38 @@ +#ifndef _LTTNG_WRAPPER_IRQ_H +#define _LTTNG_WRAPPER_IRQ_H + +/* + * wrapper/irq.h + * + * wrapper around linux/irq.h. + * + * Copyright (C) 2013 Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; only + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +/* + * Starting from the 3.12 Linux kernel, all architectures use the + * generic hard irqs system. More details can be seen at commit + * 0244ad004a54e39308d495fee0a2e637f8b5c317 in the Linux kernel GIT. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0) \ + || defined(CONFIG_GENERIC_HARDIRQS)) +# define CONFIG_LTTNG_HAS_LIST_IRQ +#endif + +#endif /* _LTTNG_WRAPPER_IRQ_H */