You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'linus' into core/urgent
This commit is contained in:
@@ -13,6 +13,10 @@ config GENERIC_FIND_FIRST_BIT
|
||||
config GENERIC_FIND_NEXT_BIT
|
||||
bool
|
||||
|
||||
config GENERIC_FIND_LAST_BIT
|
||||
bool
|
||||
default y
|
||||
|
||||
config CRC_CCITT
|
||||
tristate "CRC-CCITT functions"
|
||||
help
|
||||
@@ -166,4 +170,8 @@ config CPUMASK_OFFSTACK
|
||||
them on the stack. This is a bit more expensive, but avoids
|
||||
stack overflow.
|
||||
|
||||
config DISABLE_OBSOLETE_CPUMASK_FUNCTIONS
|
||||
bool "Disable obsolete cpumask functions" if DEBUG_PER_CPU_MAPS
|
||||
depends on EXPERIMENTAL && BROKEN
|
||||
|
||||
endmenu
|
||||
|
||||
@@ -37,6 +37,7 @@ lib-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
|
||||
lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
|
||||
lib-$(CONFIG_GENERIC_FIND_FIRST_BIT) += find_next_bit.o
|
||||
lib-$(CONFIG_GENERIC_FIND_NEXT_BIT) += find_next_bit.o
|
||||
lib-$(CONFIG_GENERIC_FIND_LAST_BIT) += find_last_bit.o
|
||||
obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o
|
||||
obj-$(CONFIG_LOCK_KERNEL) += kernel_lock.o
|
||||
obj-$(CONFIG_PLIST) += plist.o
|
||||
|
||||
+59
-3
@@ -76,15 +76,28 @@ int cpumask_any_but(const struct cpumask *mask, unsigned int cpu)
|
||||
|
||||
/* These are not inline because of header tangles. */
|
||||
#ifdef CONFIG_CPUMASK_OFFSTACK
|
||||
bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)
|
||||
/**
|
||||
* alloc_cpumask_var_node - allocate a struct cpumask on a given node
|
||||
* @mask: pointer to cpumask_var_t where the cpumask is returned
|
||||
* @flags: GFP_ flags
|
||||
*
|
||||
* Only defined when CONFIG_CPUMASK_OFFSTACK=y, otherwise is
|
||||
* a nop returning a constant 1 (in <linux/cpumask.h>)
|
||||
* Returns TRUE if memory allocation succeeded, FALSE otherwise.
|
||||
*
|
||||
* In addition, mask will be NULL if this fails. Note that gcc is
|
||||
* usually smart enough to know that mask can never be NULL if
|
||||
* CONFIG_CPUMASK_OFFSTACK=n, so does code elimination in that case
|
||||
* too.
|
||||
*/
|
||||
bool alloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags, int node)
|
||||
{
|
||||
if (likely(slab_is_available()))
|
||||
*mask = kmalloc(cpumask_size(), flags);
|
||||
*mask = kmalloc_node(cpumask_size(), flags, node);
|
||||
else {
|
||||
#ifdef CONFIG_DEBUG_PER_CPU_MAPS
|
||||
printk(KERN_ERR
|
||||
"=> alloc_cpumask_var: kmalloc not available!\n");
|
||||
dump_stack();
|
||||
#endif
|
||||
*mask = NULL;
|
||||
}
|
||||
@@ -94,21 +107,64 @@ bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)
|
||||
dump_stack();
|
||||
}
|
||||
#endif
|
||||
/* FIXME: Bandaid to save us from old primitives which go to NR_CPUS. */
|
||||
if (*mask) {
|
||||
unsigned int tail;
|
||||
tail = BITS_TO_LONGS(NR_CPUS - nr_cpumask_bits) * sizeof(long);
|
||||
memset(cpumask_bits(*mask) + cpumask_size() - tail,
|
||||
0, tail);
|
||||
}
|
||||
|
||||
return *mask != NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(alloc_cpumask_var_node);
|
||||
|
||||
/**
|
||||
* alloc_cpumask_var - allocate a struct cpumask
|
||||
* @mask: pointer to cpumask_var_t where the cpumask is returned
|
||||
* @flags: GFP_ flags
|
||||
*
|
||||
* Only defined when CONFIG_CPUMASK_OFFSTACK=y, otherwise is
|
||||
* a nop returning a constant 1 (in <linux/cpumask.h>).
|
||||
*
|
||||
* See alloc_cpumask_var_node.
|
||||
*/
|
||||
bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)
|
||||
{
|
||||
return alloc_cpumask_var_node(mask, flags, numa_node_id());
|
||||
}
|
||||
EXPORT_SYMBOL(alloc_cpumask_var);
|
||||
|
||||
/**
|
||||
* alloc_bootmem_cpumask_var - allocate a struct cpumask from the bootmem arena.
|
||||
* @mask: pointer to cpumask_var_t where the cpumask is returned
|
||||
*
|
||||
* Only defined when CONFIG_CPUMASK_OFFSTACK=y, otherwise is
|
||||
* a nop (in <linux/cpumask.h>).
|
||||
* Either returns an allocated (zero-filled) cpumask, or causes the
|
||||
* system to panic.
|
||||
*/
|
||||
void __init alloc_bootmem_cpumask_var(cpumask_var_t *mask)
|
||||
{
|
||||
*mask = alloc_bootmem(cpumask_size());
|
||||
}
|
||||
|
||||
/**
|
||||
* free_cpumask_var - frees memory allocated for a struct cpumask.
|
||||
* @mask: cpumask to free
|
||||
*
|
||||
* This is safe on a NULL mask.
|
||||
*/
|
||||
void free_cpumask_var(cpumask_var_t mask)
|
||||
{
|
||||
kfree(mask);
|
||||
}
|
||||
EXPORT_SYMBOL(free_cpumask_var);
|
||||
|
||||
/**
|
||||
* free_bootmem_cpumask_var - frees result of alloc_bootmem_cpumask_var
|
||||
* @mask: cpumask to free
|
||||
*/
|
||||
void __init free_bootmem_cpumask_var(cpumask_var_t mask)
|
||||
{
|
||||
free_bootmem((unsigned long)mask, cpumask_size());
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/* find_last_bit.c: fallback find next bit implementation
|
||||
*
|
||||
* Copyright (C) 2008 IBM Corporation
|
||||
* Written by Rusty Russell <rusty@rustcorp.com.au>
|
||||
* (Inspired by David Howell's find_next_bit implementation)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/module.h>
|
||||
#include <asm/types.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
unsigned long find_last_bit(const unsigned long *addr, unsigned long size)
|
||||
{
|
||||
unsigned long words;
|
||||
unsigned long tmp;
|
||||
|
||||
/* Start at final word. */
|
||||
words = size / BITS_PER_LONG;
|
||||
|
||||
/* Partial final word? */
|
||||
if (size & (BITS_PER_LONG-1)) {
|
||||
tmp = (addr[words] & (~0UL >> (BITS_PER_LONG
|
||||
- (size & (BITS_PER_LONG-1)))));
|
||||
if (tmp)
|
||||
goto found;
|
||||
}
|
||||
|
||||
while (words) {
|
||||
tmp = addr[--words];
|
||||
if (tmp) {
|
||||
found:
|
||||
return words * BITS_PER_LONG + __fls(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
/* Not found */
|
||||
return size;
|
||||
}
|
||||
EXPORT_SYMBOL(find_last_bit);
|
||||
@@ -661,6 +661,9 @@ static char *ip4_addr_string(char *buf, char *end, u8 *addr, int field_width,
|
||||
*/
|
||||
static char *pointer(const char *fmt, char *buf, char *end, void *ptr, int field_width, int precision, int flags)
|
||||
{
|
||||
if (!ptr)
|
||||
return string(buf, end, "(null)", field_width, precision, flags);
|
||||
|
||||
switch (*fmt) {
|
||||
case 'F':
|
||||
ptr = dereference_function_descriptor(ptr);
|
||||
|
||||
Reference in New Issue
Block a user