Before this patch, the TOC code used a pre-allocated stack of 16kb for each possible CPU. That space overhead was the reason why the TOC feature wasn't enabled by default for 32-bit kernels. This patch rewrites the TOC code to use a per-cpu stack. That way we use much less memory now and as such we enable the TOC feature by default on all kernels. Additionally the dump of the registers and the stacktrace wasn't serialized, which led to multiple CPUs printing the stack backtrace at once which rendered the output unreadable. Now the backtraces are nicely serialized by a lock. Signed-off-by: Helge Deller <deller@gmx.de>
272 lines
14 KiB
C
272 lines
14 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Generate definitions needed by assembly language modules.
|
|
* This code generates raw asm output which is post-processed to extract
|
|
* and format the required data.
|
|
*
|
|
* Copyright (C) 2000-2001 John Marvin <jsm at parisc-linux.org>
|
|
* Copyright (C) 2000 David Huggins-Daines <dhd with pobox.org>
|
|
* Copyright (C) 2000 Sam Creasey <sammy@sammy.net>
|
|
* Copyright (C) 2000 Grant Grundler <grundler with parisc-linux.org>
|
|
* Copyright (C) 2001 Paul Bame <bame at parisc-linux.org>
|
|
* Copyright (C) 2001 Richard Hirst <rhirst at parisc-linux.org>
|
|
* Copyright (C) 2002 Randolph Chung <tausq with parisc-linux.org>
|
|
* Copyright (C) 2003 James Bottomley <jejb at parisc-linux.org>
|
|
*/
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/thread_info.h>
|
|
#include <linux/ptrace.h>
|
|
#include <linux/hardirq.h>
|
|
#include <linux/kbuild.h>
|
|
#include <linux/pgtable.h>
|
|
|
|
#include <asm/assembly.h>
|
|
#include <asm/ptrace.h>
|
|
#include <asm/processor.h>
|
|
#include <asm/pdc.h>
|
|
#include <linux/uaccess.h>
|
|
|
|
/* Add FRAME_SIZE to the size x and align it to y. All definitions
|
|
* that use align_frame will include space for a frame.
|
|
*/
|
|
#define align_frame(x,y) (((x)+FRAME_SIZE+(y)-1) - (((x)+(y)-1)%(y)))
|
|
|
|
int main(void)
|
|
{
|
|
DEFINE(TASK_TI_FLAGS, offsetof(struct task_struct, thread_info.flags));
|
|
#ifdef CONFIG_SMP
|
|
DEFINE(TASK_TI_CPU, offsetof(struct task_struct, thread_info.cpu));
|
|
#endif
|
|
DEFINE(TASK_STACK, offsetof(struct task_struct, stack));
|
|
DEFINE(TASK_PAGEFAULT_DISABLED, offsetof(struct task_struct, pagefault_disabled));
|
|
BLANK();
|
|
DEFINE(TASK_REGS, offsetof(struct task_struct, thread.regs));
|
|
DEFINE(TASK_PT_PSW, offsetof(struct task_struct, thread.regs.gr[ 0]));
|
|
DEFINE(TASK_PT_GR1, offsetof(struct task_struct, thread.regs.gr[ 1]));
|
|
DEFINE(TASK_PT_GR2, offsetof(struct task_struct, thread.regs.gr[ 2]));
|
|
DEFINE(TASK_PT_GR3, offsetof(struct task_struct, thread.regs.gr[ 3]));
|
|
DEFINE(TASK_PT_GR4, offsetof(struct task_struct, thread.regs.gr[ 4]));
|
|
DEFINE(TASK_PT_GR5, offsetof(struct task_struct, thread.regs.gr[ 5]));
|
|
DEFINE(TASK_PT_GR6, offsetof(struct task_struct, thread.regs.gr[ 6]));
|
|
DEFINE(TASK_PT_GR7, offsetof(struct task_struct, thread.regs.gr[ 7]));
|
|
DEFINE(TASK_PT_GR8, offsetof(struct task_struct, thread.regs.gr[ 8]));
|
|
DEFINE(TASK_PT_GR9, offsetof(struct task_struct, thread.regs.gr[ 9]));
|
|
DEFINE(TASK_PT_GR10, offsetof(struct task_struct, thread.regs.gr[10]));
|
|
DEFINE(TASK_PT_GR11, offsetof(struct task_struct, thread.regs.gr[11]));
|
|
DEFINE(TASK_PT_GR12, offsetof(struct task_struct, thread.regs.gr[12]));
|
|
DEFINE(TASK_PT_GR13, offsetof(struct task_struct, thread.regs.gr[13]));
|
|
DEFINE(TASK_PT_GR14, offsetof(struct task_struct, thread.regs.gr[14]));
|
|
DEFINE(TASK_PT_GR15, offsetof(struct task_struct, thread.regs.gr[15]));
|
|
DEFINE(TASK_PT_GR16, offsetof(struct task_struct, thread.regs.gr[16]));
|
|
DEFINE(TASK_PT_GR17, offsetof(struct task_struct, thread.regs.gr[17]));
|
|
DEFINE(TASK_PT_GR18, offsetof(struct task_struct, thread.regs.gr[18]));
|
|
DEFINE(TASK_PT_GR19, offsetof(struct task_struct, thread.regs.gr[19]));
|
|
DEFINE(TASK_PT_GR20, offsetof(struct task_struct, thread.regs.gr[20]));
|
|
DEFINE(TASK_PT_GR21, offsetof(struct task_struct, thread.regs.gr[21]));
|
|
DEFINE(TASK_PT_GR22, offsetof(struct task_struct, thread.regs.gr[22]));
|
|
DEFINE(TASK_PT_GR23, offsetof(struct task_struct, thread.regs.gr[23]));
|
|
DEFINE(TASK_PT_GR24, offsetof(struct task_struct, thread.regs.gr[24]));
|
|
DEFINE(TASK_PT_GR25, offsetof(struct task_struct, thread.regs.gr[25]));
|
|
DEFINE(TASK_PT_GR26, offsetof(struct task_struct, thread.regs.gr[26]));
|
|
DEFINE(TASK_PT_GR27, offsetof(struct task_struct, thread.regs.gr[27]));
|
|
DEFINE(TASK_PT_GR28, offsetof(struct task_struct, thread.regs.gr[28]));
|
|
DEFINE(TASK_PT_GR29, offsetof(struct task_struct, thread.regs.gr[29]));
|
|
DEFINE(TASK_PT_GR30, offsetof(struct task_struct, thread.regs.gr[30]));
|
|
DEFINE(TASK_PT_GR31, offsetof(struct task_struct, thread.regs.gr[31]));
|
|
DEFINE(TASK_PT_FR0, offsetof(struct task_struct, thread.regs.fr[ 0]));
|
|
DEFINE(TASK_PT_FR1, offsetof(struct task_struct, thread.regs.fr[ 1]));
|
|
DEFINE(TASK_PT_FR2, offsetof(struct task_struct, thread.regs.fr[ 2]));
|
|
DEFINE(TASK_PT_FR3, offsetof(struct task_struct, thread.regs.fr[ 3]));
|
|
DEFINE(TASK_PT_FR4, offsetof(struct task_struct, thread.regs.fr[ 4]));
|
|
DEFINE(TASK_PT_FR5, offsetof(struct task_struct, thread.regs.fr[ 5]));
|
|
DEFINE(TASK_PT_FR6, offsetof(struct task_struct, thread.regs.fr[ 6]));
|
|
DEFINE(TASK_PT_FR7, offsetof(struct task_struct, thread.regs.fr[ 7]));
|
|
DEFINE(TASK_PT_FR8, offsetof(struct task_struct, thread.regs.fr[ 8]));
|
|
DEFINE(TASK_PT_FR9, offsetof(struct task_struct, thread.regs.fr[ 9]));
|
|
DEFINE(TASK_PT_FR10, offsetof(struct task_struct, thread.regs.fr[10]));
|
|
DEFINE(TASK_PT_FR11, offsetof(struct task_struct, thread.regs.fr[11]));
|
|
DEFINE(TASK_PT_FR12, offsetof(struct task_struct, thread.regs.fr[12]));
|
|
DEFINE(TASK_PT_FR13, offsetof(struct task_struct, thread.regs.fr[13]));
|
|
DEFINE(TASK_PT_FR14, offsetof(struct task_struct, thread.regs.fr[14]));
|
|
DEFINE(TASK_PT_FR15, offsetof(struct task_struct, thread.regs.fr[15]));
|
|
DEFINE(TASK_PT_FR16, offsetof(struct task_struct, thread.regs.fr[16]));
|
|
DEFINE(TASK_PT_FR17, offsetof(struct task_struct, thread.regs.fr[17]));
|
|
DEFINE(TASK_PT_FR18, offsetof(struct task_struct, thread.regs.fr[18]));
|
|
DEFINE(TASK_PT_FR19, offsetof(struct task_struct, thread.regs.fr[19]));
|
|
DEFINE(TASK_PT_FR20, offsetof(struct task_struct, thread.regs.fr[20]));
|
|
DEFINE(TASK_PT_FR21, offsetof(struct task_struct, thread.regs.fr[21]));
|
|
DEFINE(TASK_PT_FR22, offsetof(struct task_struct, thread.regs.fr[22]));
|
|
DEFINE(TASK_PT_FR23, offsetof(struct task_struct, thread.regs.fr[23]));
|
|
DEFINE(TASK_PT_FR24, offsetof(struct task_struct, thread.regs.fr[24]));
|
|
DEFINE(TASK_PT_FR25, offsetof(struct task_struct, thread.regs.fr[25]));
|
|
DEFINE(TASK_PT_FR26, offsetof(struct task_struct, thread.regs.fr[26]));
|
|
DEFINE(TASK_PT_FR27, offsetof(struct task_struct, thread.regs.fr[27]));
|
|
DEFINE(TASK_PT_FR28, offsetof(struct task_struct, thread.regs.fr[28]));
|
|
DEFINE(TASK_PT_FR29, offsetof(struct task_struct, thread.regs.fr[29]));
|
|
DEFINE(TASK_PT_FR30, offsetof(struct task_struct, thread.regs.fr[30]));
|
|
DEFINE(TASK_PT_FR31, offsetof(struct task_struct, thread.regs.fr[31]));
|
|
DEFINE(TASK_PT_SR0, offsetof(struct task_struct, thread.regs.sr[ 0]));
|
|
DEFINE(TASK_PT_SR1, offsetof(struct task_struct, thread.regs.sr[ 1]));
|
|
DEFINE(TASK_PT_SR2, offsetof(struct task_struct, thread.regs.sr[ 2]));
|
|
DEFINE(TASK_PT_SR3, offsetof(struct task_struct, thread.regs.sr[ 3]));
|
|
DEFINE(TASK_PT_SR4, offsetof(struct task_struct, thread.regs.sr[ 4]));
|
|
DEFINE(TASK_PT_SR5, offsetof(struct task_struct, thread.regs.sr[ 5]));
|
|
DEFINE(TASK_PT_SR6, offsetof(struct task_struct, thread.regs.sr[ 6]));
|
|
DEFINE(TASK_PT_SR7, offsetof(struct task_struct, thread.regs.sr[ 7]));
|
|
DEFINE(TASK_PT_IASQ0, offsetof(struct task_struct, thread.regs.iasq[0]));
|
|
DEFINE(TASK_PT_IASQ1, offsetof(struct task_struct, thread.regs.iasq[1]));
|
|
DEFINE(TASK_PT_IAOQ0, offsetof(struct task_struct, thread.regs.iaoq[0]));
|
|
DEFINE(TASK_PT_IAOQ1, offsetof(struct task_struct, thread.regs.iaoq[1]));
|
|
DEFINE(TASK_PT_CR27, offsetof(struct task_struct, thread.regs.cr27));
|
|
DEFINE(TASK_PT_ORIG_R28, offsetof(struct task_struct, thread.regs.orig_r28));
|
|
DEFINE(TASK_PT_KSP, offsetof(struct task_struct, thread.regs.ksp));
|
|
DEFINE(TASK_PT_KPC, offsetof(struct task_struct, thread.regs.kpc));
|
|
DEFINE(TASK_PT_SAR, offsetof(struct task_struct, thread.regs.sar));
|
|
DEFINE(TASK_PT_IIR, offsetof(struct task_struct, thread.regs.iir));
|
|
DEFINE(TASK_PT_ISR, offsetof(struct task_struct, thread.regs.isr));
|
|
DEFINE(TASK_PT_IOR, offsetof(struct task_struct, thread.regs.ior));
|
|
BLANK();
|
|
DEFINE(PT_PSW, offsetof(struct pt_regs, gr[ 0]));
|
|
DEFINE(PT_GR1, offsetof(struct pt_regs, gr[ 1]));
|
|
DEFINE(PT_GR2, offsetof(struct pt_regs, gr[ 2]));
|
|
DEFINE(PT_GR3, offsetof(struct pt_regs, gr[ 3]));
|
|
DEFINE(PT_GR4, offsetof(struct pt_regs, gr[ 4]));
|
|
DEFINE(PT_GR5, offsetof(struct pt_regs, gr[ 5]));
|
|
DEFINE(PT_GR6, offsetof(struct pt_regs, gr[ 6]));
|
|
DEFINE(PT_GR7, offsetof(struct pt_regs, gr[ 7]));
|
|
DEFINE(PT_GR8, offsetof(struct pt_regs, gr[ 8]));
|
|
DEFINE(PT_GR9, offsetof(struct pt_regs, gr[ 9]));
|
|
DEFINE(PT_GR10, offsetof(struct pt_regs, gr[10]));
|
|
DEFINE(PT_GR11, offsetof(struct pt_regs, gr[11]));
|
|
DEFINE(PT_GR12, offsetof(struct pt_regs, gr[12]));
|
|
DEFINE(PT_GR13, offsetof(struct pt_regs, gr[13]));
|
|
DEFINE(PT_GR14, offsetof(struct pt_regs, gr[14]));
|
|
DEFINE(PT_GR15, offsetof(struct pt_regs, gr[15]));
|
|
DEFINE(PT_GR16, offsetof(struct pt_regs, gr[16]));
|
|
DEFINE(PT_GR17, offsetof(struct pt_regs, gr[17]));
|
|
DEFINE(PT_GR18, offsetof(struct pt_regs, gr[18]));
|
|
DEFINE(PT_GR19, offsetof(struct pt_regs, gr[19]));
|
|
DEFINE(PT_GR20, offsetof(struct pt_regs, gr[20]));
|
|
DEFINE(PT_GR21, offsetof(struct pt_regs, gr[21]));
|
|
DEFINE(PT_GR22, offsetof(struct pt_regs, gr[22]));
|
|
DEFINE(PT_GR23, offsetof(struct pt_regs, gr[23]));
|
|
DEFINE(PT_GR24, offsetof(struct pt_regs, gr[24]));
|
|
DEFINE(PT_GR25, offsetof(struct pt_regs, gr[25]));
|
|
DEFINE(PT_GR26, offsetof(struct pt_regs, gr[26]));
|
|
DEFINE(PT_GR27, offsetof(struct pt_regs, gr[27]));
|
|
DEFINE(PT_GR28, offsetof(struct pt_regs, gr[28]));
|
|
DEFINE(PT_GR29, offsetof(struct pt_regs, gr[29]));
|
|
DEFINE(PT_GR30, offsetof(struct pt_regs, gr[30]));
|
|
DEFINE(PT_GR31, offsetof(struct pt_regs, gr[31]));
|
|
DEFINE(PT_FR0, offsetof(struct pt_regs, fr[ 0]));
|
|
DEFINE(PT_FR1, offsetof(struct pt_regs, fr[ 1]));
|
|
DEFINE(PT_FR2, offsetof(struct pt_regs, fr[ 2]));
|
|
DEFINE(PT_FR3, offsetof(struct pt_regs, fr[ 3]));
|
|
DEFINE(PT_FR4, offsetof(struct pt_regs, fr[ 4]));
|
|
DEFINE(PT_FR5, offsetof(struct pt_regs, fr[ 5]));
|
|
DEFINE(PT_FR6, offsetof(struct pt_regs, fr[ 6]));
|
|
DEFINE(PT_FR7, offsetof(struct pt_regs, fr[ 7]));
|
|
DEFINE(PT_FR8, offsetof(struct pt_regs, fr[ 8]));
|
|
DEFINE(PT_FR9, offsetof(struct pt_regs, fr[ 9]));
|
|
DEFINE(PT_FR10, offsetof(struct pt_regs, fr[10]));
|
|
DEFINE(PT_FR11, offsetof(struct pt_regs, fr[11]));
|
|
DEFINE(PT_FR12, offsetof(struct pt_regs, fr[12]));
|
|
DEFINE(PT_FR13, offsetof(struct pt_regs, fr[13]));
|
|
DEFINE(PT_FR14, offsetof(struct pt_regs, fr[14]));
|
|
DEFINE(PT_FR15, offsetof(struct pt_regs, fr[15]));
|
|
DEFINE(PT_FR16, offsetof(struct pt_regs, fr[16]));
|
|
DEFINE(PT_FR17, offsetof(struct pt_regs, fr[17]));
|
|
DEFINE(PT_FR18, offsetof(struct pt_regs, fr[18]));
|
|
DEFINE(PT_FR19, offsetof(struct pt_regs, fr[19]));
|
|
DEFINE(PT_FR20, offsetof(struct pt_regs, fr[20]));
|
|
DEFINE(PT_FR21, offsetof(struct pt_regs, fr[21]));
|
|
DEFINE(PT_FR22, offsetof(struct pt_regs, fr[22]));
|
|
DEFINE(PT_FR23, offsetof(struct pt_regs, fr[23]));
|
|
DEFINE(PT_FR24, offsetof(struct pt_regs, fr[24]));
|
|
DEFINE(PT_FR25, offsetof(struct pt_regs, fr[25]));
|
|
DEFINE(PT_FR26, offsetof(struct pt_regs, fr[26]));
|
|
DEFINE(PT_FR27, offsetof(struct pt_regs, fr[27]));
|
|
DEFINE(PT_FR28, offsetof(struct pt_regs, fr[28]));
|
|
DEFINE(PT_FR29, offsetof(struct pt_regs, fr[29]));
|
|
DEFINE(PT_FR30, offsetof(struct pt_regs, fr[30]));
|
|
DEFINE(PT_FR31, offsetof(struct pt_regs, fr[31]));
|
|
DEFINE(PT_SR0, offsetof(struct pt_regs, sr[ 0]));
|
|
DEFINE(PT_SR1, offsetof(struct pt_regs, sr[ 1]));
|
|
DEFINE(PT_SR2, offsetof(struct pt_regs, sr[ 2]));
|
|
DEFINE(PT_SR3, offsetof(struct pt_regs, sr[ 3]));
|
|
DEFINE(PT_SR4, offsetof(struct pt_regs, sr[ 4]));
|
|
DEFINE(PT_SR5, offsetof(struct pt_regs, sr[ 5]));
|
|
DEFINE(PT_SR6, offsetof(struct pt_regs, sr[ 6]));
|
|
DEFINE(PT_SR7, offsetof(struct pt_regs, sr[ 7]));
|
|
DEFINE(PT_IASQ0, offsetof(struct pt_regs, iasq[0]));
|
|
DEFINE(PT_IASQ1, offsetof(struct pt_regs, iasq[1]));
|
|
DEFINE(PT_IAOQ0, offsetof(struct pt_regs, iaoq[0]));
|
|
DEFINE(PT_IAOQ1, offsetof(struct pt_regs, iaoq[1]));
|
|
DEFINE(PT_CR27, offsetof(struct pt_regs, cr27));
|
|
DEFINE(PT_ORIG_R28, offsetof(struct pt_regs, orig_r28));
|
|
DEFINE(PT_KSP, offsetof(struct pt_regs, ksp));
|
|
DEFINE(PT_KPC, offsetof(struct pt_regs, kpc));
|
|
DEFINE(PT_SAR, offsetof(struct pt_regs, sar));
|
|
DEFINE(PT_IIR, offsetof(struct pt_regs, iir));
|
|
DEFINE(PT_ISR, offsetof(struct pt_regs, isr));
|
|
DEFINE(PT_IOR, offsetof(struct pt_regs, ior));
|
|
/* PT_SZ_ALGN includes space for a stack frame. */
|
|
DEFINE(PT_SZ_ALGN, align_frame(sizeof(struct pt_regs), FRAME_ALIGN));
|
|
BLANK();
|
|
DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
|
|
DEFINE(TI_PRE_COUNT, offsetof(struct task_struct, thread_info.preempt_count));
|
|
BLANK();
|
|
DEFINE(ICACHE_BASE, offsetof(struct pdc_cache_info, ic_base));
|
|
DEFINE(ICACHE_STRIDE, offsetof(struct pdc_cache_info, ic_stride));
|
|
DEFINE(ICACHE_COUNT, offsetof(struct pdc_cache_info, ic_count));
|
|
DEFINE(ICACHE_LOOP, offsetof(struct pdc_cache_info, ic_loop));
|
|
DEFINE(DCACHE_BASE, offsetof(struct pdc_cache_info, dc_base));
|
|
DEFINE(DCACHE_STRIDE, offsetof(struct pdc_cache_info, dc_stride));
|
|
DEFINE(DCACHE_COUNT, offsetof(struct pdc_cache_info, dc_count));
|
|
DEFINE(DCACHE_LOOP, offsetof(struct pdc_cache_info, dc_loop));
|
|
DEFINE(ITLB_SID_BASE, offsetof(struct pdc_cache_info, it_sp_base));
|
|
DEFINE(ITLB_SID_STRIDE, offsetof(struct pdc_cache_info, it_sp_stride));
|
|
DEFINE(ITLB_SID_COUNT, offsetof(struct pdc_cache_info, it_sp_count));
|
|
DEFINE(ITLB_OFF_BASE, offsetof(struct pdc_cache_info, it_off_base));
|
|
DEFINE(ITLB_OFF_STRIDE, offsetof(struct pdc_cache_info, it_off_stride));
|
|
DEFINE(ITLB_OFF_COUNT, offsetof(struct pdc_cache_info, it_off_count));
|
|
DEFINE(ITLB_LOOP, offsetof(struct pdc_cache_info, it_loop));
|
|
DEFINE(DTLB_SID_BASE, offsetof(struct pdc_cache_info, dt_sp_base));
|
|
DEFINE(DTLB_SID_STRIDE, offsetof(struct pdc_cache_info, dt_sp_stride));
|
|
DEFINE(DTLB_SID_COUNT, offsetof(struct pdc_cache_info, dt_sp_count));
|
|
DEFINE(DTLB_OFF_BASE, offsetof(struct pdc_cache_info, dt_off_base));
|
|
DEFINE(DTLB_OFF_STRIDE, offsetof(struct pdc_cache_info, dt_off_stride));
|
|
DEFINE(DTLB_OFF_COUNT, offsetof(struct pdc_cache_info, dt_off_count));
|
|
DEFINE(DTLB_LOOP, offsetof(struct pdc_cache_info, dt_loop));
|
|
BLANK();
|
|
DEFINE(TIF_BLOCKSTEP_PA_BIT, 31-TIF_BLOCKSTEP);
|
|
DEFINE(TIF_SINGLESTEP_PA_BIT, 31-TIF_SINGLESTEP);
|
|
BLANK();
|
|
DEFINE(ASM_PMD_SHIFT, PMD_SHIFT);
|
|
DEFINE(ASM_PGDIR_SHIFT, PGDIR_SHIFT);
|
|
DEFINE(ASM_BITS_PER_PGD, BITS_PER_PGD);
|
|
DEFINE(ASM_BITS_PER_PMD, BITS_PER_PMD);
|
|
DEFINE(ASM_BITS_PER_PTE, BITS_PER_PTE);
|
|
DEFINE(ASM_PMD_ENTRY, ((PAGE_OFFSET & PMD_MASK) >> PMD_SHIFT));
|
|
DEFINE(ASM_PGD_ENTRY, PAGE_OFFSET >> PGDIR_SHIFT);
|
|
DEFINE(ASM_PGD_ENTRY_SIZE, PGD_ENTRY_SIZE);
|
|
DEFINE(ASM_PMD_ENTRY_SIZE, PMD_ENTRY_SIZE);
|
|
DEFINE(ASM_PTE_ENTRY_SIZE, PTE_ENTRY_SIZE);
|
|
DEFINE(ASM_PFN_PTE_SHIFT, PFN_PTE_SHIFT);
|
|
DEFINE(ASM_PT_INITIAL, PT_INITIAL);
|
|
BLANK();
|
|
/* HUGEPAGE_SIZE is only used in vmlinux.lds.S to align kernel text
|
|
* and kernel data on physical huge pages */
|
|
#ifdef CONFIG_HUGETLB_PAGE
|
|
DEFINE(HUGEPAGE_SIZE, 1UL << REAL_HPAGE_SHIFT);
|
|
#else
|
|
DEFINE(HUGEPAGE_SIZE, PAGE_SIZE);
|
|
#endif
|
|
BLANK();
|
|
DEFINE(ASM_PDC_RESULT_SIZE, NUM_PDC_RESULT * sizeof(unsigned long));
|
|
BLANK();
|
|
return 0;
|
|
}
|