Merge branch 'turbostat' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
Pull turbostat utility updates for v4.18 from Len Brown. * 'turbostat' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux: (65 commits) tools/power turbostat: update version number tools/power turbostat: Add Node in output tools/power turbostat: add node information into turbostat calculations tools/power turbostat: remove num_ from cpu_topology struct tools/power turbostat: rename num_cores_per_pkg to num_cores_per_node tools/power turbostat: track thread ID in cpu_topology tools/power turbostat: Calculate additional node information for a package tools/power turbostat: Fix node and siblings lookup data tools/power turbostat: set max_num_cpus equal to the cpumask length tools/power turbostat: if --num_iterations, print for specific number of iterations tools/power turbostat: Add Cannon Lake support tools/power turbostat: delete duplicate #defines x86: msr-index.h: Correct SNB_C1/C3_AUTO_UNDEMOTE defines tools/power turbostat: Correct SNB_C1/C3_AUTO_UNDEMOTE defines tools/power turbostat: add POLL and POLL% column tools/power turbostat: Fix --hide Pk%pc10 tools/power turbostat: Build-in "Low Power Idle" counters support tools/power turbostat: Don't make man pages executable tools/power turbostat: remove blank lines tools/power turbostat: a small C-states dump readability immprovement ...
This commit is contained in:
commit
ba8042a85e
|
@ -14371,6 +14371,15 @@ S: Maintained
|
|||
F: drivers/tc/
|
||||
F: include/linux/tc.h
|
||||
|
||||
TURBOSTAT UTILITY
|
||||
M: "Len Brown" <lenb@kernel.org>
|
||||
L: linux-pm@vger.kernel.org
|
||||
B: https://bugzilla.kernel.org
|
||||
Q: https://patchwork.kernel.org/project/linux-pm/list/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux.git turbostat
|
||||
S: Supported
|
||||
F: tools/power/x86/turbostat/
|
||||
|
||||
TW5864 VIDEO4LINUX DRIVER
|
||||
M: Bluecherry Maintainers <maintainers@bluecherrydvr.com>
|
||||
M: Anton Sviridenko <anton@corp.bluecherry.net>
|
||||
|
|
|
@ -9,6 +9,12 @@ config NDS32
|
|||
select CLKSRC_MMIO
|
||||
select CLONE_BACKWARDS
|
||||
select COMMON_CLK
|
||||
select GENERIC_ASHLDI3
|
||||
select GENERIC_ASHRDI3
|
||||
select GENERIC_LSHRDI3
|
||||
select GENERIC_CMPDI2
|
||||
select GENERIC_MULDI3
|
||||
select GENERIC_UCMPDI2
|
||||
select GENERIC_ATOMIC64
|
||||
select GENERIC_CPU_DEVICES
|
||||
select GENERIC_CLOCKEVENTS
|
||||
|
@ -82,6 +88,7 @@ endmenu
|
|||
|
||||
menu "Kernel Features"
|
||||
source "kernel/Kconfig.preempt"
|
||||
source "kernel/Kconfig.freezer"
|
||||
source "mm/Kconfig"
|
||||
source "kernel/Kconfig.hz"
|
||||
endmenu
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
comment "Processor Features"
|
||||
|
||||
config CPU_BIG_ENDIAN
|
||||
bool "Big endian"
|
||||
def_bool !CPU_LITTLE_ENDIAN
|
||||
|
||||
config CPU_LITTLE_ENDIAN
|
||||
def_bool !CPU_BIG_ENDIAN
|
||||
bool "Little endian"
|
||||
default y
|
||||
|
||||
config HWZOL
|
||||
bool "hardware zero overhead loop support"
|
||||
|
|
|
@ -23,9 +23,6 @@ export TEXTADDR
|
|||
# If we have a machine-specific directory, then include it in the build.
|
||||
core-y += arch/nds32/kernel/ arch/nds32/mm/
|
||||
libs-y += arch/nds32/lib/
|
||||
LIBGCC_PATH := \
|
||||
$(shell $(CC) $(KBUILD_CFLAGS) $(KCFLAGS) -print-libgcc-file-name)
|
||||
libs-y += $(LIBGCC_PATH)
|
||||
|
||||
ifneq '$(CONFIG_NDS32_BUILTIN_DTB)' '""'
|
||||
BUILTIN_DTB := y
|
||||
|
@ -35,8 +32,12 @@ endif
|
|||
|
||||
ifdef CONFIG_CPU_LITTLE_ENDIAN
|
||||
KBUILD_CFLAGS += $(call cc-option, -EL)
|
||||
KBUILD_AFLAGS += $(call cc-option, -EL)
|
||||
LDFLAGS += $(call cc-option, -EL)
|
||||
else
|
||||
KBUILD_CFLAGS += $(call cc-option, -EB)
|
||||
KBUILD_AFLAGS += $(call cc-option, -EB)
|
||||
LDFLAGS += $(call cc-option, -EB)
|
||||
endif
|
||||
|
||||
boot := arch/nds32/boot
|
||||
|
|
|
@ -16,6 +16,7 @@ generic-y += dma.h
|
|||
generic-y += emergency-restart.h
|
||||
generic-y += errno.h
|
||||
generic-y += exec.h
|
||||
generic-y += export.h
|
||||
generic-y += fb.h
|
||||
generic-y += fcntl.h
|
||||
generic-y += ftrace.h
|
||||
|
@ -49,6 +50,7 @@ generic-y += switch_to.h
|
|||
generic-y += timex.h
|
||||
generic-y += topology.h
|
||||
generic-y += trace_clock.h
|
||||
generic-y += xor.h
|
||||
generic-y += unaligned.h
|
||||
generic-y += user.h
|
||||
generic-y += vga.h
|
||||
|
|
|
@ -336,7 +336,7 @@
|
|||
#define INT_MASK_mskIDIVZE ( 0x1 << INT_MASK_offIDIVZE )
|
||||
#define INT_MASK_mskDSSIM ( 0x1 << INT_MASK_offDSSIM )
|
||||
|
||||
#define INT_MASK_INITAIAL_VAL 0x10003
|
||||
#define INT_MASK_INITAIAL_VAL (INT_MASK_mskDSSIM|INT_MASK_mskIDIVZE)
|
||||
|
||||
/******************************************************************************
|
||||
* ir15: INT_PEND (Interrupt Pending Register)
|
||||
|
@ -396,6 +396,7 @@
|
|||
#define MMU_CTL_D8KB 1
|
||||
#define MMU_CTL_UNA ( 0x1 << MMU_CTL_offUNA )
|
||||
|
||||
#define MMU_CTL_CACHEABLE_NON 0
|
||||
#define MMU_CTL_CACHEABLE_WB 2
|
||||
#define MMU_CTL_CACHEABLE_WT 3
|
||||
|
||||
|
|
|
@ -32,6 +32,8 @@ void flush_anon_page(struct vm_area_struct *vma,
|
|||
|
||||
#define ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE
|
||||
void flush_kernel_dcache_page(struct page *page);
|
||||
void flush_kernel_vmap_range(void *addr, int size);
|
||||
void invalidate_kernel_vmap_range(void *addr, int size);
|
||||
void flush_icache_range(unsigned long start, unsigned long end);
|
||||
void flush_icache_page(struct vm_area_struct *vma, struct page *page);
|
||||
#define flush_dcache_mmap_lock(mapping) xa_lock_irq(&(mapping)->i_pages)
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#ifndef __ASM_NDS32_IO_H
|
||||
#define __ASM_NDS32_IO_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
extern void iounmap(volatile void __iomem *addr);
|
||||
#define __raw_writeb __raw_writeb
|
||||
static inline void __raw_writeb(u8 val, volatile void __iomem *addr)
|
||||
|
|
|
@ -27,6 +27,9 @@ extern void copy_user_highpage(struct page *to, struct page *from,
|
|||
unsigned long vaddr, struct vm_area_struct *vma);
|
||||
extern void clear_user_highpage(struct page *page, unsigned long vaddr);
|
||||
|
||||
void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
|
||||
struct page *to);
|
||||
void clear_user_page(void *addr, unsigned long vaddr, struct page *page);
|
||||
#define __HAVE_ARCH_COPY_USER_HIGHPAGE
|
||||
#define clear_user_highpage clear_user_highpage
|
||||
#else
|
||||
|
|
|
@ -152,6 +152,7 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
|
|||
#define PAGE_CACHE_L1 __pgprot(_HAVE_PAGE_L | _PAGE_V | _PAGE_M_KRW | _PAGE_D | _PAGE_E | _PAGE_G | _PAGE_CACHE)
|
||||
#define PAGE_MEMORY __pgprot(_HAVE_PAGE_L | _PAGE_V | _PAGE_M_KRW | _PAGE_D | _PAGE_E | _PAGE_G | _PAGE_CACHE_SHRD)
|
||||
#define PAGE_KERNEL __pgprot(_PAGE_V | _PAGE_M_KRW | _PAGE_D | _PAGE_E | _PAGE_G | _PAGE_CACHE_SHRD)
|
||||
#define PAGE_SHARED __pgprot(_PAGE_V | _PAGE_M_URW_KRW | _PAGE_D | _PAGE_CACHE_SHRD)
|
||||
#define PAGE_DEVICE __pgprot(_PAGE_V | _PAGE_M_KRW | _PAGE_D | _PAGE_G | _PAGE_C_DEV)
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ common_exception_handler:
|
|||
/* interrupt */
|
||||
2:
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
jal arch_trace_hardirqs_off
|
||||
jal trace_hardirqs_off
|
||||
#endif
|
||||
move $r0, $sp
|
||||
sethi $lp, hi20(ret_from_intr)
|
||||
|
|
|
@ -57,14 +57,32 @@ _nodtb:
|
|||
isb
|
||||
mtsr $r4, $L1_PPTB ! load page table pointer\n"
|
||||
|
||||
/* set NTC0 cacheable/writeback, mutliple page size in use */
|
||||
mfsr $r3, $MMU_CTL
|
||||
li $r0, #~MMU_CTL_mskNTC0
|
||||
and $r3, $r3, $r0
|
||||
#ifdef CONFIG_ANDES_PAGE_SIZE_4KB
|
||||
ori $r3, $r3, #(MMU_CTL_mskMPZIU|(MMU_CTL_CACHEABLE_WB << MMU_CTL_offNTC0))
|
||||
#ifdef CONFIG_CPU_DCACHE_DISABLE
|
||||
#define MMU_CTL_NTCC MMU_CTL_CACHEABLE_NON
|
||||
#else
|
||||
ori $r3, $r3, #(MMU_CTL_mskMPZIU|(MMU_CTL_CACHEABLE_WB << MMU_CTL_offNTC0)|MMU_CTL_D8KB)
|
||||
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
|
||||
#define MMU_CTL_NTCC MMU_CTL_CACHEABLE_WT
|
||||
#else
|
||||
#define MMU_CTL_NTCC MMU_CTL_CACHEABLE_WB
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* set NTC cacheability, mutliple page size in use */
|
||||
mfsr $r3, $MMU_CTL
|
||||
#if CONFIG_MEMORY_START >= 0xc0000000
|
||||
ori $r3, $r3, (MMU_CTL_NTCC << MMU_CTL_offNTC3)
|
||||
#elif CONFIG_MEMORY_START >= 0x80000000
|
||||
ori $r3, $r3, (MMU_CTL_NTCC << MMU_CTL_offNTC2)
|
||||
#elif CONFIG_MEMORY_START >= 0x40000000
|
||||
ori $r3, $r3, (MMU_CTL_NTCC << MMU_CTL_offNTC1)
|
||||
#else
|
||||
ori $r3, $r3, (MMU_CTL_NTCC << MMU_CTL_offNTC0)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ANDES_PAGE_SIZE_4KB
|
||||
ori $r3, $r3, #(MMU_CTL_mskMPZIU)
|
||||
#else
|
||||
ori $r3, $r3, #(MMU_CTL_mskMPZIU|MMU_CTL_D8KB)
|
||||
#endif
|
||||
#ifdef CONFIG_HW_SUPPORT_UNALIGNMENT_ACCESS
|
||||
li $r0, #MMU_CTL_UNA
|
||||
|
|
|
@ -293,6 +293,9 @@ void __init setup_arch(char **cmdline_p)
|
|||
/* paging_init() sets up the MMU and marks all pages as reserved */
|
||||
paging_init();
|
||||
|
||||
/* invalidate all TLB entries because the new mapping is created */
|
||||
__nds32__tlbop_flua();
|
||||
|
||||
/* use generic way to parse */
|
||||
parse_early_param();
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ void save_stack_trace(struct stack_trace *trace)
|
|||
{
|
||||
save_stack_trace_tsk(current, trace);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(save_stack_trace);
|
||||
|
||||
void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
|
||||
{
|
||||
|
@ -45,3 +46,4 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
|
|||
fpn = (unsigned long *)fpp;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(save_stack_trace_tsk);
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include <asm/vdso_timer_info.h>
|
||||
#include <asm/cache_info.h>
|
||||
extern struct cache_info L1_cache_info[2];
|
||||
extern char vdso_start, vdso_end;
|
||||
extern char vdso_start[], vdso_end[];
|
||||
static unsigned long vdso_pages __ro_after_init;
|
||||
static unsigned long timer_mapping_base;
|
||||
|
||||
|
@ -66,16 +66,16 @@ static int __init vdso_init(void)
|
|||
int i;
|
||||
struct page **vdso_pagelist;
|
||||
|
||||
if (memcmp(&vdso_start, "\177ELF", 4)) {
|
||||
if (memcmp(vdso_start, "\177ELF", 4)) {
|
||||
pr_err("vDSO is not a valid ELF object!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/* Creat a timer io mapping to get clock cycles counter */
|
||||
get_timer_node_info();
|
||||
|
||||
vdso_pages = (&vdso_end - &vdso_start) >> PAGE_SHIFT;
|
||||
vdso_pages = (vdso_end - vdso_start) >> PAGE_SHIFT;
|
||||
pr_info("vdso: %ld pages (%ld code @ %p, %ld data @ %p)\n",
|
||||
vdso_pages + 1, vdso_pages, &vdso_start, 1L, vdso_data);
|
||||
vdso_pages + 1, vdso_pages, vdso_start, 1L, vdso_data);
|
||||
|
||||
/* Allocate the vDSO pagelist */
|
||||
vdso_pagelist = kcalloc(vdso_pages, sizeof(struct page *), GFP_KERNEL);
|
||||
|
@ -83,7 +83,7 @@ static int __init vdso_init(void)
|
|||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < vdso_pages; i++)
|
||||
vdso_pagelist[i] = virt_to_page(&vdso_start + i * PAGE_SIZE);
|
||||
vdso_pagelist[i] = virt_to_page(vdso_start + i * PAGE_SIZE);
|
||||
vdso_spec[1].pages = &vdso_pagelist[0];
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Copyright (C) 2005-2017 Andes Technology Corporation
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/export.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
.text
|
||||
|
@ -16,6 +17,7 @@ ENTRY(copy_page)
|
|||
popm $r2, $r10
|
||||
ret
|
||||
ENDPROC(copy_page)
|
||||
EXPORT_SYMBOL(copy_page)
|
||||
|
||||
ENTRY(clear_page)
|
||||
pushm $r1, $r9
|
||||
|
@ -35,3 +37,4 @@ ENTRY(clear_page)
|
|||
popm $r1, $r9
|
||||
ret
|
||||
ENDPROC(clear_page)
|
||||
EXPORT_SYMBOL(clear_page)
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#define RA(inst) (((inst) >> 15) & 0x1FUL)
|
||||
#define RB(inst) (((inst) >> 10) & 0x1FUL)
|
||||
#define SV(inst) (((inst) >> 8) & 0x3UL)
|
||||
#define IMM(inst) (((inst) >> 0) & 0x3FFFUL)
|
||||
#define IMM(inst) (((inst) >> 0) & 0x7FFFUL)
|
||||
|
||||
#define RA3(inst) (((inst) >> 3) & 0x7UL)
|
||||
#define RT3(inst) (((inst) >> 6) & 0x7UL)
|
||||
|
@ -28,6 +28,9 @@
|
|||
#define RA5(inst) (((inst) >> 0) & 0x1FUL)
|
||||
#define RT4(inst) (((inst) >> 5) & 0xFUL)
|
||||
|
||||
#define GET_IMMSVAL(imm_value) \
|
||||
(((imm_value >> 14) & 0x1) ? (imm_value - 0x8000) : imm_value)
|
||||
|
||||
#define __get8_data(val,addr,err) \
|
||||
__asm__( \
|
||||
"1: lbi.bi %1, [%2], #1\n" \
|
||||
|
@ -467,7 +470,7 @@ static inline int do_32(unsigned long inst, struct pt_regs *regs)
|
|||
}
|
||||
|
||||
if (imm)
|
||||
shift = IMM(inst) * len;
|
||||
shift = GET_IMMSVAL(IMM(inst)) * len;
|
||||
else
|
||||
shift = *idx_to_addr(regs, RB(inst)) << SV(inst);
|
||||
|
||||
|
@ -552,7 +555,7 @@ static struct ctl_table alignment_tbl[3] = {
|
|||
|
||||
static struct ctl_table nds32_sysctl_table[2] = {
|
||||
{
|
||||
.procname = "unaligned_acess",
|
||||
.procname = "unaligned_access",
|
||||
.mode = 0555,
|
||||
.child = alignment_tbl},
|
||||
{}
|
||||
|
|
|
@ -147,6 +147,25 @@ void flush_cache_vunmap(unsigned long start, unsigned long end)
|
|||
cpu_icache_inval_all();
|
||||
}
|
||||
|
||||
void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
|
||||
struct page *to)
|
||||
{
|
||||
cpu_dcache_wbinval_page((unsigned long)vaddr);
|
||||
cpu_icache_inval_page((unsigned long)vaddr);
|
||||
copy_page(vto, vfrom);
|
||||
cpu_dcache_wbinval_page((unsigned long)vto);
|
||||
cpu_icache_inval_page((unsigned long)vto);
|
||||
}
|
||||
|
||||
void clear_user_page(void *addr, unsigned long vaddr, struct page *page)
|
||||
{
|
||||
cpu_dcache_wbinval_page((unsigned long)vaddr);
|
||||
cpu_icache_inval_page((unsigned long)vaddr);
|
||||
clear_page(addr);
|
||||
cpu_dcache_wbinval_page((unsigned long)addr);
|
||||
cpu_icache_inval_page((unsigned long)addr);
|
||||
}
|
||||
|
||||
void copy_user_highpage(struct page *to, struct page *from,
|
||||
unsigned long vaddr, struct vm_area_struct *vma)
|
||||
{
|
||||
|
@ -156,11 +175,9 @@ void copy_user_highpage(struct page *to, struct page *from,
|
|||
pto = page_to_phys(to);
|
||||
pfrom = page_to_phys(from);
|
||||
|
||||
local_irq_save(flags);
|
||||
if (aliasing(vaddr, (unsigned long)kfrom))
|
||||
cpu_dcache_wb_page((unsigned long)kfrom);
|
||||
if (aliasing(vaddr, (unsigned long)kto))
|
||||
cpu_dcache_inval_page((unsigned long)kto);
|
||||
local_irq_save(flags);
|
||||
vto = kremap0(vaddr, pto);
|
||||
vfrom = kremap1(vaddr, pfrom);
|
||||
copy_page((void *)vto, (void *)vfrom);
|
||||
|
@ -198,21 +215,25 @@ void flush_dcache_page(struct page *page)
|
|||
if (mapping && !mapping_mapped(mapping))
|
||||
set_bit(PG_dcache_dirty, &page->flags);
|
||||
else {
|
||||
int i, pc;
|
||||
unsigned long vto, kaddr, flags;
|
||||
unsigned long kaddr, flags;
|
||||
|
||||
kaddr = (unsigned long)page_address(page);
|
||||
cpu_dcache_wbinval_page(kaddr);
|
||||
pc = CACHE_SET(DCACHE) * CACHE_LINE_SIZE(DCACHE) / PAGE_SIZE;
|
||||
local_irq_save(flags);
|
||||
for (i = 0; i < pc; i++) {
|
||||
vto =
|
||||
kremap0(kaddr + i * PAGE_SIZE, page_to_phys(page));
|
||||
cpu_dcache_wbinval_page(vto);
|
||||
kunmap01(vto);
|
||||
cpu_dcache_wbinval_page(kaddr);
|
||||
if (mapping) {
|
||||
unsigned long vaddr, kto;
|
||||
|
||||
vaddr = page->index << PAGE_SHIFT;
|
||||
if (aliasing(vaddr, kaddr)) {
|
||||
kto = kremap0(vaddr, page_to_phys(page));
|
||||
cpu_dcache_wbinval_page(kto);
|
||||
kunmap01(kto);
|
||||
}
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(flush_dcache_page);
|
||||
|
||||
void copy_to_user_page(struct vm_area_struct *vma, struct page *page,
|
||||
unsigned long vaddr, void *dst, void *src, int len)
|
||||
|
@ -251,7 +272,7 @@ void copy_from_user_page(struct vm_area_struct *vma, struct page *page,
|
|||
void flush_anon_page(struct vm_area_struct *vma,
|
||||
struct page *page, unsigned long vaddr)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned long kaddr, flags, ktmp;
|
||||
if (!PageAnon(page))
|
||||
return;
|
||||
|
||||
|
@ -261,7 +282,12 @@ void flush_anon_page(struct vm_area_struct *vma,
|
|||
local_irq_save(flags);
|
||||
if (vma->vm_flags & VM_EXEC)
|
||||
cpu_icache_inval_page(vaddr & PAGE_MASK);
|
||||
cpu_dcache_wbinval_page((unsigned long)page_address(page));
|
||||
kaddr = (unsigned long)page_address(page);
|
||||
if (aliasing(vaddr, kaddr)) {
|
||||
ktmp = kremap0(vaddr, page_to_phys(page));
|
||||
cpu_dcache_wbinval_page(ktmp);
|
||||
kunmap01(ktmp);
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
|
@ -272,6 +298,25 @@ void flush_kernel_dcache_page(struct page *page)
|
|||
cpu_dcache_wbinval_page((unsigned long)page_address(page));
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
EXPORT_SYMBOL(flush_kernel_dcache_page);
|
||||
|
||||
void flush_kernel_vmap_range(void *addr, int size)
|
||||
{
|
||||
unsigned long flags;
|
||||
local_irq_save(flags);
|
||||
cpu_dcache_wb_range((unsigned long)addr, (unsigned long)addr + size);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
EXPORT_SYMBOL(flush_kernel_vmap_range);
|
||||
|
||||
void invalidate_kernel_vmap_range(void *addr, int size)
|
||||
{
|
||||
unsigned long flags;
|
||||
local_irq_save(flags);
|
||||
cpu_dcache_inval_range((unsigned long)addr, (unsigned long)addr + size);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
EXPORT_SYMBOL(invalidate_kernel_vmap_range);
|
||||
|
||||
void flush_icache_range(unsigned long start, unsigned long end)
|
||||
{
|
||||
|
@ -283,6 +328,7 @@ void flush_icache_range(unsigned long start, unsigned long end)
|
|||
cpu_cache_wbinval_range(start, end, 1);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
EXPORT_SYMBOL(flush_icache_range);
|
||||
|
||||
void flush_icache_page(struct vm_area_struct *vma, struct page *page)
|
||||
{
|
||||
|
|
|
@ -30,6 +30,7 @@ extern unsigned long phys_initrd_size;
|
|||
* zero-initialized data and COW.
|
||||
*/
|
||||
struct page *empty_zero_page;
|
||||
EXPORT_SYMBOL(empty_zero_page);
|
||||
|
||||
static void __init zone_sizes_init(void)
|
||||
{
|
||||
|
|
|
@ -21,7 +21,7 @@ LDFLAGS_purgatory.ro += -z nodefaultlib
|
|||
KBUILD_CFLAGS := -fno-strict-aliasing -Wall -Wstrict-prototypes
|
||||
KBUILD_CFLAGS += -Wno-pointer-sign -Wno-sign-compare
|
||||
KBUILD_CFLAGS += -fno-zero-initialized-in-bss -fno-builtin -ffreestanding
|
||||
KBUILD_CFLAGS += -c -MD -Os -m64
|
||||
KBUILD_CFLAGS += -c -MD -Os -m64 -msoft-float
|
||||
KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
|
||||
|
||||
$(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE
|
||||
|
|
|
@ -62,8 +62,8 @@
|
|||
#define NHM_C3_AUTO_DEMOTE (1UL << 25)
|
||||
#define NHM_C1_AUTO_DEMOTE (1UL << 26)
|
||||
#define ATM_LNC_C6_AUTO_DEMOTE (1UL << 25)
|
||||
#define SNB_C1_AUTO_UNDEMOTE (1UL << 27)
|
||||
#define SNB_C3_AUTO_UNDEMOTE (1UL << 28)
|
||||
#define SNB_C3_AUTO_UNDEMOTE (1UL << 27)
|
||||
#define SNB_C1_AUTO_UNDEMOTE (1UL << 28)
|
||||
|
||||
#define MSR_MTRRcap 0x000000fe
|
||||
|
||||
|
|
|
@ -152,8 +152,8 @@ static int eip197_load_firmwares(struct safexcel_crypto_priv *priv)
|
|||
EIP197_PE_ICE_SCRATCH_CTRL_CHANGE_ACCESS;
|
||||
writel(val, EIP197_PE(priv) + EIP197_PE_ICE_SCRATCH_CTRL);
|
||||
|
||||
memset(EIP197_PE(priv) + EIP197_PE_ICE_SCRATCH_RAM, 0,
|
||||
EIP197_NUM_OF_SCRATCH_BLOCKS * sizeof(u32));
|
||||
memset_io(EIP197_PE(priv) + EIP197_PE_ICE_SCRATCH_RAM, 0,
|
||||
EIP197_NUM_OF_SCRATCH_BLOCKS * sizeof(u32));
|
||||
|
||||
eip197_write_firmware(priv, fw[FW_IFPP], EIP197_PE_ICE_FPP_CTRL,
|
||||
EIP197_PE_ICE_RAM_CTRL_FPP_PROG_EN);
|
||||
|
|
|
@ -130,7 +130,7 @@ static int elan_smbus_get_baseline_data(struct i2c_client *client,
|
|||
bool max_baseline, u8 *value)
|
||||
{
|
||||
int error;
|
||||
u8 val[3];
|
||||
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
|
||||
error = i2c_smbus_read_block_data(client,
|
||||
max_baseline ?
|
||||
|
@ -149,7 +149,7 @@ static int elan_smbus_get_version(struct i2c_client *client,
|
|||
bool iap, u8 *version)
|
||||
{
|
||||
int error;
|
||||
u8 val[3];
|
||||
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
|
||||
error = i2c_smbus_read_block_data(client,
|
||||
iap ? ETP_SMBUS_IAP_VERSION_CMD :
|
||||
|
@ -170,7 +170,7 @@ static int elan_smbus_get_sm_version(struct i2c_client *client,
|
|||
u8 *clickpad)
|
||||
{
|
||||
int error;
|
||||
u8 val[3];
|
||||
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
|
||||
error = i2c_smbus_read_block_data(client,
|
||||
ETP_SMBUS_SM_VERSION_CMD, val);
|
||||
|
@ -188,7 +188,7 @@ static int elan_smbus_get_sm_version(struct i2c_client *client,
|
|||
static int elan_smbus_get_product_id(struct i2c_client *client, u16 *id)
|
||||
{
|
||||
int error;
|
||||
u8 val[3];
|
||||
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
|
||||
error = i2c_smbus_read_block_data(client,
|
||||
ETP_SMBUS_UNIQUEID_CMD, val);
|
||||
|
@ -205,7 +205,7 @@ static int elan_smbus_get_checksum(struct i2c_client *client,
|
|||
bool iap, u16 *csum)
|
||||
{
|
||||
int error;
|
||||
u8 val[3];
|
||||
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
|
||||
error = i2c_smbus_read_block_data(client,
|
||||
iap ? ETP_SMBUS_FW_CHECKSUM_CMD :
|
||||
|
@ -226,7 +226,7 @@ static int elan_smbus_get_max(struct i2c_client *client,
|
|||
{
|
||||
int ret;
|
||||
int error;
|
||||
u8 val[3];
|
||||
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
|
||||
ret = i2c_smbus_read_block_data(client, ETP_SMBUS_RANGE_CMD, val);
|
||||
if (ret != 3) {
|
||||
|
@ -246,7 +246,7 @@ static int elan_smbus_get_resolution(struct i2c_client *client,
|
|||
{
|
||||
int ret;
|
||||
int error;
|
||||
u8 val[3];
|
||||
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
|
||||
ret = i2c_smbus_read_block_data(client, ETP_SMBUS_RESOLUTION_CMD, val);
|
||||
if (ret != 3) {
|
||||
|
@ -267,7 +267,7 @@ static int elan_smbus_get_num_traces(struct i2c_client *client,
|
|||
{
|
||||
int ret;
|
||||
int error;
|
||||
u8 val[3];
|
||||
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
|
||||
ret = i2c_smbus_read_block_data(client, ETP_SMBUS_XY_TRACENUM_CMD, val);
|
||||
if (ret != 3) {
|
||||
|
@ -294,7 +294,7 @@ static int elan_smbus_iap_get_mode(struct i2c_client *client,
|
|||
{
|
||||
int error;
|
||||
u16 constant;
|
||||
u8 val[3];
|
||||
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
|
||||
error = i2c_smbus_read_block_data(client, ETP_SMBUS_IAP_CTRL_CMD, val);
|
||||
if (error < 0) {
|
||||
|
@ -345,7 +345,7 @@ static int elan_smbus_prepare_fw_update(struct i2c_client *client)
|
|||
int len;
|
||||
int error;
|
||||
enum tp_mode mode;
|
||||
u8 val[3];
|
||||
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
u8 cmd[4] = {0x0F, 0x78, 0x00, 0x06};
|
||||
u16 password;
|
||||
|
||||
|
@ -419,7 +419,7 @@ static int elan_smbus_write_fw_block(struct i2c_client *client,
|
|||
struct device *dev = &client->dev;
|
||||
int error;
|
||||
u16 result;
|
||||
u8 val[3];
|
||||
u8 val[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
|
||||
/*
|
||||
* Due to the limitation of smbus protocol limiting
|
||||
|
|
|
@ -172,6 +172,12 @@ static const char * const smbus_pnp_ids[] = {
|
|||
"LEN0048", /* X1 Carbon 3 */
|
||||
"LEN0046", /* X250 */
|
||||
"LEN004a", /* W541 */
|
||||
"LEN0071", /* T480 */
|
||||
"LEN0072", /* X1 Carbon Gen 5 (2017) - Elan/ALPS trackpoint */
|
||||
"LEN0073", /* X1 Carbon G5 (Elantech) */
|
||||
"LEN0092", /* X1 Carbon 6 */
|
||||
"LEN0096", /* X280 */
|
||||
"LEN0097", /* X280 -> ALPS trackpoint */
|
||||
"LEN200f", /* T450s */
|
||||
NULL
|
||||
};
|
||||
|
|
|
@ -1447,8 +1447,8 @@ static void __nvme_revalidate_disk(struct gendisk *disk, struct nvme_id_ns *id)
|
|||
if (ns->lba_shift == 0)
|
||||
ns->lba_shift = 9;
|
||||
ns->noiob = le16_to_cpu(id->noiob);
|
||||
ns->ext = ns->ms && (id->flbas & NVME_NS_FLBAS_META_EXT);
|
||||
ns->ms = le16_to_cpu(id->lbaf[id->flbas & NVME_NS_FLBAS_LBA_MASK].ms);
|
||||
ns->ext = ns->ms && (id->flbas & NVME_NS_FLBAS_META_EXT);
|
||||
/* the PI implementation requires metadata equal t10 pi tuple size */
|
||||
if (ns->ms == sizeof(struct t10_pi_tuple))
|
||||
ns->pi_type = id->dps & NVME_NS_DPS_PI_MASK;
|
||||
|
|
|
@ -163,6 +163,16 @@ MODULE_LICENSE("GPL");
|
|||
|
||||
static const char * const ashs_ids[] = { "ATK4001", "ATK4002", NULL };
|
||||
|
||||
static bool ashs_present(void)
|
||||
{
|
||||
int i = 0;
|
||||
while (ashs_ids[i]) {
|
||||
if (acpi_dev_found(ashs_ids[i++]))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
struct bios_args {
|
||||
u32 arg0;
|
||||
u32 arg1;
|
||||
|
@ -1025,6 +1035,9 @@ static int asus_new_rfkill(struct asus_wmi *asus,
|
|||
|
||||
static void asus_wmi_rfkill_exit(struct asus_wmi *asus)
|
||||
{
|
||||
if (asus->driver->wlan_ctrl_by_user && ashs_present())
|
||||
return;
|
||||
|
||||
asus_unregister_rfkill_notifier(asus, "\\_SB.PCI0.P0P5");
|
||||
asus_unregister_rfkill_notifier(asus, "\\_SB.PCI0.P0P6");
|
||||
asus_unregister_rfkill_notifier(asus, "\\_SB.PCI0.P0P7");
|
||||
|
@ -2121,16 +2134,6 @@ static int asus_wmi_fan_init(struct asus_wmi *asus)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static bool ashs_present(void)
|
||||
{
|
||||
int i = 0;
|
||||
while (ashs_ids[i]) {
|
||||
if (acpi_dev_found(ashs_ids[i++]))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* WMI Driver
|
||||
*/
|
||||
|
|
|
@ -3034,7 +3034,8 @@ static blk_status_t do_dasd_request(struct blk_mq_hw_ctx *hctx,
|
|||
cqr->callback_data = req;
|
||||
cqr->status = DASD_CQR_FILLED;
|
||||
cqr->dq = dq;
|
||||
req->completion_data = cqr;
|
||||
*((struct dasd_ccw_req **) blk_mq_rq_to_pdu(req)) = cqr;
|
||||
|
||||
blk_mq_start_request(req);
|
||||
spin_lock(&block->queue_lock);
|
||||
list_add_tail(&cqr->blocklist, &block->ccw_queue);
|
||||
|
@ -3058,12 +3059,13 @@ out:
|
|||
*/
|
||||
enum blk_eh_timer_return dasd_times_out(struct request *req, bool reserved)
|
||||
{
|
||||
struct dasd_ccw_req *cqr = req->completion_data;
|
||||
struct dasd_block *block = req->q->queuedata;
|
||||
struct dasd_device *device;
|
||||
struct dasd_ccw_req *cqr;
|
||||
unsigned long flags;
|
||||
int rc = 0;
|
||||
|
||||
cqr = *((struct dasd_ccw_req **) blk_mq_rq_to_pdu(req));
|
||||
if (!cqr)
|
||||
return BLK_EH_NOT_HANDLED;
|
||||
|
||||
|
@ -3169,6 +3171,7 @@ static int dasd_alloc_queue(struct dasd_block *block)
|
|||
int rc;
|
||||
|
||||
block->tag_set.ops = &dasd_mq_ops;
|
||||
block->tag_set.cmd_size = sizeof(struct dasd_ccw_req *);
|
||||
block->tag_set.nr_hw_queues = DASD_NR_HW_QUEUES;
|
||||
block->tag_set.queue_depth = DASD_MAX_LCU_DEV * DASD_REQ_PER_DEV;
|
||||
block->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
|
||||
|
|
|
@ -372,18 +372,14 @@ int afs_permission(struct inode *inode, int mask)
|
|||
mask, access, S_ISDIR(inode->i_mode) ? "dir" : "file");
|
||||
|
||||
if (S_ISDIR(inode->i_mode)) {
|
||||
if (mask & MAY_EXEC) {
|
||||
if (mask & (MAY_EXEC | MAY_READ | MAY_CHDIR)) {
|
||||
if (!(access & AFS_ACE_LOOKUP))
|
||||
goto permission_denied;
|
||||
} else if (mask & MAY_READ) {
|
||||
if (!(access & AFS_ACE_LOOKUP))
|
||||
goto permission_denied;
|
||||
} else if (mask & MAY_WRITE) {
|
||||
}
|
||||
if (mask & MAY_WRITE) {
|
||||
if (!(access & (AFS_ACE_DELETE | /* rmdir, unlink, rename from */
|
||||
AFS_ACE_INSERT))) /* create, mkdir, symlink, rename to */
|
||||
goto permission_denied;
|
||||
} else {
|
||||
BUG();
|
||||
}
|
||||
} else {
|
||||
if (!(access & AFS_ACE_LOOKUP))
|
||||
|
|
|
@ -23,7 +23,7 @@ static int afs_deliver_vl_get_entry_by_name_u(struct afs_call *call)
|
|||
struct afs_uvldbentry__xdr *uvldb;
|
||||
struct afs_vldb_entry *entry;
|
||||
bool new_only = false;
|
||||
u32 tmp, nr_servers;
|
||||
u32 tmp, nr_servers, vlflags;
|
||||
int i, ret;
|
||||
|
||||
_enter("");
|
||||
|
@ -55,6 +55,7 @@ static int afs_deliver_vl_get_entry_by_name_u(struct afs_call *call)
|
|||
new_only = true;
|
||||
}
|
||||
|
||||
vlflags = ntohl(uvldb->flags);
|
||||
for (i = 0; i < nr_servers; i++) {
|
||||
struct afs_uuid__xdr *xdr;
|
||||
struct afs_uuid *uuid;
|
||||
|
@ -64,12 +65,13 @@ static int afs_deliver_vl_get_entry_by_name_u(struct afs_call *call)
|
|||
if (tmp & AFS_VLSF_DONTUSE ||
|
||||
(new_only && !(tmp & AFS_VLSF_NEWREPSITE)))
|
||||
continue;
|
||||
if (tmp & AFS_VLSF_RWVOL)
|
||||
if (tmp & AFS_VLSF_RWVOL) {
|
||||
entry->fs_mask[i] |= AFS_VOL_VTM_RW;
|
||||
if (vlflags & AFS_VLF_BACKEXISTS)
|
||||
entry->fs_mask[i] |= AFS_VOL_VTM_BAK;
|
||||
}
|
||||
if (tmp & AFS_VLSF_ROVOL)
|
||||
entry->fs_mask[i] |= AFS_VOL_VTM_RO;
|
||||
if (tmp & AFS_VLSF_BACKVOL)
|
||||
entry->fs_mask[i] |= AFS_VOL_VTM_BAK;
|
||||
if (!entry->fs_mask[i])
|
||||
continue;
|
||||
|
||||
|
@ -89,15 +91,14 @@ static int afs_deliver_vl_get_entry_by_name_u(struct afs_call *call)
|
|||
for (i = 0; i < AFS_MAXTYPES; i++)
|
||||
entry->vid[i] = ntohl(uvldb->volumeId[i]);
|
||||
|
||||
tmp = ntohl(uvldb->flags);
|
||||
if (tmp & AFS_VLF_RWEXISTS)
|
||||
if (vlflags & AFS_VLF_RWEXISTS)
|
||||
__set_bit(AFS_VLDB_HAS_RW, &entry->flags);
|
||||
if (tmp & AFS_VLF_ROEXISTS)
|
||||
if (vlflags & AFS_VLF_ROEXISTS)
|
||||
__set_bit(AFS_VLDB_HAS_RO, &entry->flags);
|
||||
if (tmp & AFS_VLF_BACKEXISTS)
|
||||
if (vlflags & AFS_VLF_BACKEXISTS)
|
||||
__set_bit(AFS_VLDB_HAS_BAK, &entry->flags);
|
||||
|
||||
if (!(tmp & (AFS_VLF_RWEXISTS | AFS_VLF_ROEXISTS | AFS_VLF_BACKEXISTS))) {
|
||||
if (!(vlflags & (AFS_VLF_RWEXISTS | AFS_VLF_ROEXISTS | AFS_VLF_BACKEXISTS))) {
|
||||
entry->error = -ENOMEDIUM;
|
||||
__set_bit(AFS_VLDB_QUERY_ERROR, &entry->flags);
|
||||
}
|
||||
|
|
|
@ -178,6 +178,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode)
|
|||
mapping->a_ops = &empty_aops;
|
||||
mapping->host = inode;
|
||||
mapping->flags = 0;
|
||||
mapping->wb_err = 0;
|
||||
atomic_set(&mapping->i_mmap_writable, 0);
|
||||
mapping_set_gfp_mask(mapping, GFP_HIGHUSER_MOVABLE);
|
||||
mapping->private_data = NULL;
|
||||
|
|
|
@ -893,7 +893,7 @@ int __trace_bputs(unsigned long ip, const char *str)
|
|||
EXPORT_SYMBOL_GPL(__trace_bputs);
|
||||
|
||||
#ifdef CONFIG_TRACER_SNAPSHOT
|
||||
static void tracing_snapshot_instance(struct trace_array *tr)
|
||||
void tracing_snapshot_instance(struct trace_array *tr)
|
||||
{
|
||||
struct tracer *tracer = tr->current_trace;
|
||||
unsigned long flags;
|
||||
|
@ -949,7 +949,7 @@ static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
|
|||
struct trace_buffer *size_buf, int cpu_id);
|
||||
static void set_buffer_entries(struct trace_buffer *buf, unsigned long val);
|
||||
|
||||
static int alloc_snapshot(struct trace_array *tr)
|
||||
int tracing_alloc_snapshot_instance(struct trace_array *tr)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
@ -995,7 +995,7 @@ int tracing_alloc_snapshot(void)
|
|||
struct trace_array *tr = &global_trace;
|
||||
int ret;
|
||||
|
||||
ret = alloc_snapshot(tr);
|
||||
ret = tracing_alloc_snapshot_instance(tr);
|
||||
WARN_ON(ret < 0);
|
||||
|
||||
return ret;
|
||||
|
@ -5408,7 +5408,7 @@ static int tracing_set_tracer(struct trace_array *tr, const char *buf)
|
|||
|
||||
#ifdef CONFIG_TRACER_MAX_TRACE
|
||||
if (t->use_max_tr && !had_max_tr) {
|
||||
ret = alloc_snapshot(tr);
|
||||
ret = tracing_alloc_snapshot_instance(tr);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
}
|
||||
|
@ -6451,7 +6451,7 @@ tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
|
|||
}
|
||||
#endif
|
||||
if (!tr->allocated_snapshot) {
|
||||
ret = alloc_snapshot(tr);
|
||||
ret = tracing_alloc_snapshot_instance(tr);
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
|
@ -7179,7 +7179,7 @@ ftrace_trace_snapshot_callback(struct trace_array *tr, struct ftrace_hash *hash,
|
|||
return ret;
|
||||
|
||||
out_reg:
|
||||
ret = alloc_snapshot(tr);
|
||||
ret = tracing_alloc_snapshot_instance(tr);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
|
|
|
@ -1817,6 +1817,17 @@ static inline void __init trace_event_init(void) { }
|
|||
static inline void trace_event_eval_update(struct trace_eval_map **map, int len) { }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TRACER_SNAPSHOT
|
||||
void tracing_snapshot_instance(struct trace_array *tr);
|
||||
int tracing_alloc_snapshot_instance(struct trace_array *tr);
|
||||
#else
|
||||
static inline void tracing_snapshot_instance(struct trace_array *tr) { }
|
||||
static inline int tracing_alloc_snapshot_instance(struct trace_array *tr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern struct trace_iterator *tracepoint_print_iter;
|
||||
|
||||
#endif /* _LINUX_KERNEL_TRACE_H */
|
||||
|
|
|
@ -483,9 +483,10 @@ clear_event_triggers(struct trace_array *tr)
|
|||
struct trace_event_file *file;
|
||||
|
||||
list_for_each_entry(file, &tr->events, list) {
|
||||
struct event_trigger_data *data;
|
||||
list_for_each_entry_rcu(data, &file->triggers, list) {
|
||||
struct event_trigger_data *data, *n;
|
||||
list_for_each_entry_safe(data, n, &file->triggers, list) {
|
||||
trace_event_trigger_enable_disable(file, 0);
|
||||
list_del_rcu(&data->list);
|
||||
if (data->ops->free)
|
||||
data->ops->free(data->ops, data);
|
||||
}
|
||||
|
@ -642,6 +643,7 @@ event_trigger_callback(struct event_command *cmd_ops,
|
|||
trigger_data->count = -1;
|
||||
trigger_data->ops = trigger_ops;
|
||||
trigger_data->cmd_ops = cmd_ops;
|
||||
trigger_data->private_data = file;
|
||||
INIT_LIST_HEAD(&trigger_data->list);
|
||||
INIT_LIST_HEAD(&trigger_data->named_list);
|
||||
|
||||
|
@ -1053,7 +1055,12 @@ static void
|
|||
snapshot_trigger(struct event_trigger_data *data, void *rec,
|
||||
struct ring_buffer_event *event)
|
||||
{
|
||||
tracing_snapshot();
|
||||
struct trace_event_file *file = data->private_data;
|
||||
|
||||
if (file)
|
||||
tracing_snapshot_instance(file->tr);
|
||||
else
|
||||
tracing_snapshot();
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1076,7 +1083,7 @@ register_snapshot_trigger(char *glob, struct event_trigger_ops *ops,
|
|||
{
|
||||
int ret = register_trigger(glob, ops, data, file);
|
||||
|
||||
if (ret > 0 && tracing_alloc_snapshot() != 0) {
|
||||
if (ret > 0 && tracing_alloc_snapshot_instance(file->tr) != 0) {
|
||||
unregister_trigger(glob, ops, data, file);
|
||||
ret = 0;
|
||||
}
|
||||
|
|
|
@ -1494,7 +1494,7 @@ static int security_context_to_sid_core(struct selinux_state *state,
|
|||
scontext_len, &context, def_sid);
|
||||
if (rc == -EINVAL && force) {
|
||||
context.str = str;
|
||||
context.len = scontext_len;
|
||||
context.len = strlen(str) + 1;
|
||||
str = NULL;
|
||||
} else if (rc)
|
||||
goto out_unlock;
|
||||
|
|
|
@ -25,4 +25,4 @@ install : turbostat
|
|||
install -d $(DESTDIR)$(PREFIX)/bin
|
||||
install $(BUILD_OUTPUT)/turbostat $(DESTDIR)$(PREFIX)/bin/turbostat
|
||||
install -d $(DESTDIR)$(PREFIX)/share/man/man8
|
||||
install turbostat.8 $(DESTDIR)$(PREFIX)/share/man/man8
|
||||
install -m 644 turbostat.8 $(DESTDIR)$(PREFIX)/share/man/man8
|
||||
|
|
|
@ -54,9 +54,12 @@ name as necessary to disambiguate it from others is necessary. Note that option
|
|||
.PP
|
||||
\fB--cpu cpu-set\fP limit output to system summary plus the specified cpu-set. If cpu-set is the string "core", then the system summary plus the first CPU in each core are printed -- eg. subsequent HT siblings are not printed. Or if cpu-set is the string "package", then the system summary plus the first CPU in each package is printed. Otherwise, the system summary plus the specified set of CPUs are printed. The cpu-set is ordered from low to high, comma delimited with ".." and "-" permitted to denote a range. eg. 1,2,8,14..17,21-44
|
||||
.PP
|
||||
\fB--hide column\fP do not show the specified columns. May be invoked multiple times, or with a comma-separated list of column names. Use "--hide sysfs" to hide the sysfs statistics columns as a group.
|
||||
\fB--hide column\fP do not show the specified built-in columns. May be invoked multiple times, or with a comma-separated list of column names. Use "--hide sysfs" to hide the sysfs statistics columns as a group.
|
||||
.PP
|
||||
\fB--show column\fP show only the specified columns. May be invoked multiple times, or with a comma-separated list of column names. Use "--show sysfs" to show the sysfs statistics columns as a group.
|
||||
\fB--enable column\fP show the specified built-in columns, which are otherwise disabled, by default. Currently the only built-in counters disabled by default are "usec" and "Time_Of_Day_Seconds".
|
||||
The column name "all" can be used to enable all disabled-by-default built-in counters.
|
||||
.PP
|
||||
\fB--show column\fP show only the specified built-in columns. May be invoked multiple times, or with a comma-separated list of column names. Use "--show sysfs" to show the sysfs statistics columns as a group.
|
||||
.PP
|
||||
\fB--Dump\fP displays the raw counter values.
|
||||
.PP
|
||||
|
@ -64,6 +67,8 @@ name as necessary to disambiguate it from others is necessary. Note that option
|
|||
.PP
|
||||
\fB--interval seconds\fP overrides the default 5.0 second measurement interval.
|
||||
.PP
|
||||
\fB--num_iterations num\fP number of the measurement iterations.
|
||||
.PP
|
||||
\fB--out output_file\fP turbostat output is written to the specified output_file.
|
||||
The file is truncated if it already exists, and it is created if it does not exist.
|
||||
.PP
|
||||
|
@ -86,6 +91,8 @@ displays the statistics gathered since it was forked.
|
|||
The system configuration dump (if --quiet is not used) is followed by statistics. The first row of the statistics labels the content of each column (below). The second row of statistics is the system summary line. The system summary line has a '-' in the columns for the Package, Core, and CPU. The contents of the system summary line depends on the type of column. Columns that count items (eg. IRQ) show the sum across all CPUs in the system. Columns that show a percentage show the average across all CPUs in the system. Columns that dump raw MSR values simply show 0 in the summary. After the system summary row, each row describes a specific Package/Core/CPU. Note that if the --cpu parameter is used to limit which specific CPUs are displayed, turbostat will still collect statistics for all CPUs in the system and will still show the system summary for all CPUs in the system.
|
||||
.SH COLUMN DESCRIPTIONS
|
||||
.nf
|
||||
\fBusec\fP For each CPU, the number of microseconds elapsed during counter collection, including thread migration -- if any. This counter is disabled by default, and is enabled with "--enable usec", or --debug. On the summary row, usec refers to the total elapsed time to collect the counters on all cpus.
|
||||
\fBTime_Of_Day_Seconds\fP For each CPU, the gettimeofday(2) value (seconds.subsec since Epoch) when the counters ending the measurement interval were collected. This column is disabled by default, and can be enabled with "--enable Time_Of_Day_Seconds" or "--debug". On the summary row, Time_Of_Day_Seconds refers to the timestamp following collection of counters on the last CPU.
|
||||
\fBCore\fP processor core number. Note that multiple CPUs per core indicate support for Intel(R) Hyper-Threading Technology (HT).
|
||||
\fBCPU\fP Linux CPU (logical processor) number. Yes, it is okay that on many systems the CPUs are not listed in numerical order -- for efficiency reasons, turbostat runs in topology order, so HT siblings appear together.
|
||||
\fBPackage\fP processor package number -- not present on systems with a single processor package.
|
||||
|
@ -262,6 +269,21 @@ CPU PRF_CTRL
|
|||
|
||||
.fi
|
||||
|
||||
.SH INPUT
|
||||
|
||||
For interval-mode, turbostat will immediately end the current interval
|
||||
when it sees a newline on standard input.
|
||||
turbostat will then start the next interval.
|
||||
Control-C will be send a SIGINT to turbostat,
|
||||
which will immediately abort the program with no further processing.
|
||||
.SH SIGNALS
|
||||
|
||||
SIGINT will interrupt interval-mode.
|
||||
The end-of-interval data will be collected and displayed before turbostat exits.
|
||||
|
||||
SIGUSR1 will end current interval,
|
||||
end-of-interval data will be collected and displayed before turbostat
|
||||
starts a new interval.
|
||||
.SH NOTES
|
||||
|
||||
.B "turbostat "
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -24,5 +24,5 @@ install : x86_energy_perf_policy
|
|||
install -d $(DESTDIR)$(PREFIX)/bin
|
||||
install $(BUILD_OUTPUT)/x86_energy_perf_policy $(DESTDIR)$(PREFIX)/bin/x86_energy_perf_policy
|
||||
install -d $(DESTDIR)$(PREFIX)/share/man/man8
|
||||
install x86_energy_perf_policy.8 $(DESTDIR)$(PREFIX)/share/man/man8
|
||||
install -m 644 x86_energy_perf_policy.8 $(DESTDIR)$(PREFIX)/share/man/man8
|
||||
|
||||
|
|
Loading…
Reference in New Issue