Merge branch 'objtool/urgent'
Fixup conflicts. # Conflicts: # tools/objtool/check.c
This commit is contained in:
@@ -295,7 +295,7 @@ config DEBUG_INFO_DWARF4
|
||||
|
||||
config DEBUG_INFO_DWARF5
|
||||
bool "Generate DWARF Version 5 debuginfo"
|
||||
depends on GCC_VERSION >= 50000 || (CC_IS_CLANG && (AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502)))
|
||||
depends on !CC_IS_CLANG || (CC_IS_CLANG && (AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502)))
|
||||
depends on !DEBUG_INFO_BTF
|
||||
help
|
||||
Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc
|
||||
@@ -346,7 +346,7 @@ config FRAME_WARN
|
||||
int "Warn for stack frames larger than"
|
||||
range 0 8192
|
||||
default 2048 if GCC_PLUGIN_LATENT_ENTROPY
|
||||
default 1536 if (!64BIT && PARISC)
|
||||
default 1536 if (!64BIT && (PARISC || XTENSA))
|
||||
default 1024 if (!64BIT && !PARISC)
|
||||
default 2048 if 64BIT
|
||||
help
|
||||
|
||||
@@ -66,6 +66,7 @@ choice
|
||||
config KASAN_GENERIC
|
||||
bool "Generic mode"
|
||||
depends on HAVE_ARCH_KASAN && CC_HAS_KASAN_GENERIC
|
||||
depends on CC_HAS_WORKING_NOSANITIZE_ADDRESS
|
||||
select SLUB_DEBUG if SLUB
|
||||
select CONSTRUCTORS
|
||||
help
|
||||
@@ -86,6 +87,7 @@ config KASAN_GENERIC
|
||||
config KASAN_SW_TAGS
|
||||
bool "Software tag-based mode"
|
||||
depends on HAVE_ARCH_KASAN_SW_TAGS && CC_HAS_KASAN_SW_TAGS
|
||||
depends on CC_HAS_WORKING_NOSANITIZE_ADDRESS
|
||||
select SLUB_DEBUG if SLUB
|
||||
select CONSTRUCTORS
|
||||
help
|
||||
|
||||
@@ -792,7 +792,7 @@ void __init xbc_destroy_all(void)
|
||||
xbc_data = NULL;
|
||||
xbc_data_size = 0;
|
||||
xbc_node_num = 0;
|
||||
memblock_free(__pa(xbc_nodes), sizeof(struct xbc_node) * XBC_NODE_MAX);
|
||||
memblock_free_ptr(xbc_nodes, sizeof(struct xbc_node) * XBC_NODE_MAX);
|
||||
xbc_nodes = NULL;
|
||||
brace_index = 0;
|
||||
}
|
||||
|
||||
@@ -1972,3 +1972,39 @@ int import_single_range(int rw, void __user *buf, size_t len,
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(import_single_range);
|
||||
|
||||
/**
|
||||
* iov_iter_restore() - Restore a &struct iov_iter to the same state as when
|
||||
* iov_iter_save_state() was called.
|
||||
*
|
||||
* @i: &struct iov_iter to restore
|
||||
* @state: state to restore from
|
||||
*
|
||||
* Used after iov_iter_save_state() to bring restore @i, if operations may
|
||||
* have advanced it.
|
||||
*
|
||||
* Note: only works on ITER_IOVEC, ITER_BVEC, and ITER_KVEC
|
||||
*/
|
||||
void iov_iter_restore(struct iov_iter *i, struct iov_iter_state *state)
|
||||
{
|
||||
if (WARN_ON_ONCE(!iov_iter_is_bvec(i) && !iter_is_iovec(i)) &&
|
||||
!iov_iter_is_kvec(i))
|
||||
return;
|
||||
i->iov_offset = state->iov_offset;
|
||||
i->count = state->count;
|
||||
/*
|
||||
* For the *vec iters, nr_segs + iov is constant - if we increment
|
||||
* the vec, then we also decrement the nr_segs count. Hence we don't
|
||||
* need to track both of these, just one is enough and we can deduct
|
||||
* the other from that. ITER_KVEC and ITER_IOVEC are the same struct
|
||||
* size, so we can just increment the iov pointer as they are unionzed.
|
||||
* ITER_BVEC _may_ be the same size on some archs, but on others it is
|
||||
* not. Be safe and handle it separately.
|
||||
*/
|
||||
BUILD_BUG_ON(sizeof(struct iovec) != sizeof(struct kvec));
|
||||
if (iov_iter_is_bvec(i))
|
||||
i->bvec -= state->nr_segs - i->nr_segs;
|
||||
else
|
||||
i->iov -= state->nr_segs - i->nr_segs;
|
||||
i->nr_segs = state->nr_segs;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
|
||||
/* Copyright (c) 2016-2018, NXP Semiconductors
|
||||
/* Copyright 2016-2018 NXP
|
||||
* Copyright (c) 2018-2019, Vladimir Oltean <olteanv@gmail.com>
|
||||
*/
|
||||
#include <linux/packing.h>
|
||||
|
||||
@@ -134,4 +134,47 @@ void __iomem *pci_iomap_wc(struct pci_dev *dev, int bar, unsigned long maxlen)
|
||||
return pci_iomap_wc_range(dev, bar, 0, maxlen);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pci_iomap_wc);
|
||||
|
||||
/*
|
||||
* pci_iounmap() somewhat illogically comes from lib/iomap.c for the
|
||||
* CONFIG_GENERIC_IOMAP case, because that's the code that knows about
|
||||
* the different IOMAP ranges.
|
||||
*
|
||||
* But if the architecture does not use the generic iomap code, and if
|
||||
* it has _not_ defined it's own private pci_iounmap function, we define
|
||||
* it here.
|
||||
*
|
||||
* NOTE! This default implementation assumes that if the architecture
|
||||
* support ioport mapping (HAS_IOPORT_MAP), the ioport mapping will
|
||||
* be fixed to the range [ PCI_IOBASE, PCI_IOBASE+IO_SPACE_LIMIT [,
|
||||
* and does not need unmapping with 'ioport_unmap()'.
|
||||
*
|
||||
* If you have different rules for your architecture, you need to
|
||||
* implement your own pci_iounmap() that knows the rules for where
|
||||
* and how IO vs MEM get mapped.
|
||||
*
|
||||
* This code is odd, and the ARCH_HAS/ARCH_WANTS #define logic comes
|
||||
* from legacy <asm-generic/io.h> header file behavior. In particular,
|
||||
* it would seem to make sense to do the iounmap(p) for the non-IO-space
|
||||
* case here regardless, but that's not what the old header file code
|
||||
* did. Probably incorrectly, but this is meant to be bug-for-bug
|
||||
* compatible.
|
||||
*/
|
||||
#if defined(ARCH_WANTS_GENERIC_PCI_IOUNMAP)
|
||||
|
||||
void pci_iounmap(struct pci_dev *dev, void __iomem *p)
|
||||
{
|
||||
#ifdef ARCH_HAS_GENERIC_IOPORT_MAP
|
||||
uintptr_t start = (uintptr_t) PCI_IOBASE;
|
||||
uintptr_t addr = (uintptr_t) p;
|
||||
|
||||
if (addr >= start && addr < start + IO_SPACE_LIMIT)
|
||||
return;
|
||||
iounmap(p);
|
||||
#endif
|
||||
}
|
||||
EXPORT_SYMBOL(pci_iounmap);
|
||||
|
||||
#endif /* ARCH_WANTS_GENERIC_PCI_IOUNMAP */
|
||||
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
@@ -253,13 +253,12 @@ void inflate_fast(z_streamp strm, unsigned start)
|
||||
|
||||
sfrom = (unsigned short *)(from);
|
||||
loops = len >> 1;
|
||||
do
|
||||
#ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
|
||||
*sout++ = *sfrom++;
|
||||
#else
|
||||
*sout++ = get_unaligned16(sfrom++);
|
||||
#endif
|
||||
while (--loops);
|
||||
do {
|
||||
if (IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))
|
||||
*sout++ = *sfrom++;
|
||||
else
|
||||
*sout++ = get_unaligned16(sfrom++);
|
||||
} while (--loops);
|
||||
out = (unsigned char *)sout;
|
||||
from = (unsigned char *)sfrom;
|
||||
} else { /* dist == 1 or dist == 2 */
|
||||
|
||||
Reference in New Issue
Block a user