License cleanup: add SPDX GPL-2.0 license identifier to files with no license
Many source files in the tree are missing licensing information, which
makes it harder for compliance tools to determine the correct license.
By default all files without license information are under the default
license of the kernel, which is GPL version 2.
Update the files which contain no license information with the 'GPL-2.0'
SPDX license identifier. The SPDX identifier is a legally binding
shorthand, which can be used instead of the full boiler plate text.
This patch is based on work done by Thomas Gleixner and Kate Stewart and
Philippe Ombredanne.
How this work was done:
Patches were generated and checked against linux-4.14-rc6 for a subset of
the use cases:
- file had no licensing information it it.
- file was a */uapi/* one with no licensing information in it,
- file was a */uapi/* one with existing licensing information,
Further patches will be generated in subsequent months to fix up cases
where non-standard license headers were used, and references to license
had to be inferred by heuristics based on keywords.
The analysis to determine which SPDX License Identifier to be applied to
a file was done in a spreadsheet of side by side results from of the
output of two independent scanners (ScanCode & Windriver) producing SPDX
tag:value files created by Philippe Ombredanne. Philippe prepared the
base worksheet, and did an initial spot review of a few 1000 files.
The 4.13 kernel was the starting point of the analysis with 60,537 files
assessed. Kate Stewart did a file by file comparison of the scanner
results in the spreadsheet to determine which SPDX license identifier(s)
to be applied to the file. She confirmed any determination that was not
immediately clear with lawyers working with the Linux Foundation.
Criteria used to select files for SPDX license identifier tagging was:
- Files considered eligible had to be source code files.
- Make and config files were included as candidates if they contained >5
lines of source
- File already had some variant of a license header in it (even if <5
lines).
All documentation files were explicitly excluded.
The following heuristics were used to determine which SPDX license
identifiers to apply.
- when both scanners couldn't find any license traces, file was
considered to have no license information in it, and the top level
COPYING file license applied.
For non */uapi/* files that summary was:
SPDX license identifier # files
---------------------------------------------------|-------
GPL-2.0 11139
and resulted in the first patch in this series.
If that file was a */uapi/* path one, it was "GPL-2.0 WITH
Linux-syscall-note" otherwise it was "GPL-2.0". Results of that was:
SPDX license identifier # files
---------------------------------------------------|-------
GPL-2.0 WITH Linux-syscall-note 930
and resulted in the second patch in this series.
- if a file had some form of licensing information in it, and was one
of the */uapi/* ones, it was denoted with the Linux-syscall-note if
any GPL family license was found in the file or had no licensing in
it (per prior point). Results summary:
SPDX license identifier # files
---------------------------------------------------|------
GPL-2.0 WITH Linux-syscall-note 270
GPL-2.0+ WITH Linux-syscall-note 169
((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) 21
((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) 17
LGPL-2.1+ WITH Linux-syscall-note 15
GPL-1.0+ WITH Linux-syscall-note 14
((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) 5
LGPL-2.0+ WITH Linux-syscall-note 4
LGPL-2.1 WITH Linux-syscall-note 3
((GPL-2.0 WITH Linux-syscall-note) OR MIT) 3
((GPL-2.0 WITH Linux-syscall-note) AND MIT) 1
and that resulted in the third patch in this series.
- when the two scanners agreed on the detected license(s), that became
the concluded license(s).
- when there was disagreement between the two scanners (one detected a
license but the other didn't, or they both detected different
licenses) a manual inspection of the file occurred.
- In most cases a manual inspection of the information in the file
resulted in a clear resolution of the license that should apply (and
which scanner probably needed to revisit its heuristics).
- When it was not immediately clear, the license identifier was
confirmed with lawyers working with the Linux Foundation.
- If there was any question as to the appropriate license identifier,
the file was flagged for further research and to be revisited later
in time.
In total, over 70 hours of logged manual review was done on the
spreadsheet to determine the SPDX license identifiers to apply to the
source files by Kate, Philippe, Thomas and, in some cases, confirmation
by lawyers working with the Linux Foundation.
Kate also obtained a third independent scan of the 4.13 code base from
FOSSology, and compared selected files where the other two scanners
disagreed against that SPDX file, to see if there was new insights. The
Windriver scanner is based on an older version of FOSSology in part, so
they are related.
Thomas did random spot checks in about 500 files from the spreadsheets
for the uapi headers and agreed with SPDX license identifier in the
files he inspected. For the non-uapi files Thomas did random spot checks
in about 15000 files.
In initial set of patches against 4.14-rc6, 3 files were found to have
copy/paste license identifier errors, and have been fixed to reflect the
correct identifier.
Additionally Philippe spent 10 hours this week doing a detailed manual
inspection and review of the 12,461 patched files from the initial patch
version early this week with:
- a full scancode scan run, collecting the matched texts, detected
license ids and scores
- reviewing anything where there was a license detected (about 500+
files) to ensure that the applied SPDX license was correct
- reviewing anything where there was no detection but the patch license
was not GPL-2.0 WITH Linux-syscall-note to ensure that the applied
SPDX license was correct
This produced a worksheet with 20 files needing minor correction. This
worksheet was then exported into 3 different .csv files for the
different types of files to be modified.
These .csv files were then reviewed by Greg. Thomas wrote a script to
parse the csv files and add the proper SPDX tag to the file, in the
format that the file expected. This script was further refined by Greg
based on the output to detect more types of files automatically and to
distinguish between header and source .c files (which need different
comment types.) Finally Greg ran the script using the .csv files to
generate the patches.
Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org>
Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-11-01 22:07:57 +08:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0 */
|
2011-02-09 20:16:52 +08:00
|
|
|
/*
|
|
|
|
* Internal header to deal with irq_desc->status which will be renamed
|
|
|
|
* to irq_desc->settings.
|
|
|
|
*/
|
|
|
|
enum {
|
|
|
|
_IRQ_DEFAULT_INIT_FLAGS = IRQ_DEFAULT_INIT_FLAGS,
|
2011-02-09 00:11:03 +08:00
|
|
|
_IRQ_PER_CPU = IRQ_PER_CPU,
|
2011-02-09 00:28:12 +08:00
|
|
|
_IRQ_LEVEL = IRQ_LEVEL,
|
2011-02-09 21:44:17 +08:00
|
|
|
_IRQ_NOPROBE = IRQ_NOPROBE,
|
|
|
|
_IRQ_NOREQUEST = IRQ_NOREQUEST,
|
2011-04-07 05:01:44 +08:00
|
|
|
_IRQ_NOTHREAD = IRQ_NOTHREAD,
|
2011-02-09 21:44:17 +08:00
|
|
|
_IRQ_NOAUTOEN = IRQ_NOAUTOEN,
|
|
|
|
_IRQ_MOVE_PCNTXT = IRQ_MOVE_PCNTXT,
|
2011-02-09 00:11:03 +08:00
|
|
|
_IRQ_NO_BALANCING = IRQ_NO_BALANCING,
|
2011-02-09 21:44:17 +08:00
|
|
|
_IRQ_NESTED_THREAD = IRQ_NESTED_THREAD,
|
genirq: Add support for per-cpu dev_id interrupts
The ARM GIC interrupt controller offers per CPU interrupts (PPIs),
which are usually used to connect local timers to each core. Each CPU
has its own private interface to the GIC, and only sees the PPIs that
are directly connect to it.
While these timers are separate devices and have a separate interrupt
line to a core, they all use the same IRQ number.
For these devices, request_irq() is not the right API as it assumes
that an IRQ number is visible by a number of CPUs (through the
affinity setting), but makes it very awkward to express that an IRQ
number can be handled by all CPUs, and yet be a different interrupt
line on each CPU, requiring a different dev_id cookie to be passed
back to the handler.
The *_percpu_irq() functions is designed to overcome these
limitations, by providing a per-cpu dev_id vector:
int request_percpu_irq(unsigned int irq, irq_handler_t handler,
const char *devname, void __percpu *percpu_dev_id);
void free_percpu_irq(unsigned int, void __percpu *);
int setup_percpu_irq(unsigned int irq, struct irqaction *new);
void remove_percpu_irq(unsigned int irq, struct irqaction *act);
void enable_percpu_irq(unsigned int irq);
void disable_percpu_irq(unsigned int irq);
The API has a number of limitations:
- no interrupt sharing
- no threading
- common handler across all the CPUs
Once the interrupt is requested using setup_percpu_irq() or
request_percpu_irq(), it must be enabled by each core that wishes its
local interrupt to be delivered.
Based on an initial patch by Thomas Gleixner.
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/1316793788-14500-2-git-send-email-marc.zyngier@arm.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2011-09-24 00:03:06 +08:00
|
|
|
_IRQ_PER_CPU_DEVID = IRQ_PER_CPU_DEVID,
|
2013-11-06 19:30:07 +08:00
|
|
|
_IRQ_IS_POLLED = IRQ_IS_POLLED,
|
2015-10-10 05:28:58 +08:00
|
|
|
_IRQ_DISABLE_UNLAZY = IRQ_DISABLE_UNLAZY,
|
2020-05-19 21:58:13 +08:00
|
|
|
_IRQ_HIDDEN = IRQ_HIDDEN,
|
2011-02-09 00:11:03 +08:00
|
|
|
_IRQF_MODIFY_MASK = IRQF_MODIFY_MASK,
|
2011-02-09 20:16:52 +08:00
|
|
|
};
|
2011-02-08 04:48:49 +08:00
|
|
|
|
2011-02-09 00:11:03 +08:00
|
|
|
#define IRQ_PER_CPU GOT_YOU_MORON
|
|
|
|
#define IRQ_NO_BALANCING GOT_YOU_MORON
|
2011-02-09 00:28:12 +08:00
|
|
|
#define IRQ_LEVEL GOT_YOU_MORON
|
2011-02-09 21:44:17 +08:00
|
|
|
#define IRQ_NOPROBE GOT_YOU_MORON
|
|
|
|
#define IRQ_NOREQUEST GOT_YOU_MORON
|
2011-04-07 05:01:44 +08:00
|
|
|
#define IRQ_NOTHREAD GOT_YOU_MORON
|
2011-02-09 21:44:17 +08:00
|
|
|
#define IRQ_NOAUTOEN GOT_YOU_MORON
|
|
|
|
#define IRQ_NESTED_THREAD GOT_YOU_MORON
|
genirq: Add support for per-cpu dev_id interrupts
The ARM GIC interrupt controller offers per CPU interrupts (PPIs),
which are usually used to connect local timers to each core. Each CPU
has its own private interface to the GIC, and only sees the PPIs that
are directly connect to it.
While these timers are separate devices and have a separate interrupt
line to a core, they all use the same IRQ number.
For these devices, request_irq() is not the right API as it assumes
that an IRQ number is visible by a number of CPUs (through the
affinity setting), but makes it very awkward to express that an IRQ
number can be handled by all CPUs, and yet be a different interrupt
line on each CPU, requiring a different dev_id cookie to be passed
back to the handler.
The *_percpu_irq() functions is designed to overcome these
limitations, by providing a per-cpu dev_id vector:
int request_percpu_irq(unsigned int irq, irq_handler_t handler,
const char *devname, void __percpu *percpu_dev_id);
void free_percpu_irq(unsigned int, void __percpu *);
int setup_percpu_irq(unsigned int irq, struct irqaction *new);
void remove_percpu_irq(unsigned int irq, struct irqaction *act);
void enable_percpu_irq(unsigned int irq);
void disable_percpu_irq(unsigned int irq);
The API has a number of limitations:
- no interrupt sharing
- no threading
- common handler across all the CPUs
Once the interrupt is requested using setup_percpu_irq() or
request_percpu_irq(), it must be enabled by each core that wishes its
local interrupt to be delivered.
Based on an initial patch by Thomas Gleixner.
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/1316793788-14500-2-git-send-email-marc.zyngier@arm.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2011-09-24 00:03:06 +08:00
|
|
|
#define IRQ_PER_CPU_DEVID GOT_YOU_MORON
|
2013-11-06 19:30:07 +08:00
|
|
|
#define IRQ_IS_POLLED GOT_YOU_MORON
|
2015-10-10 05:28:58 +08:00
|
|
|
#define IRQ_DISABLE_UNLAZY GOT_YOU_MORON
|
2020-05-19 21:58:13 +08:00
|
|
|
#define IRQ_HIDDEN GOT_YOU_MORON
|
2011-02-09 00:11:03 +08:00
|
|
|
#undef IRQF_MODIFY_MASK
|
|
|
|
#define IRQF_MODIFY_MASK GOT_YOU_MORON
|
|
|
|
|
|
|
|
static inline void
|
|
|
|
irq_settings_clr_and_set(struct irq_desc *desc, u32 clr, u32 set)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
desc->status_use_accessors &= ~(clr & _IRQF_MODIFY_MASK);
|
|
|
|
desc->status_use_accessors |= (set & _IRQF_MODIFY_MASK);
|
2011-02-09 00:11:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline bool irq_settings_is_per_cpu(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
return desc->status_use_accessors & _IRQ_PER_CPU;
|
2011-02-09 00:11:03 +08:00
|
|
|
}
|
|
|
|
|
genirq: Add support for per-cpu dev_id interrupts
The ARM GIC interrupt controller offers per CPU interrupts (PPIs),
which are usually used to connect local timers to each core. Each CPU
has its own private interface to the GIC, and only sees the PPIs that
are directly connect to it.
While these timers are separate devices and have a separate interrupt
line to a core, they all use the same IRQ number.
For these devices, request_irq() is not the right API as it assumes
that an IRQ number is visible by a number of CPUs (through the
affinity setting), but makes it very awkward to express that an IRQ
number can be handled by all CPUs, and yet be a different interrupt
line on each CPU, requiring a different dev_id cookie to be passed
back to the handler.
The *_percpu_irq() functions is designed to overcome these
limitations, by providing a per-cpu dev_id vector:
int request_percpu_irq(unsigned int irq, irq_handler_t handler,
const char *devname, void __percpu *percpu_dev_id);
void free_percpu_irq(unsigned int, void __percpu *);
int setup_percpu_irq(unsigned int irq, struct irqaction *new);
void remove_percpu_irq(unsigned int irq, struct irqaction *act);
void enable_percpu_irq(unsigned int irq);
void disable_percpu_irq(unsigned int irq);
The API has a number of limitations:
- no interrupt sharing
- no threading
- common handler across all the CPUs
Once the interrupt is requested using setup_percpu_irq() or
request_percpu_irq(), it must be enabled by each core that wishes its
local interrupt to be delivered.
Based on an initial patch by Thomas Gleixner.
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/1316793788-14500-2-git-send-email-marc.zyngier@arm.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2011-09-24 00:03:06 +08:00
|
|
|
static inline bool irq_settings_is_per_cpu_devid(struct irq_desc *desc)
|
|
|
|
{
|
|
|
|
return desc->status_use_accessors & _IRQ_PER_CPU_DEVID;
|
|
|
|
}
|
|
|
|
|
2011-02-09 00:11:03 +08:00
|
|
|
static inline void irq_settings_set_per_cpu(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
desc->status_use_accessors |= _IRQ_PER_CPU;
|
2011-02-09 00:11:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline void irq_settings_set_no_balancing(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
desc->status_use_accessors |= _IRQ_NO_BALANCING;
|
2011-02-09 00:11:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline bool irq_settings_has_no_balance_set(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
return desc->status_use_accessors & _IRQ_NO_BALANCING;
|
2011-02-09 00:11:03 +08:00
|
|
|
}
|
2011-02-09 00:28:12 +08:00
|
|
|
|
|
|
|
static inline u32 irq_settings_get_trigger_mask(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
return desc->status_use_accessors & IRQ_TYPE_SENSE_MASK;
|
2011-02-09 00:28:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline void
|
|
|
|
irq_settings_set_trigger_mask(struct irq_desc *desc, u32 mask)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
desc->status_use_accessors &= ~IRQ_TYPE_SENSE_MASK;
|
|
|
|
desc->status_use_accessors |= mask & IRQ_TYPE_SENSE_MASK;
|
2011-02-09 00:28:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline bool irq_settings_is_level(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
return desc->status_use_accessors & _IRQ_LEVEL;
|
2011-02-09 00:28:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline void irq_settings_clr_level(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
desc->status_use_accessors &= ~_IRQ_LEVEL;
|
2011-02-09 00:28:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline void irq_settings_set_level(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
desc->status_use_accessors |= _IRQ_LEVEL;
|
2011-02-09 00:28:12 +08:00
|
|
|
}
|
2011-02-09 21:44:17 +08:00
|
|
|
|
|
|
|
static inline bool irq_settings_can_request(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
return !(desc->status_use_accessors & _IRQ_NOREQUEST);
|
2011-02-09 21:44:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline void irq_settings_clr_norequest(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
desc->status_use_accessors &= ~_IRQ_NOREQUEST;
|
2011-02-09 21:44:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline void irq_settings_set_norequest(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
desc->status_use_accessors |= _IRQ_NOREQUEST;
|
2011-02-09 21:44:17 +08:00
|
|
|
}
|
|
|
|
|
2011-04-07 05:01:44 +08:00
|
|
|
static inline bool irq_settings_can_thread(struct irq_desc *desc)
|
|
|
|
{
|
|
|
|
return !(desc->status_use_accessors & _IRQ_NOTHREAD);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void irq_settings_clr_nothread(struct irq_desc *desc)
|
|
|
|
{
|
|
|
|
desc->status_use_accessors &= ~_IRQ_NOTHREAD;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void irq_settings_set_nothread(struct irq_desc *desc)
|
|
|
|
{
|
|
|
|
desc->status_use_accessors |= _IRQ_NOTHREAD;
|
|
|
|
}
|
|
|
|
|
2011-02-09 21:44:17 +08:00
|
|
|
static inline bool irq_settings_can_probe(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
return !(desc->status_use_accessors & _IRQ_NOPROBE);
|
2011-02-09 21:44:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline void irq_settings_clr_noprobe(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
desc->status_use_accessors &= ~_IRQ_NOPROBE;
|
2011-02-09 21:44:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline void irq_settings_set_noprobe(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
desc->status_use_accessors |= _IRQ_NOPROBE;
|
2011-02-09 21:44:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline bool irq_settings_can_move_pcntxt(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
return desc->status_use_accessors & _IRQ_MOVE_PCNTXT;
|
2011-02-09 21:44:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline bool irq_settings_can_autoenable(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
return !(desc->status_use_accessors & _IRQ_NOAUTOEN);
|
2011-02-09 21:44:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline bool irq_settings_is_nested_thread(struct irq_desc *desc)
|
|
|
|
{
|
2011-03-28 19:32:20 +08:00
|
|
|
return desc->status_use_accessors & _IRQ_NESTED_THREAD;
|
2011-02-09 21:44:17 +08:00
|
|
|
}
|
2013-11-06 19:30:07 +08:00
|
|
|
|
|
|
|
static inline bool irq_settings_is_polled(struct irq_desc *desc)
|
|
|
|
{
|
|
|
|
return desc->status_use_accessors & _IRQ_IS_POLLED;
|
|
|
|
}
|
2015-10-10 05:28:58 +08:00
|
|
|
|
|
|
|
static inline bool irq_settings_disable_unlazy(struct irq_desc *desc)
|
|
|
|
{
|
|
|
|
return desc->status_use_accessors & _IRQ_DISABLE_UNLAZY;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void irq_settings_clr_disable_unlazy(struct irq_desc *desc)
|
|
|
|
{
|
|
|
|
desc->status_use_accessors &= ~_IRQ_DISABLE_UNLAZY;
|
|
|
|
}
|
2020-05-19 21:58:13 +08:00
|
|
|
|
|
|
|
static inline bool irq_settings_is_hidden(struct irq_desc *desc)
|
|
|
|
{
|
|
|
|
return desc->status_use_accessors & _IRQ_HIDDEN;
|
|
|
|
}
|