mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
Merge tag 'v4.9.161' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.161 stable release
This commit is contained in:
38
Makefile
38
Makefile
@@ -1,6 +1,6 @@
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 9
|
||||
SUBLEVEL = 160
|
||||
SUBLEVEL = 161
|
||||
EXTRAVERSION =
|
||||
NAME = Roaring Lionus
|
||||
|
||||
@@ -306,11 +306,6 @@ HOSTCXX = g++
|
||||
HOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
|
||||
HOSTCXXFLAGS = -O2
|
||||
|
||||
ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
|
||||
HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \
|
||||
-Wno-missing-field-initializers -fno-delete-null-pointer-checks
|
||||
endif
|
||||
|
||||
# Decide whether to build built-in, modular, or both.
|
||||
# Normally, just do built-in.
|
||||
|
||||
@@ -515,36 +510,17 @@ endif
|
||||
|
||||
ifeq ($(cc-name),clang)
|
||||
ifneq ($(CROSS_COMPILE),)
|
||||
CLANG_TARGET := -target $(notdir $(CROSS_COMPILE:%-=%))
|
||||
CLANG_FLAGS := --target=$(notdir $(CROSS_COMPILE:%-=%))
|
||||
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(LD)))
|
||||
CLANG_PREFIX := --prefix=$(GCC_TOOLCHAIN_DIR)
|
||||
CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR)
|
||||
GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
|
||||
endif
|
||||
ifneq ($(GCC_TOOLCHAIN),)
|
||||
CLANG_GCC_TC := -gcc-toolchain $(GCC_TOOLCHAIN)
|
||||
CLANG_FLAGS += --gcc-toolchain=$(GCC_TOOLCHAIN)
|
||||
endif
|
||||
KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX)
|
||||
KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX)
|
||||
KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
||||
# Quiet clang warning: comparison of unsigned expression < 0 is always false
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
|
||||
# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
|
||||
# source of a reference will be _MergedGlobals and not on of the whitelisted names.
|
||||
# See modpost pattern 2
|
||||
KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
|
||||
KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
|
||||
KBUILD_CFLAGS += $(call cc-option, -no-integrated-as)
|
||||
KBUILD_AFLAGS += $(call cc-option, -no-integrated-as)
|
||||
else
|
||||
|
||||
# These warnings generated too much noise in a regular build.
|
||||
# Use make W=1 to enable them (see scripts/Makefile.build)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
|
||||
CLANG_FLAGS += -no-integrated-as
|
||||
KBUILD_CFLAGS += $(CLANG_FLAGS)
|
||||
KBUILD_AFLAGS += $(CLANG_FLAGS)
|
||||
endif
|
||||
|
||||
|
||||
|
||||
@@ -49,6 +49,17 @@
|
||||
|
||||
#define ARCH_DMA_MINALIGN L1_CACHE_BYTES
|
||||
|
||||
/*
|
||||
* Make sure slab-allocated buffers are 64-bit aligned when atomic64_t uses
|
||||
* ARCv2 64-bit atomics (LLOCKD/SCONDD). This guarantess runtime 64-bit
|
||||
* alignment for any atomic64_t embedded in buffer.
|
||||
* Default ARCH_SLAB_MINALIGN is __alignof__(long long) which has a relaxed
|
||||
* value of 4 (and not 8) in ARC ABI.
|
||||
*/
|
||||
#if defined(CONFIG_ARC_HAS_LL64) && defined(CONFIG_ARC_HAS_LLSC)
|
||||
#define ARCH_SLAB_MINALIGN 8
|
||||
#endif
|
||||
|
||||
extern void arc_cache_init(void);
|
||||
extern char *arc_cache_mumbojumbo(int cpu_id, char *buf, int len);
|
||||
extern void read_decode_cache_bcr(void);
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <asm/entry.h>
|
||||
#include <asm/arcregs.h>
|
||||
#include <asm/cache.h>
|
||||
#include <asm/irqflags.h>
|
||||
|
||||
.macro CPU_EARLY_SETUP
|
||||
|
||||
@@ -47,6 +48,15 @@
|
||||
sr r5, [ARC_REG_DC_CTRL]
|
||||
|
||||
1:
|
||||
|
||||
#ifdef CONFIG_ISA_ARCV2
|
||||
; Unaligned access is disabled at reset, so re-enable early as
|
||||
; gcc 7.3.1 (ARC GNU 2018.03) onwards generates unaligned access
|
||||
; by default
|
||||
lr r5, [status32]
|
||||
bset r5, r5, STATUS_AD_BIT
|
||||
kflag r5
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.section .init.text, "ax",@progbits
|
||||
@@ -93,9 +103,9 @@ ENTRY(stext)
|
||||
#ifdef CONFIG_ARC_UBOOT_SUPPORT
|
||||
; Uboot - kernel ABI
|
||||
; r0 = [0] No uboot interaction, [1] cmdline in r2, [2] DTB in r2
|
||||
; r1 = magic number (board identity, unused as of now
|
||||
; r1 = magic number (always zero as of now)
|
||||
; r2 = pointer to uboot provided cmdline or external DTB in mem
|
||||
; These are handled later in setup_arch()
|
||||
; These are handled later in handle_uboot_args()
|
||||
st r0, [@uboot_tag]
|
||||
st r2, [@uboot_arg]
|
||||
#endif
|
||||
|
||||
@@ -381,43 +381,80 @@ void setup_processor(void)
|
||||
arc_chk_core_config();
|
||||
}
|
||||
|
||||
static inline int is_kernel(unsigned long addr)
|
||||
static inline bool uboot_arg_invalid(unsigned long addr)
|
||||
{
|
||||
if (addr >= (unsigned long)_stext && addr <= (unsigned long)_end)
|
||||
return 1;
|
||||
return 0;
|
||||
/*
|
||||
* Check that it is a untranslated address (although MMU is not enabled
|
||||
* yet, it being a high address ensures this is not by fluke)
|
||||
*/
|
||||
if (addr < PAGE_OFFSET)
|
||||
return true;
|
||||
|
||||
/* Check that address doesn't clobber resident kernel image */
|
||||
return addr >= (unsigned long)_stext && addr <= (unsigned long)_end;
|
||||
}
|
||||
|
||||
#define IGNORE_ARGS "Ignore U-boot args: "
|
||||
|
||||
/* uboot_tag values for U-boot - kernel ABI revision 0; see head.S */
|
||||
#define UBOOT_TAG_NONE 0
|
||||
#define UBOOT_TAG_CMDLINE 1
|
||||
#define UBOOT_TAG_DTB 2
|
||||
|
||||
void __init handle_uboot_args(void)
|
||||
{
|
||||
bool use_embedded_dtb = true;
|
||||
bool append_cmdline = false;
|
||||
|
||||
#ifdef CONFIG_ARC_UBOOT_SUPPORT
|
||||
/* check that we know this tag */
|
||||
if (uboot_tag != UBOOT_TAG_NONE &&
|
||||
uboot_tag != UBOOT_TAG_CMDLINE &&
|
||||
uboot_tag != UBOOT_TAG_DTB) {
|
||||
pr_warn(IGNORE_ARGS "invalid uboot tag: '%08x'\n", uboot_tag);
|
||||
goto ignore_uboot_args;
|
||||
}
|
||||
|
||||
if (uboot_tag != UBOOT_TAG_NONE &&
|
||||
uboot_arg_invalid((unsigned long)uboot_arg)) {
|
||||
pr_warn(IGNORE_ARGS "invalid uboot arg: '%px'\n", uboot_arg);
|
||||
goto ignore_uboot_args;
|
||||
}
|
||||
|
||||
/* see if U-boot passed an external Device Tree blob */
|
||||
if (uboot_tag == UBOOT_TAG_DTB) {
|
||||
machine_desc = setup_machine_fdt((void *)uboot_arg);
|
||||
|
||||
/* external Device Tree blob is invalid - use embedded one */
|
||||
use_embedded_dtb = !machine_desc;
|
||||
}
|
||||
|
||||
if (uboot_tag == UBOOT_TAG_CMDLINE)
|
||||
append_cmdline = true;
|
||||
|
||||
ignore_uboot_args:
|
||||
#endif
|
||||
|
||||
if (use_embedded_dtb) {
|
||||
machine_desc = setup_machine_fdt(__dtb_start);
|
||||
if (!machine_desc)
|
||||
panic("Embedded DT invalid\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* NOTE: @boot_command_line is populated by setup_machine_fdt() so this
|
||||
* append processing can only happen after.
|
||||
*/
|
||||
if (append_cmdline) {
|
||||
/* Ensure a whitespace between the 2 cmdlines */
|
||||
strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
|
||||
strlcat(boot_command_line, uboot_arg, COMMAND_LINE_SIZE);
|
||||
}
|
||||
}
|
||||
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
{
|
||||
#ifdef CONFIG_ARC_UBOOT_SUPPORT
|
||||
/* make sure that uboot passed pointer to cmdline/dtb is valid */
|
||||
if (uboot_tag && is_kernel((unsigned long)uboot_arg))
|
||||
panic("Invalid uboot arg\n");
|
||||
|
||||
/* See if u-boot passed an external Device Tree blob */
|
||||
machine_desc = setup_machine_fdt(uboot_arg); /* uboot_tag == 2 */
|
||||
if (!machine_desc)
|
||||
#endif
|
||||
{
|
||||
/* No, so try the embedded one */
|
||||
machine_desc = setup_machine_fdt(__dtb_start);
|
||||
if (!machine_desc)
|
||||
panic("Embedded DT invalid\n");
|
||||
|
||||
/*
|
||||
* If we are here, it is established that @uboot_arg didn't
|
||||
* point to DT blob. Instead if u-boot says it is cmdline,
|
||||
* append to embedded DT cmdline.
|
||||
* setup_machine_fdt() would have populated @boot_command_line
|
||||
*/
|
||||
if (uboot_tag == 1) {
|
||||
/* Ensure a whitespace between the 2 cmdlines */
|
||||
strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
|
||||
strlcat(boot_command_line, uboot_arg,
|
||||
COMMAND_LINE_SIZE);
|
||||
}
|
||||
}
|
||||
handle_uboot_args();
|
||||
|
||||
/* Save unparsed command line copy for /proc/cmdline */
|
||||
*cmdline_p = boot_command_line;
|
||||
|
||||
@@ -74,6 +74,7 @@ CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_SERIAL_8250_PCI is not set
|
||||
CONFIG_SERIAL_8250_NR_UARTS=1
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=1
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SERIAL_AR933X=y
|
||||
CONFIG_SERIAL_AR933X_CONSOLE=y
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
|
||||
@@ -71,14 +71,15 @@ static int __init vdma_init(void)
|
||||
get_order(VDMA_PGTBL_SIZE));
|
||||
BUG_ON(!pgtbl);
|
||||
dma_cache_wback_inv((unsigned long)pgtbl, VDMA_PGTBL_SIZE);
|
||||
pgtbl = (VDMA_PGTBL_ENTRY *)KSEG1ADDR(pgtbl);
|
||||
pgtbl = (VDMA_PGTBL_ENTRY *)CKSEG1ADDR((unsigned long)pgtbl);
|
||||
|
||||
/*
|
||||
* Clear the R4030 translation table
|
||||
*/
|
||||
vdma_pgtbl_init();
|
||||
|
||||
r4030_write_reg32(JAZZ_R4030_TRSTBL_BASE, CPHYSADDR(pgtbl));
|
||||
r4030_write_reg32(JAZZ_R4030_TRSTBL_BASE,
|
||||
CPHYSADDR((unsigned long)pgtbl));
|
||||
r4030_write_reg32(JAZZ_R4030_TRSTBL_LIM, VDMA_PGTBL_SIZE);
|
||||
r4030_write_reg32(JAZZ_R4030_TRSTBL_INV, 0);
|
||||
|
||||
|
||||
@@ -311,15 +311,29 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
|
||||
|
||||
long do_syscall_trace_enter(struct pt_regs *regs)
|
||||
{
|
||||
if (test_thread_flag(TIF_SYSCALL_TRACE) &&
|
||||
tracehook_report_syscall_entry(regs)) {
|
||||
if (test_thread_flag(TIF_SYSCALL_TRACE)) {
|
||||
int rc = tracehook_report_syscall_entry(regs);
|
||||
|
||||
/*
|
||||
* Tracing decided this syscall should not happen or the
|
||||
* debugger stored an invalid system call number. Skip
|
||||
* the system call and the system call restart handling.
|
||||
* As tracesys_next does not set %r28 to -ENOSYS
|
||||
* when %r20 is set to -1, initialize it here.
|
||||
*/
|
||||
regs->gr[20] = -1UL;
|
||||
goto out;
|
||||
regs->gr[28] = -ENOSYS;
|
||||
|
||||
if (rc) {
|
||||
/*
|
||||
* A nonzero return code from
|
||||
* tracehook_report_syscall_entry() tells us
|
||||
* to prevent the syscall execution. Skip
|
||||
* the syscall call and the syscall restart handling.
|
||||
*
|
||||
* Note that the tracer may also just change
|
||||
* regs->gr[20] to an invalid syscall number,
|
||||
* that is handled by tracesys_next.
|
||||
*/
|
||||
regs->gr[20] = -1UL;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Do the secure computing check after ptrace. */
|
||||
@@ -343,7 +357,6 @@ long do_syscall_trace_enter(struct pt_regs *regs)
|
||||
regs->gr[24] & 0xffffffff,
|
||||
regs->gr[23] & 0xffffffff);
|
||||
|
||||
out:
|
||||
/*
|
||||
* Sign extend the syscall number to 64bit since it may have been
|
||||
* modified by a compat ptrace call
|
||||
|
||||
@@ -34,6 +34,7 @@ KBUILD_CFLAGS += $(cflags-y)
|
||||
KBUILD_CFLAGS += -mno-mmx -mno-sse
|
||||
KBUILD_CFLAGS += $(call cc-option,-ffreestanding)
|
||||
KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
||||
|
||||
KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
|
||||
GCOV_PROFILE := n
|
||||
|
||||
@@ -717,7 +717,7 @@ static int he_init_cs_block_rcm(struct he_dev *he_dev)
|
||||
instead of '/ 512', use '>> 9' to prevent a call
|
||||
to divdu3 on x86 platforms
|
||||
*/
|
||||
rate_cps = (unsigned long long) (1 << exp) * (man + 512) >> 9;
|
||||
rate_cps = (unsigned long long) (1UL << exp) * (man + 512) >> 9;
|
||||
|
||||
if (rate_cps < 10)
|
||||
rate_cps = 10; /* 2.2.1 minimum payload rate is 10 cps */
|
||||
|
||||
@@ -574,7 +574,7 @@ static inline unsigned long hpet_time_div(struct hpets *hpets,
|
||||
}
|
||||
|
||||
static int
|
||||
hpet_ioctl_common(struct hpet_dev *devp, int cmd, unsigned long arg,
|
||||
hpet_ioctl_common(struct hpet_dev *devp, unsigned int cmd, unsigned long arg,
|
||||
struct hpet_info *info)
|
||||
{
|
||||
struct hpet_timer __iomem *timer;
|
||||
|
||||
@@ -1985,10 +1985,10 @@ static void ibx_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)
|
||||
DRM_DEBUG_DRIVER("PCH transcoder CRC error interrupt\n");
|
||||
|
||||
if (pch_iir & SDE_TRANSA_FIFO_UNDER)
|
||||
intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_A);
|
||||
intel_pch_fifo_underrun_irq_handler(dev_priv, PIPE_A);
|
||||
|
||||
if (pch_iir & SDE_TRANSB_FIFO_UNDER)
|
||||
intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_B);
|
||||
intel_pch_fifo_underrun_irq_handler(dev_priv, PIPE_B);
|
||||
}
|
||||
|
||||
static void ivb_err_int_handler(struct drm_i915_private *dev_priv)
|
||||
@@ -2022,13 +2022,13 @@ static void cpt_serr_int_handler(struct drm_i915_private *dev_priv)
|
||||
DRM_ERROR("PCH poison interrupt\n");
|
||||
|
||||
if (serr_int & SERR_INT_TRANS_A_FIFO_UNDERRUN)
|
||||
intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_A);
|
||||
intel_pch_fifo_underrun_irq_handler(dev_priv, PIPE_A);
|
||||
|
||||
if (serr_int & SERR_INT_TRANS_B_FIFO_UNDERRUN)
|
||||
intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_B);
|
||||
intel_pch_fifo_underrun_irq_handler(dev_priv, PIPE_B);
|
||||
|
||||
if (serr_int & SERR_INT_TRANS_C_FIFO_UNDERRUN)
|
||||
intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_C);
|
||||
intel_pch_fifo_underrun_irq_handler(dev_priv, PIPE_C);
|
||||
|
||||
I915_WRITE(SERR_INT, serr_int);
|
||||
}
|
||||
|
||||
@@ -1849,7 +1849,7 @@ static void lpt_enable_pch_transcoder(struct drm_i915_private *dev_priv,
|
||||
|
||||
/* FDI must be feeding us bits for PCH ports */
|
||||
assert_fdi_tx_enabled(dev_priv, (enum pipe) cpu_transcoder);
|
||||
assert_fdi_rx_enabled(dev_priv, TRANSCODER_A);
|
||||
assert_fdi_rx_enabled(dev_priv, PIPE_A);
|
||||
|
||||
/* Workaround: set timing override bit. */
|
||||
val = I915_READ(TRANS_CHICKEN2(PIPE_A));
|
||||
@@ -1950,7 +1950,7 @@ static void intel_enable_pipe(struct intel_crtc *crtc)
|
||||
assert_sprites_disabled(dev_priv, pipe);
|
||||
|
||||
if (HAS_PCH_LPT(dev_priv))
|
||||
pch_transcoder = TRANSCODER_A;
|
||||
pch_transcoder = PIPE_A;
|
||||
else
|
||||
pch_transcoder = pipe;
|
||||
|
||||
@@ -4636,7 +4636,7 @@ static void lpt_pch_enable(struct drm_crtc *crtc)
|
||||
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
|
||||
enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
|
||||
|
||||
assert_pch_transcoder_disabled(dev_priv, TRANSCODER_A);
|
||||
assert_pch_transcoder_disabled(dev_priv, PIPE_A);
|
||||
|
||||
lpt_program_iclkip(crtc);
|
||||
|
||||
@@ -5410,7 +5410,7 @@ static void haswell_crtc_enable(struct intel_crtc_state *pipe_config,
|
||||
return;
|
||||
|
||||
if (intel_crtc->config->has_pch_encoder)
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A,
|
||||
false);
|
||||
|
||||
intel_encoders_pre_pll_enable(crtc, pipe_config, old_state);
|
||||
@@ -5498,7 +5498,7 @@ static void haswell_crtc_enable(struct intel_crtc_state *pipe_config,
|
||||
intel_wait_for_vblank(dev, pipe);
|
||||
intel_wait_for_vblank(dev, pipe);
|
||||
intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A,
|
||||
true);
|
||||
}
|
||||
|
||||
@@ -5597,7 +5597,7 @@ static void haswell_crtc_disable(struct intel_crtc_state *old_crtc_state,
|
||||
enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
|
||||
|
||||
if (intel_crtc->config->has_pch_encoder)
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A,
|
||||
false);
|
||||
|
||||
intel_encoders_disable(crtc, old_crtc_state, old_state);
|
||||
@@ -5626,7 +5626,7 @@ static void haswell_crtc_disable(struct intel_crtc_state *old_crtc_state,
|
||||
intel_encoders_post_disable(crtc, old_crtc_state, old_state);
|
||||
|
||||
if (old_crtc_state->has_pch_encoder)
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A,
|
||||
true);
|
||||
}
|
||||
|
||||
|
||||
@@ -1095,12 +1095,12 @@ static inline unsigned int intel_num_planes(struct intel_crtc *crtc)
|
||||
bool intel_set_cpu_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
|
||||
enum pipe pipe, bool enable);
|
||||
bool intel_set_pch_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
|
||||
enum transcoder pch_transcoder,
|
||||
enum pipe pch_transcoder,
|
||||
bool enable);
|
||||
void intel_cpu_fifo_underrun_irq_handler(struct drm_i915_private *dev_priv,
|
||||
enum pipe pipe);
|
||||
void intel_pch_fifo_underrun_irq_handler(struct drm_i915_private *dev_priv,
|
||||
enum transcoder pch_transcoder);
|
||||
enum pipe pch_transcoder);
|
||||
void intel_check_cpu_fifo_underruns(struct drm_i915_private *dev_priv);
|
||||
void intel_check_pch_fifo_underruns(struct drm_i915_private *dev_priv);
|
||||
|
||||
|
||||
@@ -185,11 +185,11 @@ static void broadwell_set_fifo_underrun_reporting(struct drm_device *dev,
|
||||
}
|
||||
|
||||
static void ibx_set_fifo_underrun_reporting(struct drm_device *dev,
|
||||
enum transcoder pch_transcoder,
|
||||
enum pipe pch_transcoder,
|
||||
bool enable)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
uint32_t bit = (pch_transcoder == TRANSCODER_A) ?
|
||||
uint32_t bit = (pch_transcoder == PIPE_A) ?
|
||||
SDE_TRANSA_FIFO_UNDER : SDE_TRANSB_FIFO_UNDER;
|
||||
|
||||
if (enable)
|
||||
@@ -201,7 +201,7 @@ static void ibx_set_fifo_underrun_reporting(struct drm_device *dev,
|
||||
static void cpt_check_pch_fifo_underruns(struct intel_crtc *crtc)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
enum transcoder pch_transcoder = (enum transcoder) crtc->pipe;
|
||||
enum pipe pch_transcoder = crtc->pipe;
|
||||
uint32_t serr_int = I915_READ(SERR_INT);
|
||||
|
||||
assert_spin_locked(&dev_priv->irq_lock);
|
||||
@@ -212,12 +212,12 @@ static void cpt_check_pch_fifo_underruns(struct intel_crtc *crtc)
|
||||
I915_WRITE(SERR_INT, SERR_INT_TRANS_FIFO_UNDERRUN(pch_transcoder));
|
||||
POSTING_READ(SERR_INT);
|
||||
|
||||
DRM_ERROR("pch fifo underrun on pch transcoder %s\n",
|
||||
transcoder_name(pch_transcoder));
|
||||
DRM_ERROR("pch fifo underrun on pch transcoder %c\n",
|
||||
pipe_name(pch_transcoder));
|
||||
}
|
||||
|
||||
static void cpt_set_fifo_underrun_reporting(struct drm_device *dev,
|
||||
enum transcoder pch_transcoder,
|
||||
enum pipe pch_transcoder,
|
||||
bool enable, bool old)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
@@ -235,8 +235,8 @@ static void cpt_set_fifo_underrun_reporting(struct drm_device *dev,
|
||||
|
||||
if (old && I915_READ(SERR_INT) &
|
||||
SERR_INT_TRANS_FIFO_UNDERRUN(pch_transcoder)) {
|
||||
DRM_ERROR("uncleared pch fifo underrun on pch transcoder %s\n",
|
||||
transcoder_name(pch_transcoder));
|
||||
DRM_ERROR("uncleared pch fifo underrun on pch transcoder %c\n",
|
||||
pipe_name(pch_transcoder));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -311,7 +311,7 @@ bool intel_set_cpu_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
|
||||
* Returns the previous state of underrun reporting.
|
||||
*/
|
||||
bool intel_set_pch_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
|
||||
enum transcoder pch_transcoder,
|
||||
enum pipe pch_transcoder,
|
||||
bool enable)
|
||||
{
|
||||
struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pch_transcoder];
|
||||
@@ -384,12 +384,12 @@ void intel_cpu_fifo_underrun_irq_handler(struct drm_i915_private *dev_priv,
|
||||
* interrupt to avoid an irq storm.
|
||||
*/
|
||||
void intel_pch_fifo_underrun_irq_handler(struct drm_i915_private *dev_priv,
|
||||
enum transcoder pch_transcoder)
|
||||
enum pipe pch_transcoder)
|
||||
{
|
||||
if (intel_set_pch_fifo_underrun_reporting(dev_priv, pch_transcoder,
|
||||
false))
|
||||
DRM_ERROR("PCH transcoder %s FIFO underrun\n",
|
||||
transcoder_name(pch_transcoder));
|
||||
DRM_ERROR("PCH transcoder %c FIFO underrun\n",
|
||||
pipe_name(pch_transcoder));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2639,7 +2639,6 @@ static int srp_reset_device(struct scsi_cmnd *scmnd)
|
||||
{
|
||||
struct srp_target_port *target = host_to_target(scmnd->device->host);
|
||||
struct srp_rdma_ch *ch;
|
||||
int i, j;
|
||||
u8 status;
|
||||
|
||||
shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n");
|
||||
@@ -2651,15 +2650,6 @@ static int srp_reset_device(struct scsi_cmnd *scmnd)
|
||||
if (status)
|
||||
return FAILED;
|
||||
|
||||
for (i = 0; i < target->ch_count; i++) {
|
||||
ch = &target->ch[i];
|
||||
for (j = 0; j < target->req_ring_size; ++j) {
|
||||
struct srp_request *req = &ch->req_ring[j];
|
||||
|
||||
srp_finish_req(ch, req, scmnd->device, DID_RESET << 16);
|
||||
}
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@@ -423,7 +423,7 @@ void b1_parse_version(avmctrl_info *cinfo)
|
||||
int i, j;
|
||||
|
||||
for (j = 0; j < AVM_MAXVERSION; j++)
|
||||
cinfo->version[j] = "\0\0" + 1;
|
||||
cinfo->version[j] = "";
|
||||
for (i = 0, j = 0;
|
||||
j < AVM_MAXVERSION && i < cinfo->versionlen;
|
||||
j++, i += cinfo->versionbuf[i] + 1)
|
||||
|
||||
@@ -1455,15 +1455,19 @@ isdn_tty_set_termios(struct tty_struct *tty, struct ktermios *old_termios)
|
||||
{
|
||||
modem_info *info = (modem_info *) tty->driver_data;
|
||||
|
||||
mutex_lock(&modem_info_mutex);
|
||||
if (!old_termios)
|
||||
isdn_tty_change_speed(info);
|
||||
else {
|
||||
if (tty->termios.c_cflag == old_termios->c_cflag &&
|
||||
tty->termios.c_ispeed == old_termios->c_ispeed &&
|
||||
tty->termios.c_ospeed == old_termios->c_ospeed)
|
||||
tty->termios.c_ospeed == old_termios->c_ospeed) {
|
||||
mutex_unlock(&modem_info_mutex);
|
||||
return;
|
||||
}
|
||||
isdn_tty_change_speed(info);
|
||||
}
|
||||
mutex_unlock(&modem_info_mutex);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -318,7 +318,9 @@ static int lp5523_init_program_engine(struct lp55xx_chip *chip)
|
||||
|
||||
/* Let the programs run for couple of ms and check the engine status */
|
||||
usleep_range(3000, 6000);
|
||||
lp55xx_read(chip, LP5523_REG_STATUS, &status);
|
||||
ret = lp55xx_read(chip, LP5523_REG_STATUS, &status);
|
||||
if (ret)
|
||||
return ret;
|
||||
status &= LP5523_ENG_STATUS_MASK;
|
||||
|
||||
if (status != LP5523_ENG_STATUS_MASK) {
|
||||
|
||||
@@ -257,7 +257,7 @@ static int get_register_interruptible(struct ab8500 *ab8500, u8 bank,
|
||||
mutex_unlock(&ab8500->lock);
|
||||
dev_vdbg(ab8500->dev, "rd: addr %#x => data %#x\n", addr, ret);
|
||||
|
||||
return ret;
|
||||
return (ret < 0) ? ret : 0;
|
||||
}
|
||||
|
||||
static int ab8500_get_register(struct device *dev, u8 bank,
|
||||
|
||||
@@ -2588,7 +2588,7 @@ static struct irq_chip prcmu_irq_chip = {
|
||||
.irq_unmask = prcmu_irq_unmask,
|
||||
};
|
||||
|
||||
static __init char *fw_project_name(u32 project)
|
||||
static char *fw_project_name(u32 project)
|
||||
{
|
||||
switch (project) {
|
||||
case PRCMU_FW_PROJECT_U8500:
|
||||
@@ -2736,7 +2736,7 @@ void __init db8500_prcmu_early_init(u32 phy_base, u32 size)
|
||||
INIT_WORK(&mb0_transfer.mask_work, prcmu_mask_work);
|
||||
}
|
||||
|
||||
static void __init init_prcm_registers(void)
|
||||
static void init_prcm_registers(void)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
|
||||
@@ -274,7 +274,9 @@ int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx, unsigned int mode,
|
||||
|
||||
mc13xxx->adcflags |= MC13XXX_ADC_WORKING;
|
||||
|
||||
mc13xxx_reg_read(mc13xxx, MC13XXX_ADC0, &old_adc0);
|
||||
ret = mc13xxx_reg_read(mc13xxx, MC13XXX_ADC0, &old_adc0);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
adc0 = MC13XXX_ADC0_ADINC1 | MC13XXX_ADC0_ADINC2;
|
||||
adc1 = MC13XXX_ADC1_ADEN | MC13XXX_ADC1_ADTRIGIGN | MC13XXX_ADC1_ASC;
|
||||
|
||||
@@ -306,8 +306,7 @@ static int mt6397_probe(struct platform_device *pdev)
|
||||
|
||||
default:
|
||||
dev_err(&pdev->dev, "unsupported chip: %d\n", id);
|
||||
ret = -ENODEV;
|
||||
break;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
|
||||
@@ -638,6 +638,10 @@ static int qcom_rpm_probe(struct platform_device *pdev)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
writel(fw_version[0], RPM_CTRL_REG(rpm, 0));
|
||||
writel(fw_version[1], RPM_CTRL_REG(rpm, 1));
|
||||
writel(fw_version[2], RPM_CTRL_REG(rpm, 2));
|
||||
|
||||
dev_info(&pdev->dev, "RPM firmware %u.%u.%u\n", fw_version[0],
|
||||
fw_version[1],
|
||||
fw_version[2]);
|
||||
|
||||
@@ -264,8 +264,9 @@ static int ti_tscadc_probe(struct platform_device *pdev)
|
||||
cell->pdata_size = sizeof(tscadc);
|
||||
}
|
||||
|
||||
err = mfd_add_devices(&pdev->dev, pdev->id, tscadc->cells,
|
||||
tscadc->used_cells, NULL, 0, NULL);
|
||||
err = mfd_add_devices(&pdev->dev, PLATFORM_DEVID_AUTO,
|
||||
tscadc->cells, tscadc->used_cells, NULL,
|
||||
0, NULL);
|
||||
if (err < 0)
|
||||
goto err_disable_clk;
|
||||
|
||||
|
||||
@@ -979,7 +979,7 @@ add_children(struct twl4030_platform_data *pdata, unsigned irq_base,
|
||||
* letting it generate the right frequencies for USB, MADC, and
|
||||
* other purposes.
|
||||
*/
|
||||
static inline int __init protect_pm_master(void)
|
||||
static inline int protect_pm_master(void)
|
||||
{
|
||||
int e = 0;
|
||||
|
||||
@@ -988,7 +988,7 @@ static inline int __init protect_pm_master(void)
|
||||
return e;
|
||||
}
|
||||
|
||||
static inline int __init unprotect_pm_master(void)
|
||||
static inline int unprotect_pm_master(void)
|
||||
{
|
||||
int e = 0;
|
||||
|
||||
|
||||
@@ -1618,6 +1618,7 @@ static const struct reg_default wm5110_reg_default[] = {
|
||||
{ 0x00000ECD, 0x0000 }, /* R3789 - HPLPF4_2 */
|
||||
{ 0x00000EE0, 0x0000 }, /* R3808 - ASRC_ENABLE */
|
||||
{ 0x00000EE2, 0x0000 }, /* R3810 - ASRC_RATE1 */
|
||||
{ 0x00000EE3, 0x4000 }, /* R3811 - ASRC_RATE2 */
|
||||
{ 0x00000EF0, 0x0000 }, /* R3824 - ISRC 1 CTRL 1 */
|
||||
{ 0x00000EF1, 0x0000 }, /* R3825 - ISRC 1 CTRL 2 */
|
||||
{ 0x00000EF2, 0x0000 }, /* R3826 - ISRC 1 CTRL 3 */
|
||||
@@ -2869,6 +2870,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
|
||||
case ARIZONA_ASRC_ENABLE:
|
||||
case ARIZONA_ASRC_STATUS:
|
||||
case ARIZONA_ASRC_RATE1:
|
||||
case ARIZONA_ASRC_RATE2:
|
||||
case ARIZONA_ISRC_1_CTRL_1:
|
||||
case ARIZONA_ISRC_1_CTRL_2:
|
||||
case ARIZONA_ISRC_1_CTRL_3:
|
||||
|
||||
@@ -149,12 +149,10 @@ static void hns_ae_put_handle(struct hnae_handle *handle)
|
||||
struct hnae_vf_cb *vf_cb = hns_ae_get_vf_cb(handle);
|
||||
int i;
|
||||
|
||||
vf_cb->mac_cb = NULL;
|
||||
|
||||
kfree(vf_cb);
|
||||
|
||||
for (i = 0; i < handle->q_num; i++)
|
||||
hns_ae_get_ring_pair(handle->qs[i])->used_by_vf = 0;
|
||||
|
||||
kfree(vf_cb);
|
||||
}
|
||||
|
||||
static void hns_ae_ring_enable_all(struct hnae_handle *handle, int val)
|
||||
|
||||
@@ -777,13 +777,27 @@ static int get_fixed_ipv6_csum(__wsum hw_checksum, struct sk_buff *skb,
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#define short_frame(size) ((size) <= ETH_ZLEN + ETH_FCS_LEN)
|
||||
|
||||
static int check_csum(struct mlx4_cqe *cqe, struct sk_buff *skb, void *va,
|
||||
netdev_features_t dev_features)
|
||||
{
|
||||
__wsum hw_checksum = 0;
|
||||
void *hdr;
|
||||
|
||||
void *hdr = (u8 *)va + sizeof(struct ethhdr);
|
||||
/* CQE csum doesn't cover padding octets in short ethernet
|
||||
* frames. And the pad field is appended prior to calculating
|
||||
* and appending the FCS field.
|
||||
*
|
||||
* Detecting these padded frames requires to verify and parse
|
||||
* IP headers, so we simply force all those small frames to skip
|
||||
* checksum complete.
|
||||
*/
|
||||
if (short_frame(skb->len))
|
||||
return -EINVAL;
|
||||
|
||||
hdr = (u8 *)va + sizeof(struct ethhdr);
|
||||
hw_checksum = csum_unfold((__force __sum16)cqe->checksum);
|
||||
|
||||
if (cqe->vlan_my_qpn & cpu_to_be32(MLX4_CQE_CVLAN_PRESENT_MASK) &&
|
||||
@@ -945,6 +959,11 @@ xdp_drop:
|
||||
}
|
||||
|
||||
if (likely(dev->features & NETIF_F_RXCSUM)) {
|
||||
/* TODO: For IP non TCP/UDP packets when csum complete is
|
||||
* not an option (not supported or any other reason) we can
|
||||
* actually check cqe IPOK status bit and report
|
||||
* CHECKSUM_UNNECESSARY rather than CHECKSUM_NONE
|
||||
*/
|
||||
if (cqe->status & cpu_to_be16(MLX4_CQE_STATUS_TCP |
|
||||
MLX4_CQE_STATUS_UDP)) {
|
||||
if ((cqe->status & cpu_to_be16(MLX4_CQE_STATUS_IPOK)) &&
|
||||
|
||||
@@ -91,6 +91,7 @@ static void mlx5e_update_sw_rep_counters(struct mlx5e_priv *priv)
|
||||
|
||||
s->tx_packets += sq_stats->packets;
|
||||
s->tx_bytes += sq_stats->bytes;
|
||||
s->tx_queue_dropped += sq_stats->dropped;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -794,7 +794,7 @@ static int mlxsw_sp_port_vlans_add(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
static enum mlxsw_reg_sfd_rec_policy mlxsw_sp_sfd_rec_policy(bool dynamic)
|
||||
{
|
||||
return dynamic ? MLXSW_REG_SFD_REC_POLICY_DYNAMIC_ENTRY_INGRESS :
|
||||
MLXSW_REG_SFD_REC_POLICY_STATIC_ENTRY;
|
||||
MLXSW_REG_SFD_REC_POLICY_DYNAMIC_ENTRY_MLAG;
|
||||
}
|
||||
|
||||
static enum mlxsw_reg_sfd_op mlxsw_sp_sfd_op(bool adding)
|
||||
@@ -806,7 +806,7 @@ static enum mlxsw_reg_sfd_op mlxsw_sp_sfd_op(bool adding)
|
||||
static int __mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp *mlxsw_sp, u8 local_port,
|
||||
const char *mac, u16 fid, bool adding,
|
||||
enum mlxsw_reg_sfd_rec_action action,
|
||||
bool dynamic)
|
||||
enum mlxsw_reg_sfd_rec_policy policy)
|
||||
{
|
||||
char *sfd_pl;
|
||||
u8 num_rec;
|
||||
@@ -817,8 +817,7 @@ static int __mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp *mlxsw_sp, u8 local_port,
|
||||
return -ENOMEM;
|
||||
|
||||
mlxsw_reg_sfd_pack(sfd_pl, mlxsw_sp_sfd_op(adding), 0);
|
||||
mlxsw_reg_sfd_uc_pack(sfd_pl, 0, mlxsw_sp_sfd_rec_policy(dynamic),
|
||||
mac, fid, action, local_port);
|
||||
mlxsw_reg_sfd_uc_pack(sfd_pl, 0, policy, mac, fid, action, local_port);
|
||||
num_rec = mlxsw_reg_sfd_num_rec_get(sfd_pl);
|
||||
err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sfd), sfd_pl);
|
||||
if (err)
|
||||
@@ -837,7 +836,8 @@ static int mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp *mlxsw_sp, u8 local_port,
|
||||
bool dynamic)
|
||||
{
|
||||
return __mlxsw_sp_port_fdb_uc_op(mlxsw_sp, local_port, mac, fid, adding,
|
||||
MLXSW_REG_SFD_REC_ACTION_NOP, dynamic);
|
||||
MLXSW_REG_SFD_REC_ACTION_NOP,
|
||||
mlxsw_sp_sfd_rec_policy(dynamic));
|
||||
}
|
||||
|
||||
int mlxsw_sp_rif_fdb_op(struct mlxsw_sp *mlxsw_sp, const char *mac, u16 fid,
|
||||
@@ -845,7 +845,7 @@ int mlxsw_sp_rif_fdb_op(struct mlxsw_sp *mlxsw_sp, const char *mac, u16 fid,
|
||||
{
|
||||
return __mlxsw_sp_port_fdb_uc_op(mlxsw_sp, 0, mac, fid, adding,
|
||||
MLXSW_REG_SFD_REC_ACTION_FORWARD_IP_ROUTER,
|
||||
false);
|
||||
MLXSW_REG_SFD_REC_POLICY_STATIC_ENTRY);
|
||||
}
|
||||
|
||||
static int mlxsw_sp_port_fdb_uc_lag_op(struct mlxsw_sp *mlxsw_sp, u16 lag_id,
|
||||
|
||||
@@ -1013,6 +1013,10 @@ static void qed_ll2_post_rx_buffer_notify_fw(struct qed_hwfn *p_hwfn,
|
||||
cq_prod = qed_chain_get_prod_idx(&p_rx->rcq_chain);
|
||||
rx_prod.bd_prod = cpu_to_le16(bd_prod);
|
||||
rx_prod.cqe_prod = cpu_to_le16(cq_prod);
|
||||
|
||||
/* Make sure chain element is updated before ringing the doorbell */
|
||||
dma_wmb();
|
||||
|
||||
DIRECT_REG_WR(p_rx->set_prod_addr, *((u32 *)&rx_prod));
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
|
||||
unsigned int entry = priv->cur_tx;
|
||||
struct dma_desc *desc = priv->dma_tx + entry;
|
||||
unsigned int nopaged_len = skb_headlen(skb);
|
||||
unsigned int bmax;
|
||||
unsigned int bmax, des2;
|
||||
unsigned int i = 1, len;
|
||||
|
||||
if (priv->plat->enh_desc)
|
||||
@@ -44,11 +44,12 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
|
||||
|
||||
len = nopaged_len - bmax;
|
||||
|
||||
desc->des2 = dma_map_single(priv->device, skb->data,
|
||||
bmax, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(priv->device, desc->des2))
|
||||
des2 = dma_map_single(priv->device, skb->data,
|
||||
bmax, DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
priv->tx_skbuff_dma[entry].buf = desc->des2;
|
||||
priv->tx_skbuff_dma[entry].buf = des2;
|
||||
priv->tx_skbuff_dma[entry].len = bmax;
|
||||
/* do not close the descriptor and do not set own bit */
|
||||
priv->hw->desc->prepare_tx_desc(desc, 1, bmax, csum, STMMAC_CHAIN_MODE,
|
||||
@@ -60,12 +61,13 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
|
||||
desc = priv->dma_tx + entry;
|
||||
|
||||
if (len > bmax) {
|
||||
desc->des2 = dma_map_single(priv->device,
|
||||
(skb->data + bmax * i),
|
||||
bmax, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(priv->device, desc->des2))
|
||||
des2 = dma_map_single(priv->device,
|
||||
(skb->data + bmax * i),
|
||||
bmax, DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
priv->tx_skbuff_dma[entry].buf = desc->des2;
|
||||
priv->tx_skbuff_dma[entry].buf = des2;
|
||||
priv->tx_skbuff_dma[entry].len = bmax;
|
||||
priv->hw->desc->prepare_tx_desc(desc, 0, bmax, csum,
|
||||
STMMAC_CHAIN_MODE, 1,
|
||||
@@ -73,12 +75,13 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
|
||||
len -= bmax;
|
||||
i++;
|
||||
} else {
|
||||
desc->des2 = dma_map_single(priv->device,
|
||||
(skb->data + bmax * i), len,
|
||||
DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(priv->device, desc->des2))
|
||||
des2 = dma_map_single(priv->device,
|
||||
(skb->data + bmax * i), len,
|
||||
DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
priv->tx_skbuff_dma[entry].buf = desc->des2;
|
||||
priv->tx_skbuff_dma[entry].buf = des2;
|
||||
priv->tx_skbuff_dma[entry].len = len;
|
||||
/* last descriptor can be set now */
|
||||
priv->hw->desc->prepare_tx_desc(desc, 0, len, csum,
|
||||
@@ -119,19 +122,19 @@ static void stmmac_init_dma_chain(void *des, dma_addr_t phy_addr,
|
||||
struct dma_extended_desc *p = (struct dma_extended_desc *)des;
|
||||
for (i = 0; i < (size - 1); i++) {
|
||||
dma_phy += sizeof(struct dma_extended_desc);
|
||||
p->basic.des3 = (unsigned int)dma_phy;
|
||||
p->basic.des3 = cpu_to_le32((unsigned int)dma_phy);
|
||||
p++;
|
||||
}
|
||||
p->basic.des3 = (unsigned int)phy_addr;
|
||||
p->basic.des3 = cpu_to_le32((unsigned int)phy_addr);
|
||||
|
||||
} else {
|
||||
struct dma_desc *p = (struct dma_desc *)des;
|
||||
for (i = 0; i < (size - 1); i++) {
|
||||
dma_phy += sizeof(struct dma_desc);
|
||||
p->des3 = (unsigned int)dma_phy;
|
||||
p->des3 = cpu_to_le32((unsigned int)dma_phy);
|
||||
p++;
|
||||
}
|
||||
p->des3 = (unsigned int)phy_addr;
|
||||
p->des3 = cpu_to_le32((unsigned int)phy_addr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,10 +147,10 @@ static void stmmac_refill_desc3(void *priv_ptr, struct dma_desc *p)
|
||||
* 1588-2002 time stamping is enabled, hence reinitialize it
|
||||
* to keep explicit chaining in the descriptor.
|
||||
*/
|
||||
p->des3 = (unsigned int)(priv->dma_rx_phy +
|
||||
(((priv->dirty_rx) + 1) %
|
||||
DMA_RX_SIZE) *
|
||||
sizeof(struct dma_desc));
|
||||
p->des3 = cpu_to_le32((unsigned int)(priv->dma_rx_phy +
|
||||
(((priv->dirty_rx) + 1) %
|
||||
DMA_RX_SIZE) *
|
||||
sizeof(struct dma_desc)));
|
||||
}
|
||||
|
||||
static void stmmac_clean_desc3(void *priv_ptr, struct dma_desc *p)
|
||||
@@ -161,9 +164,9 @@ static void stmmac_clean_desc3(void *priv_ptr, struct dma_desc *p)
|
||||
* 1588-2002 time stamping is enabled, hence reinitialize it
|
||||
* to keep explicit chaining in the descriptor.
|
||||
*/
|
||||
p->des3 = (unsigned int)((priv->dma_tx_phy +
|
||||
((priv->dirty_tx + 1) % DMA_TX_SIZE))
|
||||
* sizeof(struct dma_desc));
|
||||
p->des3 = cpu_to_le32((unsigned int)((priv->dma_tx_phy +
|
||||
((priv->dirty_tx + 1) % DMA_TX_SIZE))
|
||||
* sizeof(struct dma_desc)));
|
||||
}
|
||||
|
||||
const struct stmmac_mode_ops chain_mode_ops = {
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
#define TDES0_ERROR_SUMMARY BIT(15)
|
||||
#define TDES0_IP_HEADER_ERROR BIT(16)
|
||||
#define TDES0_TIME_STAMP_STATUS BIT(17)
|
||||
#define TDES0_OWN BIT(31)
|
||||
#define TDES0_OWN ((u32)BIT(31)) /* silence sparse */
|
||||
/* TDES1 */
|
||||
#define TDES1_BUFFER1_SIZE_MASK GENMASK(10, 0)
|
||||
#define TDES1_BUFFER2_SIZE_MASK GENMASK(21, 11)
|
||||
@@ -130,7 +130,7 @@
|
||||
#define ETDES0_FIRST_SEGMENT BIT(28)
|
||||
#define ETDES0_LAST_SEGMENT BIT(29)
|
||||
#define ETDES0_INTERRUPT BIT(30)
|
||||
#define ETDES0_OWN BIT(31)
|
||||
#define ETDES0_OWN ((u32)BIT(31)) /* silence sparse */
|
||||
/* TDES1 */
|
||||
#define ETDES1_BUFFER1_SIZE_MASK GENMASK(12, 0)
|
||||
#define ETDES1_BUFFER2_SIZE_MASK GENMASK(28, 16)
|
||||
@@ -170,19 +170,19 @@
|
||||
|
||||
/* Basic descriptor structure for normal and alternate descriptors */
|
||||
struct dma_desc {
|
||||
unsigned int des0;
|
||||
unsigned int des1;
|
||||
unsigned int des2;
|
||||
unsigned int des3;
|
||||
__le32 des0;
|
||||
__le32 des1;
|
||||
__le32 des2;
|
||||
__le32 des3;
|
||||
};
|
||||
|
||||
/* Extended descriptor structure (e.g. >= databook 3.50a) */
|
||||
struct dma_extended_desc {
|
||||
struct dma_desc basic; /* Basic descriptors */
|
||||
unsigned int des4; /* Extended Status */
|
||||
unsigned int des5; /* Reserved */
|
||||
unsigned int des6; /* Tx/Rx Timestamp Low */
|
||||
unsigned int des7; /* Tx/Rx Timestamp High */
|
||||
__le32 des4; /* Extended Status */
|
||||
__le32 des5; /* Reserved */
|
||||
__le32 des6; /* Tx/Rx Timestamp Low */
|
||||
__le32 des7; /* Tx/Rx Timestamp High */
|
||||
};
|
||||
|
||||
/* Transmit checksum insertion control */
|
||||
|
||||
@@ -35,47 +35,50 @@
|
||||
/* Enhanced descriptors */
|
||||
static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end)
|
||||
{
|
||||
p->des1 |= ((BUF_SIZE_8KiB - 1) << ERDES1_BUFFER2_SIZE_SHIFT)
|
||||
& ERDES1_BUFFER2_SIZE_MASK;
|
||||
p->des1 |= cpu_to_le32(((BUF_SIZE_8KiB - 1)
|
||||
<< ERDES1_BUFFER2_SIZE_SHIFT)
|
||||
& ERDES1_BUFFER2_SIZE_MASK);
|
||||
|
||||
if (end)
|
||||
p->des1 |= ERDES1_END_RING;
|
||||
p->des1 |= cpu_to_le32(ERDES1_END_RING);
|
||||
}
|
||||
|
||||
static inline void enh_desc_end_tx_desc_on_ring(struct dma_desc *p, int end)
|
||||
{
|
||||
if (end)
|
||||
p->des0 |= ETDES0_END_RING;
|
||||
p->des0 |= cpu_to_le32(ETDES0_END_RING);
|
||||
else
|
||||
p->des0 &= ~ETDES0_END_RING;
|
||||
p->des0 &= cpu_to_le32(~ETDES0_END_RING);
|
||||
}
|
||||
|
||||
static inline void enh_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
|
||||
{
|
||||
if (unlikely(len > BUF_SIZE_4KiB)) {
|
||||
p->des1 |= (((len - BUF_SIZE_4KiB) << ETDES1_BUFFER2_SIZE_SHIFT)
|
||||
p->des1 |= cpu_to_le32((((len - BUF_SIZE_4KiB)
|
||||
<< ETDES1_BUFFER2_SIZE_SHIFT)
|
||||
& ETDES1_BUFFER2_SIZE_MASK) | (BUF_SIZE_4KiB
|
||||
& ETDES1_BUFFER1_SIZE_MASK);
|
||||
& ETDES1_BUFFER1_SIZE_MASK));
|
||||
} else
|
||||
p->des1 |= (len & ETDES1_BUFFER1_SIZE_MASK);
|
||||
p->des1 |= cpu_to_le32((len & ETDES1_BUFFER1_SIZE_MASK));
|
||||
}
|
||||
|
||||
/* Normal descriptors */
|
||||
static inline void ndesc_rx_set_on_ring(struct dma_desc *p, int end)
|
||||
{
|
||||
p->des1 |= ((BUF_SIZE_2KiB - 1) << RDES1_BUFFER2_SIZE_SHIFT)
|
||||
& RDES1_BUFFER2_SIZE_MASK;
|
||||
p->des1 |= cpu_to_le32(((BUF_SIZE_2KiB - 1)
|
||||
<< RDES1_BUFFER2_SIZE_SHIFT)
|
||||
& RDES1_BUFFER2_SIZE_MASK);
|
||||
|
||||
if (end)
|
||||
p->des1 |= RDES1_END_RING;
|
||||
p->des1 |= cpu_to_le32(RDES1_END_RING);
|
||||
}
|
||||
|
||||
static inline void ndesc_end_tx_desc_on_ring(struct dma_desc *p, int end)
|
||||
{
|
||||
if (end)
|
||||
p->des1 |= TDES1_END_RING;
|
||||
p->des1 |= cpu_to_le32(TDES1_END_RING);
|
||||
else
|
||||
p->des1 &= ~TDES1_END_RING;
|
||||
p->des1 &= cpu_to_le32(~TDES1_END_RING);
|
||||
}
|
||||
|
||||
static inline void norm_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
|
||||
@@ -83,10 +86,11 @@ static inline void norm_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
|
||||
if (unlikely(len > BUF_SIZE_2KiB)) {
|
||||
unsigned int buffer1 = (BUF_SIZE_2KiB - 1)
|
||||
& TDES1_BUFFER1_SIZE_MASK;
|
||||
p->des1 |= ((((len - buffer1) << TDES1_BUFFER2_SIZE_SHIFT)
|
||||
& TDES1_BUFFER2_SIZE_MASK) | buffer1);
|
||||
p->des1 |= cpu_to_le32((((len - buffer1)
|
||||
<< TDES1_BUFFER2_SIZE_SHIFT)
|
||||
& TDES1_BUFFER2_SIZE_MASK) | buffer1);
|
||||
} else
|
||||
p->des1 |= (len & TDES1_BUFFER1_SIZE_MASK);
|
||||
p->des1 |= cpu_to_le32((len & TDES1_BUFFER1_SIZE_MASK));
|
||||
}
|
||||
|
||||
/* Specific functions used for Chain mode */
|
||||
@@ -94,32 +98,32 @@ static inline void norm_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
|
||||
/* Enhanced descriptors */
|
||||
static inline void ehn_desc_rx_set_on_chain(struct dma_desc *p)
|
||||
{
|
||||
p->des1 |= ERDES1_SECOND_ADDRESS_CHAINED;
|
||||
p->des1 |= cpu_to_le32(ERDES1_SECOND_ADDRESS_CHAINED);
|
||||
}
|
||||
|
||||
static inline void enh_desc_end_tx_desc_on_chain(struct dma_desc *p)
|
||||
{
|
||||
p->des0 |= ETDES0_SECOND_ADDRESS_CHAINED;
|
||||
p->des0 |= cpu_to_le32(ETDES0_SECOND_ADDRESS_CHAINED);
|
||||
}
|
||||
|
||||
static inline void enh_set_tx_desc_len_on_chain(struct dma_desc *p, int len)
|
||||
{
|
||||
p->des1 |= (len & ETDES1_BUFFER1_SIZE_MASK);
|
||||
p->des1 |= cpu_to_le32(len & ETDES1_BUFFER1_SIZE_MASK);
|
||||
}
|
||||
|
||||
/* Normal descriptors */
|
||||
static inline void ndesc_rx_set_on_chain(struct dma_desc *p, int end)
|
||||
{
|
||||
p->des1 |= RDES1_SECOND_ADDRESS_CHAINED;
|
||||
p->des1 |= cpu_to_le32(RDES1_SECOND_ADDRESS_CHAINED);
|
||||
}
|
||||
|
||||
static inline void ndesc_tx_set_on_chain(struct dma_desc *p)
|
||||
{
|
||||
p->des1 |= TDES1_SECOND_ADDRESS_CHAINED;
|
||||
p->des1 |= cpu_to_le32(TDES1_SECOND_ADDRESS_CHAINED);
|
||||
}
|
||||
|
||||
static inline void norm_set_tx_desc_len_on_chain(struct dma_desc *p, int len)
|
||||
{
|
||||
p->des1 |= len & TDES1_BUFFER1_SIZE_MASK;
|
||||
p->des1 |= cpu_to_le32(len & TDES1_BUFFER1_SIZE_MASK);
|
||||
}
|
||||
#endif /* __DESC_COM_H__ */
|
||||
|
||||
@@ -23,7 +23,7 @@ static int dwmac4_wrback_get_tx_status(void *data, struct stmmac_extra_stats *x,
|
||||
unsigned int tdes3;
|
||||
int ret = tx_done;
|
||||
|
||||
tdes3 = p->des3;
|
||||
tdes3 = le32_to_cpu(p->des3);
|
||||
|
||||
/* Get tx owner first */
|
||||
if (unlikely(tdes3 & TDES3_OWN))
|
||||
@@ -77,9 +77,9 @@ static int dwmac4_wrback_get_rx_status(void *data, struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p)
|
||||
{
|
||||
struct net_device_stats *stats = (struct net_device_stats *)data;
|
||||
unsigned int rdes1 = p->des1;
|
||||
unsigned int rdes2 = p->des2;
|
||||
unsigned int rdes3 = p->des3;
|
||||
unsigned int rdes1 = le32_to_cpu(p->des1);
|
||||
unsigned int rdes2 = le32_to_cpu(p->des2);
|
||||
unsigned int rdes3 = le32_to_cpu(p->des3);
|
||||
int message_type;
|
||||
int ret = good_frame;
|
||||
|
||||
@@ -176,47 +176,48 @@ static int dwmac4_wrback_get_rx_status(void *data, struct stmmac_extra_stats *x,
|
||||
|
||||
static int dwmac4_rd_get_tx_len(struct dma_desc *p)
|
||||
{
|
||||
return (p->des2 & TDES2_BUFFER1_SIZE_MASK);
|
||||
return (le32_to_cpu(p->des2) & TDES2_BUFFER1_SIZE_MASK);
|
||||
}
|
||||
|
||||
static int dwmac4_get_tx_owner(struct dma_desc *p)
|
||||
{
|
||||
return (p->des3 & TDES3_OWN) >> TDES3_OWN_SHIFT;
|
||||
return (le32_to_cpu(p->des3) & TDES3_OWN) >> TDES3_OWN_SHIFT;
|
||||
}
|
||||
|
||||
static void dwmac4_set_tx_owner(struct dma_desc *p)
|
||||
{
|
||||
p->des3 |= TDES3_OWN;
|
||||
p->des3 |= cpu_to_le32(TDES3_OWN);
|
||||
}
|
||||
|
||||
static void dwmac4_set_rx_owner(struct dma_desc *p)
|
||||
{
|
||||
p->des3 |= RDES3_OWN;
|
||||
p->des3 |= cpu_to_le32(RDES3_OWN);
|
||||
}
|
||||
|
||||
static int dwmac4_get_tx_ls(struct dma_desc *p)
|
||||
{
|
||||
return (p->des3 & TDES3_LAST_DESCRIPTOR) >> TDES3_LAST_DESCRIPTOR_SHIFT;
|
||||
return (le32_to_cpu(p->des3) & TDES3_LAST_DESCRIPTOR)
|
||||
>> TDES3_LAST_DESCRIPTOR_SHIFT;
|
||||
}
|
||||
|
||||
static int dwmac4_wrback_get_rx_frame_len(struct dma_desc *p, int rx_coe)
|
||||
{
|
||||
return (p->des3 & RDES3_PACKET_SIZE_MASK);
|
||||
return (le32_to_cpu(p->des3) & RDES3_PACKET_SIZE_MASK);
|
||||
}
|
||||
|
||||
static void dwmac4_rd_enable_tx_timestamp(struct dma_desc *p)
|
||||
{
|
||||
p->des2 |= TDES2_TIMESTAMP_ENABLE;
|
||||
p->des2 |= cpu_to_le32(TDES2_TIMESTAMP_ENABLE);
|
||||
}
|
||||
|
||||
static int dwmac4_wrback_get_tx_timestamp_status(struct dma_desc *p)
|
||||
{
|
||||
/* Context type from W/B descriptor must be zero */
|
||||
if (p->des3 & TDES3_CONTEXT_TYPE)
|
||||
if (le32_to_cpu(p->des3) & TDES3_CONTEXT_TYPE)
|
||||
return -EINVAL;
|
||||
|
||||
/* Tx Timestamp Status is 1 so des0 and des1'll have valid values */
|
||||
if (p->des3 & TDES3_TIMESTAMP_STATUS)
|
||||
if (le32_to_cpu(p->des3) & TDES3_TIMESTAMP_STATUS)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
@@ -227,9 +228,9 @@ static inline u64 dwmac4_get_timestamp(void *desc, u32 ats)
|
||||
struct dma_desc *p = (struct dma_desc *)desc;
|
||||
u64 ns;
|
||||
|
||||
ns = p->des0;
|
||||
ns = le32_to_cpu(p->des0);
|
||||
/* convert high/sec time stamp value to nanosecond */
|
||||
ns += p->des1 * 1000000000ULL;
|
||||
ns += le32_to_cpu(p->des1) * 1000000000ULL;
|
||||
|
||||
return ns;
|
||||
}
|
||||
@@ -267,7 +268,7 @@ static int dwmac4_wrback_get_rx_timestamp_status(void *desc, u32 ats)
|
||||
|
||||
/* Get the status from normal w/b descriptor */
|
||||
if (likely(p->des3 & TDES3_RS1V)) {
|
||||
if (likely(p->des1 & RDES1_TIMESTAMP_AVAILABLE)) {
|
||||
if (likely(le32_to_cpu(p->des1) & RDES1_TIMESTAMP_AVAILABLE)) {
|
||||
int i = 0;
|
||||
|
||||
/* Check if timestamp is OK from context descriptor */
|
||||
@@ -290,10 +291,10 @@ exit:
|
||||
static void dwmac4_rd_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
|
||||
int mode, int end)
|
||||
{
|
||||
p->des3 = RDES3_OWN | RDES3_BUFFER1_VALID_ADDR;
|
||||
p->des3 = cpu_to_le32(RDES3_OWN | RDES3_BUFFER1_VALID_ADDR);
|
||||
|
||||
if (!disable_rx_ic)
|
||||
p->des3 |= RDES3_INT_ON_COMPLETION_EN;
|
||||
p->des3 |= cpu_to_le32(RDES3_INT_ON_COMPLETION_EN);
|
||||
}
|
||||
|
||||
static void dwmac4_rd_init_tx_desc(struct dma_desc *p, int mode, int end)
|
||||
@@ -308,9 +309,9 @@ static void dwmac4_rd_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
||||
bool csum_flag, int mode, bool tx_own,
|
||||
bool ls)
|
||||
{
|
||||
unsigned int tdes3 = p->des3;
|
||||
unsigned int tdes3 = le32_to_cpu(p->des3);
|
||||
|
||||
p->des2 |= (len & TDES2_BUFFER1_SIZE_MASK);
|
||||
p->des2 |= cpu_to_le32(len & TDES2_BUFFER1_SIZE_MASK);
|
||||
|
||||
if (is_fs)
|
||||
tdes3 |= TDES3_FIRST_DESCRIPTOR;
|
||||
@@ -338,7 +339,7 @@ static void dwmac4_rd_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
||||
*/
|
||||
wmb();
|
||||
|
||||
p->des3 = tdes3;
|
||||
p->des3 = cpu_to_le32(tdes3);
|
||||
}
|
||||
|
||||
static void dwmac4_rd_prepare_tso_tx_desc(struct dma_desc *p, int is_fs,
|
||||
@@ -346,14 +347,14 @@ static void dwmac4_rd_prepare_tso_tx_desc(struct dma_desc *p, int is_fs,
|
||||
bool ls, unsigned int tcphdrlen,
|
||||
unsigned int tcppayloadlen)
|
||||
{
|
||||
unsigned int tdes3 = p->des3;
|
||||
unsigned int tdes3 = le32_to_cpu(p->des3);
|
||||
|
||||
if (len1)
|
||||
p->des2 |= (len1 & TDES2_BUFFER1_SIZE_MASK);
|
||||
p->des2 |= cpu_to_le32((len1 & TDES2_BUFFER1_SIZE_MASK));
|
||||
|
||||
if (len2)
|
||||
p->des2 |= (len2 << TDES2_BUFFER2_SIZE_MASK_SHIFT)
|
||||
& TDES2_BUFFER2_SIZE_MASK;
|
||||
p->des2 |= cpu_to_le32((len2 << TDES2_BUFFER2_SIZE_MASK_SHIFT)
|
||||
& TDES2_BUFFER2_SIZE_MASK);
|
||||
|
||||
if (is_fs) {
|
||||
tdes3 |= TDES3_FIRST_DESCRIPTOR |
|
||||
@@ -381,7 +382,7 @@ static void dwmac4_rd_prepare_tso_tx_desc(struct dma_desc *p, int is_fs,
|
||||
*/
|
||||
wmb();
|
||||
|
||||
p->des3 = tdes3;
|
||||
p->des3 = cpu_to_le32(tdes3);
|
||||
}
|
||||
|
||||
static void dwmac4_release_tx_desc(struct dma_desc *p, int mode)
|
||||
@@ -392,7 +393,7 @@ static void dwmac4_release_tx_desc(struct dma_desc *p, int mode)
|
||||
|
||||
static void dwmac4_rd_set_tx_ic(struct dma_desc *p)
|
||||
{
|
||||
p->des2 |= TDES2_INTERRUPT_ON_COMPLETION;
|
||||
p->des2 |= cpu_to_le32(TDES2_INTERRUPT_ON_COMPLETION);
|
||||
}
|
||||
|
||||
static void dwmac4_display_ring(void *head, unsigned int size, bool rx)
|
||||
@@ -405,7 +406,8 @@ static void dwmac4_display_ring(void *head, unsigned int size, bool rx)
|
||||
for (i = 0; i < size; i++) {
|
||||
pr_info("%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
|
||||
i, (unsigned int)virt_to_phys(p),
|
||||
p->des0, p->des1, p->des2, p->des3);
|
||||
le32_to_cpu(p->des0), le32_to_cpu(p->des1),
|
||||
le32_to_cpu(p->des2), le32_to_cpu(p->des3));
|
||||
p++;
|
||||
}
|
||||
}
|
||||
@@ -414,8 +416,8 @@ static void dwmac4_set_mss_ctxt(struct dma_desc *p, unsigned int mss)
|
||||
{
|
||||
p->des0 = 0;
|
||||
p->des1 = 0;
|
||||
p->des2 = mss;
|
||||
p->des3 = TDES3_CONTEXT_TYPE | TDES3_CTXT_TCMSSV;
|
||||
p->des2 = cpu_to_le32(mss);
|
||||
p->des3 = cpu_to_le32(TDES3_CONTEXT_TYPE | TDES3_CTXT_TCMSSV);
|
||||
}
|
||||
|
||||
const struct stmmac_desc_ops dwmac4_desc_ops = {
|
||||
|
||||
@@ -30,7 +30,7 @@ static int enh_desc_get_tx_status(void *data, struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p, void __iomem *ioaddr)
|
||||
{
|
||||
struct net_device_stats *stats = (struct net_device_stats *)data;
|
||||
unsigned int tdes0 = p->des0;
|
||||
unsigned int tdes0 = le32_to_cpu(p->des0);
|
||||
int ret = tx_done;
|
||||
|
||||
/* Get tx owner first */
|
||||
@@ -95,7 +95,7 @@ static int enh_desc_get_tx_status(void *data, struct stmmac_extra_stats *x,
|
||||
|
||||
static int enh_desc_get_tx_len(struct dma_desc *p)
|
||||
{
|
||||
return (p->des1 & ETDES1_BUFFER1_SIZE_MASK);
|
||||
return (le32_to_cpu(p->des1) & ETDES1_BUFFER1_SIZE_MASK);
|
||||
}
|
||||
|
||||
static int enh_desc_coe_rdes0(int ipc_err, int type, int payload_err)
|
||||
@@ -134,8 +134,8 @@ static int enh_desc_coe_rdes0(int ipc_err, int type, int payload_err)
|
||||
static void enh_desc_get_ext_status(void *data, struct stmmac_extra_stats *x,
|
||||
struct dma_extended_desc *p)
|
||||
{
|
||||
unsigned int rdes0 = p->basic.des0;
|
||||
unsigned int rdes4 = p->des4;
|
||||
unsigned int rdes0 = le32_to_cpu(p->basic.des0);
|
||||
unsigned int rdes4 = le32_to_cpu(p->des4);
|
||||
|
||||
if (unlikely(rdes0 & ERDES0_RX_MAC_ADDR)) {
|
||||
int message_type = (rdes4 & ERDES4_MSG_TYPE_MASK) >> 8;
|
||||
@@ -199,7 +199,7 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p)
|
||||
{
|
||||
struct net_device_stats *stats = (struct net_device_stats *)data;
|
||||
unsigned int rdes0 = p->des0;
|
||||
unsigned int rdes0 = le32_to_cpu(p->des0);
|
||||
int ret = good_frame;
|
||||
|
||||
if (unlikely(rdes0 & RDES0_OWN))
|
||||
@@ -265,8 +265,8 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
|
||||
static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
|
||||
int mode, int end)
|
||||
{
|
||||
p->des0 |= RDES0_OWN;
|
||||
p->des1 |= ((BUF_SIZE_8KiB - 1) & ERDES1_BUFFER1_SIZE_MASK);
|
||||
p->des0 |= cpu_to_le32(RDES0_OWN);
|
||||
p->des1 |= cpu_to_le32((BUF_SIZE_8KiB - 1) & ERDES1_BUFFER1_SIZE_MASK);
|
||||
|
||||
if (mode == STMMAC_CHAIN_MODE)
|
||||
ehn_desc_rx_set_on_chain(p);
|
||||
@@ -274,12 +274,12 @@ static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
|
||||
ehn_desc_rx_set_on_ring(p, end);
|
||||
|
||||
if (disable_rx_ic)
|
||||
p->des1 |= ERDES1_DISABLE_IC;
|
||||
p->des1 |= cpu_to_le32(ERDES1_DISABLE_IC);
|
||||
}
|
||||
|
||||
static void enh_desc_init_tx_desc(struct dma_desc *p, int mode, int end)
|
||||
{
|
||||
p->des0 &= ~ETDES0_OWN;
|
||||
p->des0 &= cpu_to_le32(~ETDES0_OWN);
|
||||
if (mode == STMMAC_CHAIN_MODE)
|
||||
enh_desc_end_tx_desc_on_chain(p);
|
||||
else
|
||||
@@ -288,27 +288,27 @@ static void enh_desc_init_tx_desc(struct dma_desc *p, int mode, int end)
|
||||
|
||||
static int enh_desc_get_tx_owner(struct dma_desc *p)
|
||||
{
|
||||
return (p->des0 & ETDES0_OWN) >> 31;
|
||||
return (le32_to_cpu(p->des0) & ETDES0_OWN) >> 31;
|
||||
}
|
||||
|
||||
static void enh_desc_set_tx_owner(struct dma_desc *p)
|
||||
{
|
||||
p->des0 |= ETDES0_OWN;
|
||||
p->des0 |= cpu_to_le32(ETDES0_OWN);
|
||||
}
|
||||
|
||||
static void enh_desc_set_rx_owner(struct dma_desc *p)
|
||||
{
|
||||
p->des0 |= RDES0_OWN;
|
||||
p->des0 |= cpu_to_le32(RDES0_OWN);
|
||||
}
|
||||
|
||||
static int enh_desc_get_tx_ls(struct dma_desc *p)
|
||||
{
|
||||
return (p->des0 & ETDES0_LAST_SEGMENT) >> 29;
|
||||
return (le32_to_cpu(p->des0) & ETDES0_LAST_SEGMENT) >> 29;
|
||||
}
|
||||
|
||||
static void enh_desc_release_tx_desc(struct dma_desc *p, int mode)
|
||||
{
|
||||
int ter = (p->des0 & ETDES0_END_RING) >> 21;
|
||||
int ter = (le32_to_cpu(p->des0) & ETDES0_END_RING) >> 21;
|
||||
|
||||
memset(p, 0, offsetof(struct dma_desc, des2));
|
||||
if (mode == STMMAC_CHAIN_MODE)
|
||||
@@ -321,7 +321,7 @@ static void enh_desc_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
||||
bool csum_flag, int mode, bool tx_own,
|
||||
bool ls)
|
||||
{
|
||||
unsigned int tdes0 = p->des0;
|
||||
unsigned int tdes0 = le32_to_cpu(p->des0);
|
||||
|
||||
if (mode == STMMAC_CHAIN_MODE)
|
||||
enh_set_tx_desc_len_on_chain(p, len);
|
||||
@@ -352,12 +352,12 @@ static void enh_desc_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
||||
*/
|
||||
wmb();
|
||||
|
||||
p->des0 = tdes0;
|
||||
p->des0 = cpu_to_le32(tdes0);
|
||||
}
|
||||
|
||||
static void enh_desc_set_tx_ic(struct dma_desc *p)
|
||||
{
|
||||
p->des0 |= ETDES0_INTERRUPT;
|
||||
p->des0 |= cpu_to_le32(ETDES0_INTERRUPT);
|
||||
}
|
||||
|
||||
static int enh_desc_get_rx_frame_len(struct dma_desc *p, int rx_coe_type)
|
||||
@@ -372,18 +372,18 @@ static int enh_desc_get_rx_frame_len(struct dma_desc *p, int rx_coe_type)
|
||||
if (rx_coe_type == STMMAC_RX_COE_TYPE1)
|
||||
csum = 2;
|
||||
|
||||
return (((p->des0 & RDES0_FRAME_LEN_MASK) >> RDES0_FRAME_LEN_SHIFT) -
|
||||
csum);
|
||||
return (((le32_to_cpu(p->des0) & RDES0_FRAME_LEN_MASK)
|
||||
>> RDES0_FRAME_LEN_SHIFT) - csum);
|
||||
}
|
||||
|
||||
static void enh_desc_enable_tx_timestamp(struct dma_desc *p)
|
||||
{
|
||||
p->des0 |= ETDES0_TIME_STAMP_ENABLE;
|
||||
p->des0 |= cpu_to_le32(ETDES0_TIME_STAMP_ENABLE);
|
||||
}
|
||||
|
||||
static int enh_desc_get_tx_timestamp_status(struct dma_desc *p)
|
||||
{
|
||||
return (p->des0 & ETDES0_TIME_STAMP_STATUS) >> 17;
|
||||
return (le32_to_cpu(p->des0) & ETDES0_TIME_STAMP_STATUS) >> 17;
|
||||
}
|
||||
|
||||
static u64 enh_desc_get_timestamp(void *desc, u32 ats)
|
||||
@@ -392,13 +392,13 @@ static u64 enh_desc_get_timestamp(void *desc, u32 ats)
|
||||
|
||||
if (ats) {
|
||||
struct dma_extended_desc *p = (struct dma_extended_desc *)desc;
|
||||
ns = p->des6;
|
||||
ns = le32_to_cpu(p->des6);
|
||||
/* convert high/sec time stamp value to nanosecond */
|
||||
ns += p->des7 * 1000000000ULL;
|
||||
ns += le32_to_cpu(p->des7) * 1000000000ULL;
|
||||
} else {
|
||||
struct dma_desc *p = (struct dma_desc *)desc;
|
||||
ns = p->des2;
|
||||
ns += p->des3 * 1000000000ULL;
|
||||
ns = le32_to_cpu(p->des2);
|
||||
ns += le32_to_cpu(p->des3) * 1000000000ULL;
|
||||
}
|
||||
|
||||
return ns;
|
||||
@@ -408,10 +408,11 @@ static int enh_desc_get_rx_timestamp_status(void *desc, u32 ats)
|
||||
{
|
||||
if (ats) {
|
||||
struct dma_extended_desc *p = (struct dma_extended_desc *)desc;
|
||||
return (p->basic.des0 & RDES0_IPC_CSUM_ERROR) >> 7;
|
||||
return (le32_to_cpu(p->basic.des0) & RDES0_IPC_CSUM_ERROR) >> 7;
|
||||
} else {
|
||||
struct dma_desc *p = (struct dma_desc *)desc;
|
||||
if ((p->des2 == 0xffffffff) && (p->des3 == 0xffffffff))
|
||||
if ((le32_to_cpu(p->des2) == 0xffffffff) &&
|
||||
(le32_to_cpu(p->des3) == 0xffffffff))
|
||||
/* timestamp is corrupted, hence don't store it */
|
||||
return 0;
|
||||
else
|
||||
|
||||
@@ -30,8 +30,8 @@ static int ndesc_get_tx_status(void *data, struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p, void __iomem *ioaddr)
|
||||
{
|
||||
struct net_device_stats *stats = (struct net_device_stats *)data;
|
||||
unsigned int tdes0 = p->des0;
|
||||
unsigned int tdes1 = p->des1;
|
||||
unsigned int tdes0 = le32_to_cpu(p->des0);
|
||||
unsigned int tdes1 = le32_to_cpu(p->des1);
|
||||
int ret = tx_done;
|
||||
|
||||
/* Get tx owner first */
|
||||
@@ -77,7 +77,7 @@ static int ndesc_get_tx_status(void *data, struct stmmac_extra_stats *x,
|
||||
|
||||
static int ndesc_get_tx_len(struct dma_desc *p)
|
||||
{
|
||||
return (p->des1 & RDES1_BUFFER1_SIZE_MASK);
|
||||
return (le32_to_cpu(p->des1) & RDES1_BUFFER1_SIZE_MASK);
|
||||
}
|
||||
|
||||
/* This function verifies if each incoming frame has some errors
|
||||
@@ -88,7 +88,7 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p)
|
||||
{
|
||||
int ret = good_frame;
|
||||
unsigned int rdes0 = p->des0;
|
||||
unsigned int rdes0 = le32_to_cpu(p->des0);
|
||||
struct net_device_stats *stats = (struct net_device_stats *)data;
|
||||
|
||||
if (unlikely(rdes0 & RDES0_OWN))
|
||||
@@ -141,8 +141,8 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x,
|
||||
static void ndesc_init_rx_desc(struct dma_desc *p, int disable_rx_ic, int mode,
|
||||
int end)
|
||||
{
|
||||
p->des0 |= RDES0_OWN;
|
||||
p->des1 |= (BUF_SIZE_2KiB - 1) & RDES1_BUFFER1_SIZE_MASK;
|
||||
p->des0 |= cpu_to_le32(RDES0_OWN);
|
||||
p->des1 |= cpu_to_le32((BUF_SIZE_2KiB - 1) & RDES1_BUFFER1_SIZE_MASK);
|
||||
|
||||
if (mode == STMMAC_CHAIN_MODE)
|
||||
ndesc_rx_set_on_chain(p, end);
|
||||
@@ -150,12 +150,12 @@ static void ndesc_init_rx_desc(struct dma_desc *p, int disable_rx_ic, int mode,
|
||||
ndesc_rx_set_on_ring(p, end);
|
||||
|
||||
if (disable_rx_ic)
|
||||
p->des1 |= RDES1_DISABLE_IC;
|
||||
p->des1 |= cpu_to_le32(RDES1_DISABLE_IC);
|
||||
}
|
||||
|
||||
static void ndesc_init_tx_desc(struct dma_desc *p, int mode, int end)
|
||||
{
|
||||
p->des0 &= ~TDES0_OWN;
|
||||
p->des0 &= cpu_to_le32(~TDES0_OWN);
|
||||
if (mode == STMMAC_CHAIN_MODE)
|
||||
ndesc_tx_set_on_chain(p);
|
||||
else
|
||||
@@ -164,27 +164,27 @@ static void ndesc_init_tx_desc(struct dma_desc *p, int mode, int end)
|
||||
|
||||
static int ndesc_get_tx_owner(struct dma_desc *p)
|
||||
{
|
||||
return (p->des0 & TDES0_OWN) >> 31;
|
||||
return (le32_to_cpu(p->des0) & TDES0_OWN) >> 31;
|
||||
}
|
||||
|
||||
static void ndesc_set_tx_owner(struct dma_desc *p)
|
||||
{
|
||||
p->des0 |= TDES0_OWN;
|
||||
p->des0 |= cpu_to_le32(TDES0_OWN);
|
||||
}
|
||||
|
||||
static void ndesc_set_rx_owner(struct dma_desc *p)
|
||||
{
|
||||
p->des0 |= RDES0_OWN;
|
||||
p->des0 |= cpu_to_le32(RDES0_OWN);
|
||||
}
|
||||
|
||||
static int ndesc_get_tx_ls(struct dma_desc *p)
|
||||
{
|
||||
return (p->des1 & TDES1_LAST_SEGMENT) >> 30;
|
||||
return (le32_to_cpu(p->des1) & TDES1_LAST_SEGMENT) >> 30;
|
||||
}
|
||||
|
||||
static void ndesc_release_tx_desc(struct dma_desc *p, int mode)
|
||||
{
|
||||
int ter = (p->des1 & TDES1_END_RING) >> 25;
|
||||
int ter = (le32_to_cpu(p->des1) & TDES1_END_RING) >> 25;
|
||||
|
||||
memset(p, 0, offsetof(struct dma_desc, des2));
|
||||
if (mode == STMMAC_CHAIN_MODE)
|
||||
@@ -197,7 +197,7 @@ static void ndesc_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
||||
bool csum_flag, int mode, bool tx_own,
|
||||
bool ls)
|
||||
{
|
||||
unsigned int tdes1 = p->des1;
|
||||
unsigned int tdes1 = le32_to_cpu(p->des1);
|
||||
|
||||
if (is_fs)
|
||||
tdes1 |= TDES1_FIRST_SEGMENT;
|
||||
@@ -212,7 +212,7 @@ static void ndesc_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
||||
if (ls)
|
||||
tdes1 |= TDES1_LAST_SEGMENT;
|
||||
|
||||
p->des1 = tdes1;
|
||||
p->des1 = cpu_to_le32(tdes1);
|
||||
|
||||
if (mode == STMMAC_CHAIN_MODE)
|
||||
norm_set_tx_desc_len_on_chain(p, len);
|
||||
@@ -220,12 +220,12 @@ static void ndesc_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
||||
norm_set_tx_desc_len_on_ring(p, len);
|
||||
|
||||
if (tx_own)
|
||||
p->des0 |= TDES0_OWN;
|
||||
p->des0 |= cpu_to_le32(TDES0_OWN);
|
||||
}
|
||||
|
||||
static void ndesc_set_tx_ic(struct dma_desc *p)
|
||||
{
|
||||
p->des1 |= TDES1_INTERRUPT;
|
||||
p->des1 |= cpu_to_le32(TDES1_INTERRUPT);
|
||||
}
|
||||
|
||||
static int ndesc_get_rx_frame_len(struct dma_desc *p, int rx_coe_type)
|
||||
@@ -241,19 +241,20 @@ static int ndesc_get_rx_frame_len(struct dma_desc *p, int rx_coe_type)
|
||||
if (rx_coe_type == STMMAC_RX_COE_TYPE1)
|
||||
csum = 2;
|
||||
|
||||
return (((p->des0 & RDES0_FRAME_LEN_MASK) >> RDES0_FRAME_LEN_SHIFT) -
|
||||
return (((le32_to_cpu(p->des0) & RDES0_FRAME_LEN_MASK)
|
||||
>> RDES0_FRAME_LEN_SHIFT) -
|
||||
csum);
|
||||
|
||||
}
|
||||
|
||||
static void ndesc_enable_tx_timestamp(struct dma_desc *p)
|
||||
{
|
||||
p->des1 |= TDES1_TIME_STAMP_ENABLE;
|
||||
p->des1 |= cpu_to_le32(TDES1_TIME_STAMP_ENABLE);
|
||||
}
|
||||
|
||||
static int ndesc_get_tx_timestamp_status(struct dma_desc *p)
|
||||
{
|
||||
return (p->des0 & TDES0_TIME_STAMP_STATUS) >> 17;
|
||||
return (le32_to_cpu(p->des0) & TDES0_TIME_STAMP_STATUS) >> 17;
|
||||
}
|
||||
|
||||
static u64 ndesc_get_timestamp(void *desc, u32 ats)
|
||||
@@ -261,9 +262,9 @@ static u64 ndesc_get_timestamp(void *desc, u32 ats)
|
||||
struct dma_desc *p = (struct dma_desc *)desc;
|
||||
u64 ns;
|
||||
|
||||
ns = p->des2;
|
||||
ns = le32_to_cpu(p->des2);
|
||||
/* convert high/sec time stamp value to nanosecond */
|
||||
ns += p->des3 * 1000000000ULL;
|
||||
ns += le32_to_cpu(p->des3) * 1000000000ULL;
|
||||
|
||||
return ns;
|
||||
}
|
||||
@@ -272,7 +273,8 @@ static int ndesc_get_rx_timestamp_status(void *desc, u32 ats)
|
||||
{
|
||||
struct dma_desc *p = (struct dma_desc *)desc;
|
||||
|
||||
if ((p->des2 == 0xffffffff) && (p->des3 == 0xffffffff))
|
||||
if ((le32_to_cpu(p->des2) == 0xffffffff) &&
|
||||
(le32_to_cpu(p->des3) == 0xffffffff))
|
||||
/* timestamp is corrupted, hence don't store it */
|
||||
return 0;
|
||||
else
|
||||
|
||||
@@ -34,7 +34,7 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
|
||||
unsigned int entry = priv->cur_tx;
|
||||
struct dma_desc *desc;
|
||||
unsigned int nopaged_len = skb_headlen(skb);
|
||||
unsigned int bmax, len;
|
||||
unsigned int bmax, len, des2;
|
||||
|
||||
if (priv->extend_desc)
|
||||
desc = (struct dma_desc *)(priv->dma_etx + entry);
|
||||
@@ -50,16 +50,17 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
|
||||
|
||||
if (nopaged_len > BUF_SIZE_8KiB) {
|
||||
|
||||
desc->des2 = dma_map_single(priv->device, skb->data,
|
||||
bmax, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(priv->device, desc->des2))
|
||||
des2 = dma_map_single(priv->device, skb->data, bmax,
|
||||
DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
|
||||
priv->tx_skbuff_dma[entry].buf = desc->des2;
|
||||
priv->tx_skbuff_dma[entry].buf = des2;
|
||||
priv->tx_skbuff_dma[entry].len = bmax;
|
||||
priv->tx_skbuff_dma[entry].is_jumbo = true;
|
||||
|
||||
desc->des3 = desc->des2 + BUF_SIZE_4KiB;
|
||||
desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
|
||||
priv->hw->desc->prepare_tx_desc(desc, 1, bmax, csum,
|
||||
STMMAC_RING_MODE, 0, false);
|
||||
priv->tx_skbuff[entry] = NULL;
|
||||
@@ -70,26 +71,28 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
|
||||
else
|
||||
desc = priv->dma_tx + entry;
|
||||
|
||||
desc->des2 = dma_map_single(priv->device, skb->data + bmax,
|
||||
len, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(priv->device, desc->des2))
|
||||
des2 = dma_map_single(priv->device, skb->data + bmax, len,
|
||||
DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
priv->tx_skbuff_dma[entry].buf = desc->des2;
|
||||
priv->tx_skbuff_dma[entry].buf = des2;
|
||||
priv->tx_skbuff_dma[entry].len = len;
|
||||
priv->tx_skbuff_dma[entry].is_jumbo = true;
|
||||
|
||||
desc->des3 = desc->des2 + BUF_SIZE_4KiB;
|
||||
desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
|
||||
priv->hw->desc->prepare_tx_desc(desc, 0, len, csum,
|
||||
STMMAC_RING_MODE, 1, true);
|
||||
} else {
|
||||
desc->des2 = dma_map_single(priv->device, skb->data,
|
||||
nopaged_len, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(priv->device, desc->des2))
|
||||
des2 = dma_map_single(priv->device, skb->data,
|
||||
nopaged_len, DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
priv->tx_skbuff_dma[entry].buf = desc->des2;
|
||||
priv->tx_skbuff_dma[entry].buf = des2;
|
||||
priv->tx_skbuff_dma[entry].len = nopaged_len;
|
||||
priv->tx_skbuff_dma[entry].is_jumbo = true;
|
||||
desc->des3 = desc->des2 + BUF_SIZE_4KiB;
|
||||
desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
|
||||
priv->hw->desc->prepare_tx_desc(desc, 1, nopaged_len, csum,
|
||||
STMMAC_RING_MODE, 0, true);
|
||||
}
|
||||
@@ -115,13 +118,13 @@ static void stmmac_refill_desc3(void *priv_ptr, struct dma_desc *p)
|
||||
|
||||
/* Fill DES3 in case of RING mode */
|
||||
if (priv->dma_buf_sz >= BUF_SIZE_8KiB)
|
||||
p->des3 = p->des2 + BUF_SIZE_8KiB;
|
||||
p->des3 = cpu_to_le32(le32_to_cpu(p->des2) + BUF_SIZE_8KiB);
|
||||
}
|
||||
|
||||
/* In ring mode we need to fill the desc3 because it is used as buffer */
|
||||
static void stmmac_init_desc3(struct dma_desc *p)
|
||||
{
|
||||
p->des3 = p->des2 + BUF_SIZE_8KiB;
|
||||
p->des3 = cpu_to_le32(le32_to_cpu(p->des2) + BUF_SIZE_8KiB);
|
||||
}
|
||||
|
||||
static void stmmac_clean_desc3(void *priv_ptr, struct dma_desc *p)
|
||||
|
||||
@@ -1005,9 +1005,9 @@ static int stmmac_init_rx_buffers(struct stmmac_priv *priv, struct dma_desc *p,
|
||||
}
|
||||
|
||||
if (priv->synopsys_id >= DWMAC_CORE_4_00)
|
||||
p->des0 = priv->rx_skbuff_dma[i];
|
||||
p->des0 = cpu_to_le32(priv->rx_skbuff_dma[i]);
|
||||
else
|
||||
p->des2 = priv->rx_skbuff_dma[i];
|
||||
p->des2 = cpu_to_le32(priv->rx_skbuff_dma[i]);
|
||||
|
||||
if ((priv->hw->mode->init_desc3) &&
|
||||
(priv->dma_buf_sz == BUF_SIZE_16KiB))
|
||||
@@ -1971,7 +1971,7 @@ static void stmmac_tso_allocator(struct stmmac_priv *priv, unsigned int des,
|
||||
priv->cur_tx = STMMAC_GET_ENTRY(priv->cur_tx, DMA_TX_SIZE);
|
||||
desc = priv->dma_tx + priv->cur_tx;
|
||||
|
||||
desc->des0 = des + (total_len - tmp_len);
|
||||
desc->des0 = cpu_to_le32(des + (total_len - tmp_len));
|
||||
buff_size = tmp_len >= TSO_MAX_BUFF_SIZE ?
|
||||
TSO_MAX_BUFF_SIZE : tmp_len;
|
||||
|
||||
@@ -2073,11 +2073,11 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
priv->tx_skbuff_dma[first_entry].len = skb_headlen(skb);
|
||||
priv->tx_skbuff[first_entry] = skb;
|
||||
|
||||
first->des0 = des;
|
||||
first->des0 = cpu_to_le32(des);
|
||||
|
||||
/* Fill start of payload in buff2 of first descriptor */
|
||||
if (pay_len)
|
||||
first->des1 = des + proto_hdr_len;
|
||||
first->des1 = cpu_to_le32(des + proto_hdr_len);
|
||||
|
||||
/* If needed take extra descriptors to fill the remaining payload */
|
||||
tmp_pay_len = pay_len - TSO_MAX_BUFF_SIZE;
|
||||
@@ -2274,13 +2274,11 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
|
||||
priv->tx_skbuff[entry] = NULL;
|
||||
|
||||
if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00)) {
|
||||
desc->des0 = des;
|
||||
priv->tx_skbuff_dma[entry].buf = desc->des0;
|
||||
} else {
|
||||
desc->des2 = des;
|
||||
priv->tx_skbuff_dma[entry].buf = desc->des2;
|
||||
}
|
||||
priv->tx_skbuff_dma[entry].buf = des;
|
||||
if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00))
|
||||
desc->des0 = cpu_to_le32(des);
|
||||
else
|
||||
desc->des2 = cpu_to_le32(des);
|
||||
|
||||
priv->tx_skbuff_dma[entry].map_as_page = true;
|
||||
priv->tx_skbuff_dma[entry].len = len;
|
||||
@@ -2351,13 +2349,11 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
if (dma_mapping_error(priv->device, des))
|
||||
goto dma_map_err;
|
||||
|
||||
if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00)) {
|
||||
first->des0 = des;
|
||||
priv->tx_skbuff_dma[first_entry].buf = first->des0;
|
||||
} else {
|
||||
first->des2 = des;
|
||||
priv->tx_skbuff_dma[first_entry].buf = first->des2;
|
||||
}
|
||||
priv->tx_skbuff_dma[first_entry].buf = des;
|
||||
if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00))
|
||||
first->des0 = cpu_to_le32(des);
|
||||
else
|
||||
first->des2 = cpu_to_le32(des);
|
||||
|
||||
priv->tx_skbuff_dma[first_entry].len = nopaged_len;
|
||||
priv->tx_skbuff_dma[first_entry].last_segment = last_segment;
|
||||
@@ -2471,10 +2467,10 @@ static inline void stmmac_rx_refill(struct stmmac_priv *priv)
|
||||
}
|
||||
|
||||
if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00)) {
|
||||
p->des0 = priv->rx_skbuff_dma[entry];
|
||||
p->des0 = cpu_to_le32(priv->rx_skbuff_dma[entry]);
|
||||
p->des1 = 0;
|
||||
} else {
|
||||
p->des2 = priv->rx_skbuff_dma[entry];
|
||||
p->des2 = cpu_to_le32(priv->rx_skbuff_dma[entry]);
|
||||
}
|
||||
if (priv->hw->mode->refill_desc3)
|
||||
priv->hw->mode->refill_desc3(priv, p);
|
||||
@@ -2578,9 +2574,9 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
|
||||
unsigned int des;
|
||||
|
||||
if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00))
|
||||
des = p->des0;
|
||||
des = le32_to_cpu(p->des0);
|
||||
else
|
||||
des = p->des2;
|
||||
des = le32_to_cpu(p->des2);
|
||||
|
||||
frame_len = priv->hw->desc->get_rx_frame_len(p, coe);
|
||||
|
||||
@@ -2954,14 +2950,17 @@ static void sysfs_display_ring(void *head, int size, int extend_desc,
|
||||
x = *(u64 *) ep;
|
||||
seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
|
||||
i, (unsigned int)virt_to_phys(ep),
|
||||
ep->basic.des0, ep->basic.des1,
|
||||
ep->basic.des2, ep->basic.des3);
|
||||
le32_to_cpu(ep->basic.des0),
|
||||
le32_to_cpu(ep->basic.des1),
|
||||
le32_to_cpu(ep->basic.des2),
|
||||
le32_to_cpu(ep->basic.des3));
|
||||
ep++;
|
||||
} else {
|
||||
x = *(u64 *) p;
|
||||
seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
|
||||
i, (unsigned int)virt_to_phys(ep),
|
||||
p->des0, p->des1, p->des2, p->des3);
|
||||
le32_to_cpu(p->des0), le32_to_cpu(p->des1),
|
||||
le32_to_cpu(p->des2), le32_to_cpu(p->des3));
|
||||
p++;
|
||||
}
|
||||
seq_printf(seq, "\n");
|
||||
|
||||
@@ -231,7 +231,17 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
|
||||
*/
|
||||
static void stmmac_pci_remove(struct pci_dev *pdev)
|
||||
{
|
||||
int i;
|
||||
|
||||
stmmac_dvr_remove(&pdev->dev);
|
||||
|
||||
for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
|
||||
if (pci_resource_len(pdev, i) == 0)
|
||||
continue;
|
||||
pcim_iounmap_regions(pdev, BIT(i));
|
||||
break;
|
||||
}
|
||||
|
||||
pci_disable_device(pdev);
|
||||
}
|
||||
|
||||
|
||||
@@ -261,17 +261,6 @@ static void __team_option_inst_mark_removed_port(struct team *team,
|
||||
}
|
||||
}
|
||||
|
||||
static bool __team_option_inst_tmp_find(const struct list_head *opts,
|
||||
const struct team_option_inst *needle)
|
||||
{
|
||||
struct team_option_inst *opt_inst;
|
||||
|
||||
list_for_each_entry(opt_inst, opts, tmp_list)
|
||||
if (opt_inst == needle)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static int __team_options_register(struct team *team,
|
||||
const struct team_option *option,
|
||||
size_t option_count)
|
||||
@@ -2466,7 +2455,6 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, struct genl_info *info)
|
||||
int err = 0;
|
||||
int i;
|
||||
struct nlattr *nl_option;
|
||||
LIST_HEAD(opt_inst_list);
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
@@ -2486,6 +2474,7 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, struct genl_info *info)
|
||||
struct nlattr *opt_attrs[TEAM_ATTR_OPTION_MAX + 1];
|
||||
struct nlattr *attr;
|
||||
struct nlattr *attr_data;
|
||||
LIST_HEAD(opt_inst_list);
|
||||
enum team_option_type opt_type;
|
||||
int opt_port_ifindex = 0; /* != 0 for per-port options */
|
||||
u32 opt_array_index = 0;
|
||||
@@ -2589,23 +2578,17 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, struct genl_info *info)
|
||||
if (err)
|
||||
goto team_put;
|
||||
opt_inst->changed = true;
|
||||
|
||||
/* dumb/evil user-space can send us duplicate opt,
|
||||
* keep only the last one
|
||||
*/
|
||||
if (__team_option_inst_tmp_find(&opt_inst_list,
|
||||
opt_inst))
|
||||
continue;
|
||||
|
||||
list_add(&opt_inst->tmp_list, &opt_inst_list);
|
||||
}
|
||||
if (!opt_found) {
|
||||
err = -ENOENT;
|
||||
goto team_put;
|
||||
}
|
||||
}
|
||||
|
||||
err = team_nl_send_event_options_get(team, &opt_inst_list);
|
||||
err = team_nl_send_event_options_get(team, &opt_inst_list);
|
||||
if (err)
|
||||
break;
|
||||
}
|
||||
|
||||
team_put:
|
||||
team_nl_team_put(team);
|
||||
|
||||
@@ -418,7 +418,7 @@ tegra_xusb_port_find_lane(struct tegra_xusb_port *port,
|
||||
{
|
||||
struct tegra_xusb_lane *lane, *match = ERR_PTR(-ENODEV);
|
||||
|
||||
for (map = map; map->type; map++) {
|
||||
for (; map->type; map++) {
|
||||
if (port->index != map->port)
|
||||
continue;
|
||||
|
||||
|
||||
@@ -34,14 +34,12 @@ enum max77620_pin_ppdrv {
|
||||
MAX77620_PIN_PP_DRV,
|
||||
};
|
||||
|
||||
enum max77620_pinconf_param {
|
||||
MAX77620_ACTIVE_FPS_SOURCE = PIN_CONFIG_END + 1,
|
||||
MAX77620_ACTIVE_FPS_POWER_ON_SLOTS,
|
||||
MAX77620_ACTIVE_FPS_POWER_DOWN_SLOTS,
|
||||
MAX77620_SUSPEND_FPS_SOURCE,
|
||||
MAX77620_SUSPEND_FPS_POWER_ON_SLOTS,
|
||||
MAX77620_SUSPEND_FPS_POWER_DOWN_SLOTS,
|
||||
};
|
||||
#define MAX77620_ACTIVE_FPS_SOURCE (PIN_CONFIG_END + 1)
|
||||
#define MAX77620_ACTIVE_FPS_POWER_ON_SLOTS (PIN_CONFIG_END + 2)
|
||||
#define MAX77620_ACTIVE_FPS_POWER_DOWN_SLOTS (PIN_CONFIG_END + 3)
|
||||
#define MAX77620_SUSPEND_FPS_SOURCE (PIN_CONFIG_END + 4)
|
||||
#define MAX77620_SUSPEND_FPS_POWER_ON_SLOTS (PIN_CONFIG_END + 5)
|
||||
#define MAX77620_SUSPEND_FPS_POWER_DOWN_SLOTS (PIN_CONFIG_END + 6)
|
||||
|
||||
struct max77620_pin_function {
|
||||
const char *name;
|
||||
|
||||
@@ -595,6 +595,13 @@ static struct isci_host *isci_host_alloc(struct pci_dev *pdev, int id)
|
||||
shost->max_lun = ~0;
|
||||
shost->max_cmd_len = MAX_COMMAND_SIZE;
|
||||
|
||||
/* turn on DIF support */
|
||||
scsi_host_set_prot(shost,
|
||||
SHOST_DIF_TYPE1_PROTECTION |
|
||||
SHOST_DIF_TYPE2_PROTECTION |
|
||||
SHOST_DIF_TYPE3_PROTECTION);
|
||||
scsi_host_set_guard(shost, SHOST_DIX_GUARD_CRC);
|
||||
|
||||
err = scsi_add_host(shost, &pdev->dev);
|
||||
if (err)
|
||||
goto err_shost;
|
||||
@@ -682,13 +689,6 @@ static int isci_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
goto err_host_alloc;
|
||||
}
|
||||
pci_info->hosts[i] = h;
|
||||
|
||||
/* turn on DIF support */
|
||||
scsi_host_set_prot(to_shost(h),
|
||||
SHOST_DIF_TYPE1_PROTECTION |
|
||||
SHOST_DIF_TYPE2_PROTECTION |
|
||||
SHOST_DIF_TYPE3_PROTECTION);
|
||||
scsi_host_set_guard(to_shost(h), SHOST_DIX_GUARD_CRC);
|
||||
}
|
||||
|
||||
err = isci_setup_interrupts(pdev);
|
||||
|
||||
@@ -7245,6 +7245,8 @@ static int qla4xxx_sysfs_ddb_tgt_create(struct scsi_qla_host *ha,
|
||||
|
||||
rc = qla4xxx_copy_from_fwddb_param(fnode_sess, fnode_conn,
|
||||
fw_ddb_entry);
|
||||
if (rc)
|
||||
goto free_sess;
|
||||
|
||||
ql4_printk(KERN_INFO, ha, "%s: sysfs entry %s created\n",
|
||||
__func__, fnode_sess->dev.kobj.name);
|
||||
|
||||
@@ -609,7 +609,8 @@ int __ceph_finish_cap_snap(struct ceph_inode_info *ci,
|
||||
capsnap->size);
|
||||
|
||||
spin_lock(&mdsc->snap_flush_lock);
|
||||
list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list);
|
||||
if (list_empty(&ci->i_snap_flush_item))
|
||||
list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list);
|
||||
spin_unlock(&mdsc->snap_flush_lock);
|
||||
return 1; /* caller may want to ceph_flush_snaps */
|
||||
}
|
||||
|
||||
@@ -1135,10 +1135,6 @@ static int __set_oom_adj(struct file *file, int oom_adj, bool legacy)
|
||||
|
||||
task_lock(p);
|
||||
if (!p->vfork_done && process_shares_mm(p, mm)) {
|
||||
pr_info("updating oom_score_adj for %d (%s) from %d to %d because it shares mm with %d (%s). Report if this is unexpected.\n",
|
||||
task_pid_nr(p), p->comm,
|
||||
p->signal->oom_score_adj, oom_adj,
|
||||
task_pid_nr(task), task->comm);
|
||||
p->signal->oom_score_adj = oom_adj;
|
||||
if (!legacy && has_capability_noaudit(current, CAP_SYS_RESOURCE))
|
||||
p->signal->oom_score_adj_min = (short)oom_adj;
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
struct user_key_payload {
|
||||
struct rcu_head rcu; /* RCU destructor */
|
||||
unsigned short datalen; /* length of this data */
|
||||
char data[0]; /* actual data */
|
||||
char data[0] __aligned(__alignof__(u64)); /* actual data */
|
||||
};
|
||||
|
||||
extern struct key_type key_type_user;
|
||||
|
||||
@@ -41,9 +41,9 @@ extern unsigned int sysctl_numa_balancing_scan_period_max;
|
||||
extern unsigned int sysctl_numa_balancing_scan_size;
|
||||
|
||||
#ifdef CONFIG_SCHED_DEBUG
|
||||
extern unsigned int sysctl_sched_migration_cost;
|
||||
extern unsigned int sysctl_sched_nr_migrate;
|
||||
extern unsigned int sysctl_sched_time_avg;
|
||||
extern __read_mostly unsigned int sysctl_sched_migration_cost;
|
||||
extern __read_mostly unsigned int sysctl_sched_nr_migrate;
|
||||
extern __read_mostly unsigned int sysctl_sched_time_avg;
|
||||
extern unsigned int sysctl_sched_shares_window;
|
||||
|
||||
int sched_proc_update_handler(struct ctl_table *table, int write,
|
||||
|
||||
@@ -1328,7 +1328,7 @@ static int copy_nodes_to_user(unsigned long __user *mask, unsigned long maxnode,
|
||||
nodemask_t *nodes)
|
||||
{
|
||||
unsigned long copy = ALIGN(maxnode-1, 64) / 8;
|
||||
const int nbytes = BITS_TO_LONGS(MAX_NUMNODES) * sizeof(long);
|
||||
unsigned int nbytes = BITS_TO_LONGS(nr_node_ids) * sizeof(long);
|
||||
|
||||
if (copy > nbytes) {
|
||||
if (copy > PAGE_SIZE)
|
||||
@@ -1489,7 +1489,7 @@ SYSCALL_DEFINE5(get_mempolicy, int __user *, policy,
|
||||
int uninitialized_var(pval);
|
||||
nodemask_t nodes;
|
||||
|
||||
if (nmask != NULL && maxnode < MAX_NUMNODES)
|
||||
if (nmask != NULL && maxnode < nr_node_ids)
|
||||
return -EINVAL;
|
||||
|
||||
err = do_get_mempolicy(&pval, &nodes, addr, flags);
|
||||
@@ -1518,7 +1518,7 @@ COMPAT_SYSCALL_DEFINE5(get_mempolicy, int __user *, policy,
|
||||
unsigned long nr_bits, alloc_size;
|
||||
DECLARE_BITMAP(bm, MAX_NUMNODES);
|
||||
|
||||
nr_bits = min_t(unsigned long, maxnode-1, MAX_NUMNODES);
|
||||
nr_bits = min_t(unsigned long, maxnode-1, nr_node_ids);
|
||||
alloc_size = ALIGN(nr_bits, BITS_PER_LONG) / 8;
|
||||
|
||||
if (nmask)
|
||||
|
||||
@@ -473,7 +473,7 @@ static bool is_zspage_isolated(struct zspage *zspage)
|
||||
return zspage->isolated;
|
||||
}
|
||||
|
||||
static int is_first_page(struct page *page)
|
||||
static __maybe_unused int is_first_page(struct page *page)
|
||||
{
|
||||
return PagePrivate(page);
|
||||
}
|
||||
@@ -558,20 +558,23 @@ static int get_size_class_index(int size)
|
||||
return min(zs_size_classes - 1, idx);
|
||||
}
|
||||
|
||||
/* type can be of enum type zs_stat_type or fullness_group */
|
||||
static inline void zs_stat_inc(struct size_class *class,
|
||||
enum zs_stat_type type, unsigned long cnt)
|
||||
int type, unsigned long cnt)
|
||||
{
|
||||
class->stats.objs[type] += cnt;
|
||||
}
|
||||
|
||||
/* type can be of enum type zs_stat_type or fullness_group */
|
||||
static inline void zs_stat_dec(struct size_class *class,
|
||||
enum zs_stat_type type, unsigned long cnt)
|
||||
int type, unsigned long cnt)
|
||||
{
|
||||
class->stats.objs[type] -= cnt;
|
||||
}
|
||||
|
||||
/* type can be of enum type zs_stat_type or fullness_group */
|
||||
static inline unsigned long zs_stat_get(struct size_class *class,
|
||||
enum zs_stat_type type)
|
||||
int type)
|
||||
{
|
||||
return class->stats.objs[type];
|
||||
}
|
||||
|
||||
@@ -217,6 +217,8 @@ static int batadv_interface_tx(struct sk_buff *skb,
|
||||
|
||||
switch (ntohs(ethhdr->h_proto)) {
|
||||
case ETH_P_8021Q:
|
||||
if (!pskb_may_pull(skb, sizeof(*vhdr)))
|
||||
goto dropped;
|
||||
vhdr = vlan_eth_hdr(skb);
|
||||
|
||||
/* drop batman-in-batman packets to prevent loops */
|
||||
|
||||
@@ -1287,14 +1287,7 @@ static void br_multicast_query_received(struct net_bridge *br,
|
||||
return;
|
||||
|
||||
br_multicast_update_query_timer(br, query, max_delay);
|
||||
|
||||
/* Based on RFC4541, section 2.1.1 IGMP Forwarding Rules,
|
||||
* the arrival port for IGMP Queries where the source address
|
||||
* is 0.0.0.0 should not be added to router port list.
|
||||
*/
|
||||
if ((saddr->proto == htons(ETH_P_IP) && saddr->u.ip4) ||
|
||||
saddr->proto == htons(ETH_P_IPV6))
|
||||
br_multicast_mark_router(br, port);
|
||||
br_multicast_mark_router(br, port);
|
||||
}
|
||||
|
||||
static int br_ip4_multicast_query(struct net_bridge *br,
|
||||
|
||||
@@ -2042,6 +2042,8 @@ static int process_connect(struct ceph_connection *con)
|
||||
dout("process_connect on %p tag %d\n", con, (int)con->in_tag);
|
||||
|
||||
if (con->auth) {
|
||||
int len = le32_to_cpu(con->in_reply.authorizer_len);
|
||||
|
||||
/*
|
||||
* Any connection that defines ->get_authorizer()
|
||||
* should also define ->add_authorizer_challenge() and
|
||||
@@ -2051,8 +2053,7 @@ static int process_connect(struct ceph_connection *con)
|
||||
*/
|
||||
if (con->in_reply.tag == CEPH_MSGR_TAG_CHALLENGE_AUTHORIZER) {
|
||||
ret = con->ops->add_authorizer_challenge(
|
||||
con, con->auth->authorizer_reply_buf,
|
||||
le32_to_cpu(con->in_reply.authorizer_len));
|
||||
con, con->auth->authorizer_reply_buf, len);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@@ -2062,10 +2063,12 @@ static int process_connect(struct ceph_connection *con)
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = con->ops->verify_authorizer_reply(con);
|
||||
if (ret < 0) {
|
||||
con->error_msg = "bad authorize reply";
|
||||
return ret;
|
||||
if (len) {
|
||||
ret = con->ops->verify_authorizer_reply(con);
|
||||
if (ret < 0) {
|
||||
con->error_msg = "bad authorize reply";
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -540,7 +540,8 @@ static int ipip6_err(struct sk_buff *skb, u32 info)
|
||||
}
|
||||
|
||||
err = 0;
|
||||
if (!ip6_err_gen_icmpv6_unreach(skb, iph->ihl * 4, type, data_len))
|
||||
if (__in6_dev_get(skb->dev) &&
|
||||
!ip6_err_gen_icmpv6_unreach(skb, iph->ihl * 4, type, data_len))
|
||||
goto out;
|
||||
|
||||
if (t->parms.iph.daddr == 0)
|
||||
|
||||
@@ -449,17 +449,15 @@ struct mesh_path *mesh_path_add(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
} while (unlikely(ret == -EEXIST && !mpath));
|
||||
|
||||
if (ret && ret != -EEXIST)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
/* At this point either new_mpath was added, or we found a
|
||||
* matching entry already in the table; in the latter case
|
||||
* free the unnecessary new entry.
|
||||
*/
|
||||
if (ret == -EEXIST) {
|
||||
if (ret) {
|
||||
kfree(new_mpath);
|
||||
|
||||
if (ret != -EEXIST)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
new_mpath = mpath;
|
||||
}
|
||||
|
||||
sdata->u.mesh.mesh_paths_generation++;
|
||||
return new_mpath;
|
||||
}
|
||||
@@ -489,6 +487,9 @@ int mpp_path_add(struct ieee80211_sub_if_data *sdata,
|
||||
&new_mpath->rhash,
|
||||
mesh_rht_params);
|
||||
|
||||
if (ret)
|
||||
kfree(new_mpath);
|
||||
|
||||
sdata->u.mesh.mpp_paths_generation++;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -263,6 +263,9 @@ static int nft_delrule_by_chain(struct nft_ctx *ctx)
|
||||
int err;
|
||||
|
||||
list_for_each_entry(rule, &ctx->chain->rules, list) {
|
||||
if (!nft_is_active_next(ctx->net, rule))
|
||||
continue;
|
||||
|
||||
err = nft_delrule(ctx, rule);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
@@ -4316,7 +4316,7 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
|
||||
rb->frames_per_block = req->tp_block_size / req->tp_frame_size;
|
||||
if (unlikely(rb->frames_per_block == 0))
|
||||
goto out;
|
||||
if (unlikely(req->tp_block_size > UINT_MAX / req->tp_block_nr))
|
||||
if (unlikely(rb->frames_per_block > UINT_MAX / req->tp_block_nr))
|
||||
goto out;
|
||||
if (unlikely((rb->frames_per_block * req->tp_block_nr) !=
|
||||
req->tp_frame_nr))
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
static __le32 sctp_gso_make_checksum(struct sk_buff *skb)
|
||||
{
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
gso_reset_checksum(skb, ~0);
|
||||
return sctp_compute_cksum(skb, skb_transport_offset(skb));
|
||||
}
|
||||
|
||||
|
||||
@@ -264,8 +264,8 @@ struct key *key_alloc(struct key_type *type, const char *desc,
|
||||
|
||||
spin_lock(&user->lock);
|
||||
if (!(flags & KEY_ALLOC_QUOTA_OVERRUN)) {
|
||||
if (user->qnkeys + 1 >= maxkeys ||
|
||||
user->qnbytes + quotalen >= maxbytes ||
|
||||
if (user->qnkeys + 1 > maxkeys ||
|
||||
user->qnbytes + quotalen > maxbytes ||
|
||||
user->qnbytes + quotalen < user->qnbytes)
|
||||
goto no_quota;
|
||||
}
|
||||
|
||||
@@ -652,9 +652,6 @@ static bool search_nested_keyrings(struct key *keyring,
|
||||
BUG_ON((ctx->flags & STATE_CHECKS) == 0 ||
|
||||
(ctx->flags & STATE_CHECKS) == STATE_CHECKS);
|
||||
|
||||
if (ctx->index_key.description)
|
||||
ctx->index_key.desc_len = strlen(ctx->index_key.description);
|
||||
|
||||
/* Check to see if this top-level keyring is what we are looking for
|
||||
* and whether it is valid or not.
|
||||
*/
|
||||
@@ -912,6 +909,7 @@ key_ref_t keyring_search(key_ref_t keyring,
|
||||
struct keyring_search_context ctx = {
|
||||
.index_key.type = type,
|
||||
.index_key.description = description,
|
||||
.index_key.desc_len = strlen(description),
|
||||
.cred = current_cred(),
|
||||
.match_data.cmp = key_default_cmp,
|
||||
.match_data.raw_data = description,
|
||||
|
||||
@@ -186,8 +186,7 @@ static int proc_keys_show(struct seq_file *m, void *v)
|
||||
int rc;
|
||||
|
||||
struct keyring_search_context ctx = {
|
||||
.index_key.type = key->type,
|
||||
.index_key.description = key->description,
|
||||
.index_key = key->index_key,
|
||||
.cred = current_cred(),
|
||||
.match_data.cmp = lookup_user_key_possessed,
|
||||
.match_data.raw_data = key,
|
||||
|
||||
@@ -544,6 +544,7 @@ struct key *request_key_and_link(struct key_type *type,
|
||||
struct keyring_search_context ctx = {
|
||||
.index_key.type = type,
|
||||
.index_key.description = description,
|
||||
.index_key.desc_len = strlen(description),
|
||||
.cred = current_cred(),
|
||||
.match_data.cmp = key_default_cmp,
|
||||
.match_data.raw_data = description,
|
||||
|
||||
@@ -254,7 +254,7 @@ struct key *key_get_instantiation_authkey(key_serial_t target_id)
|
||||
struct key *authkey;
|
||||
key_ref_t authkey_ref;
|
||||
|
||||
sprintf(description, "%x", target_id);
|
||||
ctx.index_key.desc_len = sprintf(description, "%x", target_id);
|
||||
|
||||
authkey_ref = search_process_keyrings(&ctx);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user