X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fppc64%2Fkernel%2FpacaData.c;h=0e422831634506461364b6f5ef1d34c009957b94;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=d283f4897699835ca23ffc7ba478bb798bd2396c;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/arch/ppc64/kernel/pacaData.c b/arch/ppc64/kernel/pacaData.c index d283f4897..0e4228316 100644 --- a/arch/ppc64/kernel/pacaData.c +++ b/arch/ppc64/kernel/pacaData.c @@ -16,12 +16,24 @@ #include #include +#include #include #include struct naca_struct *naca; struct systemcfg *systemcfg; +/* This symbol is provided by the linker - let it fill in the paca + * field correctly */ +extern unsigned long __toc_start; + +/* Stack space used when we detect a bad kernel stack pointer, and + * early in SMP boots before relocation is enabled. + * + * ABI requires stack to be 128-byte aligned + */ +char emergency_stack[PAGE_SIZE * NR_CPUS] __attribute__((aligned(128))); + /* The Paca is an array with one entry per processor. Each contains an * ItLpPaca, which contains the information shared between the * hypervisor and Linux. Each also contains an ItLpRegSave area which @@ -34,22 +46,18 @@ struct systemcfg *systemcfg; */ #define PACAINITDATA(number,start,lpq,asrr,asrv) \ { \ - .xLpPacaPtr = &paca[number].xLpPaca, \ - .xLpRegSavePtr = &paca[number].xRegSav, \ + .lppaca_ptr = &paca[number].lppaca, \ + .reg_save_ptr = &paca[number].reg_save, \ .lock_token = 0x8000, \ - .xPacaIndex = (number), /* Paca Index */ \ + .paca_index = (number), /* Paca Index */ \ + .lpqueue_ptr = (lpq), /* &xItLpQueue, */ \ .default_decr = 0x00ff0000, /* Initial Decr */ \ - .xStab_data = { \ - .real = (asrr), /* Real pointer to segment table */ \ - .virt = (asrv), /* Virt pointer to segment table */ \ - .next_round_robin = 1, \ - }, \ - .lpQueuePtr = (lpq), /* &xItLpQueue, */ \ - /* .xRtas = { \ - .lock = SPIN_LOCK_UNLOCKED \ - }, */ \ - .xProcStart = (start), /* Processor start */ \ - .xLpPaca = { \ + .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL, \ + .stab_real = (asrr), /* Real pointer to segment table */ \ + .stab_addr = (asrv), /* Virt pointer to segment table */ \ + .emergency_sp = &emergency_stack[((number)+1) * PAGE_SIZE], \ + .cpu_start = (start), /* Processor start */ \ + .lppaca = { \ .xDesc = 0xd397d781, /* "LpPa" */ \ .xSize = sizeof(struct ItLpPaca), \ .xFPRegsInUse = 1, \ @@ -58,149 +66,147 @@ struct systemcfg *systemcfg; .xEndOfQuantum = 0xfffffffffffffffful, \ .xSLBCount = 64, \ }, \ - .xRegSav = { \ + .reg_save = { \ .xDesc = 0xd397d9e2, /* "LpRS" */ \ .xSize = sizeof(struct ItLpRegSave) \ }, \ - .exception_sp = \ - (&paca[number].exception_stack[0]) - EXC_FRAME_SIZE, \ } struct paca_struct paca[] __page_aligned = { #ifdef CONFIG_PPC_ISERIES PACAINITDATA( 0, 1, &xItLpQueue, 0, STAB0_VIRT_ADDR), #else - PACAINITDATA( 0, 1, 0, STAB0_PHYS_ADDR, STAB0_VIRT_ADDR), + PACAINITDATA( 0, 1, NULL, STAB0_PHYS_ADDR, STAB0_VIRT_ADDR), #endif - PACAINITDATA( 1, 0, 0, 0, 0), - PACAINITDATA( 2, 0, 0, 0, 0), - PACAINITDATA( 3, 0, 0, 0, 0), - PACAINITDATA( 4, 0, 0, 0, 0), - PACAINITDATA( 5, 0, 0, 0, 0), - PACAINITDATA( 6, 0, 0, 0, 0), - PACAINITDATA( 7, 0, 0, 0, 0), - PACAINITDATA( 8, 0, 0, 0, 0), - PACAINITDATA( 9, 0, 0, 0, 0), - PACAINITDATA(10, 0, 0, 0, 0), - PACAINITDATA(11, 0, 0, 0, 0), - PACAINITDATA(12, 0, 0, 0, 0), - PACAINITDATA(13, 0, 0, 0, 0), - PACAINITDATA(14, 0, 0, 0, 0), - PACAINITDATA(15, 0, 0, 0, 0), - PACAINITDATA(16, 0, 0, 0, 0), - PACAINITDATA(17, 0, 0, 0, 0), - PACAINITDATA(18, 0, 0, 0, 0), - PACAINITDATA(19, 0, 0, 0, 0), - PACAINITDATA(20, 0, 0, 0, 0), - PACAINITDATA(21, 0, 0, 0, 0), - PACAINITDATA(22, 0, 0, 0, 0), - PACAINITDATA(23, 0, 0, 0, 0), - PACAINITDATA(24, 0, 0, 0, 0), - PACAINITDATA(25, 0, 0, 0, 0), - PACAINITDATA(26, 0, 0, 0, 0), - PACAINITDATA(27, 0, 0, 0, 0), - PACAINITDATA(28, 0, 0, 0, 0), - PACAINITDATA(29, 0, 0, 0, 0), - PACAINITDATA(30, 0, 0, 0, 0), - PACAINITDATA(31, 0, 0, 0, 0), + PACAINITDATA( 1, 0, NULL, 0, 0), + PACAINITDATA( 2, 0, NULL, 0, 0), + PACAINITDATA( 3, 0, NULL, 0, 0), + PACAINITDATA( 4, 0, NULL, 0, 0), + PACAINITDATA( 5, 0, NULL, 0, 0), + PACAINITDATA( 6, 0, NULL, 0, 0), + PACAINITDATA( 7, 0, NULL, 0, 0), + PACAINITDATA( 8, 0, NULL, 0, 0), + PACAINITDATA( 9, 0, NULL, 0, 0), + PACAINITDATA(10, 0, NULL, 0, 0), + PACAINITDATA(11, 0, NULL, 0, 0), + PACAINITDATA(12, 0, NULL, 0, 0), + PACAINITDATA(13, 0, NULL, 0, 0), + PACAINITDATA(14, 0, NULL, 0, 0), + PACAINITDATA(15, 0, NULL, 0, 0), + PACAINITDATA(16, 0, NULL, 0, 0), + PACAINITDATA(17, 0, NULL, 0, 0), + PACAINITDATA(18, 0, NULL, 0, 0), + PACAINITDATA(19, 0, NULL, 0, 0), + PACAINITDATA(20, 0, NULL, 0, 0), + PACAINITDATA(21, 0, NULL, 0, 0), + PACAINITDATA(22, 0, NULL, 0, 0), + PACAINITDATA(23, 0, NULL, 0, 0), + PACAINITDATA(24, 0, NULL, 0, 0), + PACAINITDATA(25, 0, NULL, 0, 0), + PACAINITDATA(26, 0, NULL, 0, 0), + PACAINITDATA(27, 0, NULL, 0, 0), + PACAINITDATA(28, 0, NULL, 0, 0), + PACAINITDATA(29, 0, NULL, 0, 0), + PACAINITDATA(30, 0, NULL, 0, 0), + PACAINITDATA(31, 0, NULL, 0, 0), #if NR_CPUS > 32 - PACAINITDATA(32, 0, 0, 0, 0), - PACAINITDATA(33, 0, 0, 0, 0), - PACAINITDATA(34, 0, 0, 0, 0), - PACAINITDATA(35, 0, 0, 0, 0), - PACAINITDATA(36, 0, 0, 0, 0), - PACAINITDATA(37, 0, 0, 0, 0), - PACAINITDATA(38, 0, 0, 0, 0), - PACAINITDATA(39, 0, 0, 0, 0), - PACAINITDATA(40, 0, 0, 0, 0), - PACAINITDATA(41, 0, 0, 0, 0), - PACAINITDATA(42, 0, 0, 0, 0), - PACAINITDATA(43, 0, 0, 0, 0), - PACAINITDATA(44, 0, 0, 0, 0), - PACAINITDATA(45, 0, 0, 0, 0), - PACAINITDATA(46, 0, 0, 0, 0), - PACAINITDATA(47, 0, 0, 0, 0), - PACAINITDATA(48, 0, 0, 0, 0), - PACAINITDATA(49, 0, 0, 0, 0), - PACAINITDATA(50, 0, 0, 0, 0), - PACAINITDATA(51, 0, 0, 0, 0), - PACAINITDATA(52, 0, 0, 0, 0), - PACAINITDATA(53, 0, 0, 0, 0), - PACAINITDATA(54, 0, 0, 0, 0), - PACAINITDATA(55, 0, 0, 0, 0), - PACAINITDATA(56, 0, 0, 0, 0), - PACAINITDATA(57, 0, 0, 0, 0), - PACAINITDATA(58, 0, 0, 0, 0), - PACAINITDATA(59, 0, 0, 0, 0), - PACAINITDATA(60, 0, 0, 0, 0), - PACAINITDATA(61, 0, 0, 0, 0), - PACAINITDATA(62, 0, 0, 0, 0), - PACAINITDATA(63, 0, 0, 0, 0), + PACAINITDATA(32, 0, NULL, 0, 0), + PACAINITDATA(33, 0, NULL, 0, 0), + PACAINITDATA(34, 0, NULL, 0, 0), + PACAINITDATA(35, 0, NULL, 0, 0), + PACAINITDATA(36, 0, NULL, 0, 0), + PACAINITDATA(37, 0, NULL, 0, 0), + PACAINITDATA(38, 0, NULL, 0, 0), + PACAINITDATA(39, 0, NULL, 0, 0), + PACAINITDATA(40, 0, NULL, 0, 0), + PACAINITDATA(41, 0, NULL, 0, 0), + PACAINITDATA(42, 0, NULL, 0, 0), + PACAINITDATA(43, 0, NULL, 0, 0), + PACAINITDATA(44, 0, NULL, 0, 0), + PACAINITDATA(45, 0, NULL, 0, 0), + PACAINITDATA(46, 0, NULL, 0, 0), + PACAINITDATA(47, 0, NULL, 0, 0), + PACAINITDATA(48, 0, NULL, 0, 0), + PACAINITDATA(49, 0, NULL, 0, 0), + PACAINITDATA(50, 0, NULL, 0, 0), + PACAINITDATA(51, 0, NULL, 0, 0), + PACAINITDATA(52, 0, NULL, 0, 0), + PACAINITDATA(53, 0, NULL, 0, 0), + PACAINITDATA(54, 0, NULL, 0, 0), + PACAINITDATA(55, 0, NULL, 0, 0), + PACAINITDATA(56, 0, NULL, 0, 0), + PACAINITDATA(57, 0, NULL, 0, 0), + PACAINITDATA(58, 0, NULL, 0, 0), + PACAINITDATA(59, 0, NULL, 0, 0), + PACAINITDATA(60, 0, NULL, 0, 0), + PACAINITDATA(61, 0, NULL, 0, 0), + PACAINITDATA(62, 0, NULL, 0, 0), + PACAINITDATA(63, 0, NULL, 0, 0), #if NR_CPUS > 64 - PACAINITDATA(64, 0, 0, 0, 0), - PACAINITDATA(65, 0, 0, 0, 0), - PACAINITDATA(66, 0, 0, 0, 0), - PACAINITDATA(67, 0, 0, 0, 0), - PACAINITDATA(68, 0, 0, 0, 0), - PACAINITDATA(69, 0, 0, 0, 0), - PACAINITDATA(70, 0, 0, 0, 0), - PACAINITDATA(71, 0, 0, 0, 0), - PACAINITDATA(72, 0, 0, 0, 0), - PACAINITDATA(73, 0, 0, 0, 0), - PACAINITDATA(74, 0, 0, 0, 0), - PACAINITDATA(75, 0, 0, 0, 0), - PACAINITDATA(76, 0, 0, 0, 0), - PACAINITDATA(77, 0, 0, 0, 0), - PACAINITDATA(78, 0, 0, 0, 0), - PACAINITDATA(79, 0, 0, 0, 0), - PACAINITDATA(80, 0, 0, 0, 0), - PACAINITDATA(81, 0, 0, 0, 0), - PACAINITDATA(82, 0, 0, 0, 0), - PACAINITDATA(83, 0, 0, 0, 0), - PACAINITDATA(84, 0, 0, 0, 0), - PACAINITDATA(85, 0, 0, 0, 0), - PACAINITDATA(86, 0, 0, 0, 0), - PACAINITDATA(87, 0, 0, 0, 0), - PACAINITDATA(88, 0, 0, 0, 0), - PACAINITDATA(89, 0, 0, 0, 0), - PACAINITDATA(90, 0, 0, 0, 0), - PACAINITDATA(91, 0, 0, 0, 0), - PACAINITDATA(92, 0, 0, 0, 0), - PACAINITDATA(93, 0, 0, 0, 0), - PACAINITDATA(94, 0, 0, 0, 0), - PACAINITDATA(95, 0, 0, 0, 0), - PACAINITDATA(96, 0, 0, 0, 0), - PACAINITDATA(97, 0, 0, 0, 0), - PACAINITDATA(98, 0, 0, 0, 0), - PACAINITDATA(99, 0, 0, 0, 0), - PACAINITDATA(100, 0, 0, 0, 0), - PACAINITDATA(101, 0, 0, 0, 0), - PACAINITDATA(102, 0, 0, 0, 0), - PACAINITDATA(103, 0, 0, 0, 0), - PACAINITDATA(104, 0, 0, 0, 0), - PACAINITDATA(105, 0, 0, 0, 0), - PACAINITDATA(106, 0, 0, 0, 0), - PACAINITDATA(107, 0, 0, 0, 0), - PACAINITDATA(108, 0, 0, 0, 0), - PACAINITDATA(109, 0, 0, 0, 0), - PACAINITDATA(110, 0, 0, 0, 0), - PACAINITDATA(111, 0, 0, 0, 0), - PACAINITDATA(112, 0, 0, 0, 0), - PACAINITDATA(113, 0, 0, 0, 0), - PACAINITDATA(114, 0, 0, 0, 0), - PACAINITDATA(115, 0, 0, 0, 0), - PACAINITDATA(116, 0, 0, 0, 0), - PACAINITDATA(117, 0, 0, 0, 0), - PACAINITDATA(118, 0, 0, 0, 0), - PACAINITDATA(119, 0, 0, 0, 0), - PACAINITDATA(120, 0, 0, 0, 0), - PACAINITDATA(121, 0, 0, 0, 0), - PACAINITDATA(122, 0, 0, 0, 0), - PACAINITDATA(123, 0, 0, 0, 0), - PACAINITDATA(124, 0, 0, 0, 0), - PACAINITDATA(125, 0, 0, 0, 0), - PACAINITDATA(126, 0, 0, 0, 0), - PACAINITDATA(127, 0, 0, 0, 0), + PACAINITDATA(64, 0, NULL, 0, 0), + PACAINITDATA(65, 0, NULL, 0, 0), + PACAINITDATA(66, 0, NULL, 0, 0), + PACAINITDATA(67, 0, NULL, 0, 0), + PACAINITDATA(68, 0, NULL, 0, 0), + PACAINITDATA(69, 0, NULL, 0, 0), + PACAINITDATA(70, 0, NULL, 0, 0), + PACAINITDATA(71, 0, NULL, 0, 0), + PACAINITDATA(72, 0, NULL, 0, 0), + PACAINITDATA(73, 0, NULL, 0, 0), + PACAINITDATA(74, 0, NULL, 0, 0), + PACAINITDATA(75, 0, NULL, 0, 0), + PACAINITDATA(76, 0, NULL, 0, 0), + PACAINITDATA(77, 0, NULL, 0, 0), + PACAINITDATA(78, 0, NULL, 0, 0), + PACAINITDATA(79, 0, NULL, 0, 0), + PACAINITDATA(80, 0, NULL, 0, 0), + PACAINITDATA(81, 0, NULL, 0, 0), + PACAINITDATA(82, 0, NULL, 0, 0), + PACAINITDATA(83, 0, NULL, 0, 0), + PACAINITDATA(84, 0, NULL, 0, 0), + PACAINITDATA(85, 0, NULL, 0, 0), + PACAINITDATA(86, 0, NULL, 0, 0), + PACAINITDATA(87, 0, NULL, 0, 0), + PACAINITDATA(88, 0, NULL, 0, 0), + PACAINITDATA(89, 0, NULL, 0, 0), + PACAINITDATA(90, 0, NULL, 0, 0), + PACAINITDATA(91, 0, NULL, 0, 0), + PACAINITDATA(92, 0, NULL, 0, 0), + PACAINITDATA(93, 0, NULL, 0, 0), + PACAINITDATA(94, 0, NULL, 0, 0), + PACAINITDATA(95, 0, NULL, 0, 0), + PACAINITDATA(96, 0, NULL, 0, 0), + PACAINITDATA(97, 0, NULL, 0, 0), + PACAINITDATA(98, 0, NULL, 0, 0), + PACAINITDATA(99, 0, NULL, 0, 0), + PACAINITDATA(100, 0, NULL, 0, 0), + PACAINITDATA(101, 0, NULL, 0, 0), + PACAINITDATA(102, 0, NULL, 0, 0), + PACAINITDATA(103, 0, NULL, 0, 0), + PACAINITDATA(104, 0, NULL, 0, 0), + PACAINITDATA(105, 0, NULL, 0, 0), + PACAINITDATA(106, 0, NULL, 0, 0), + PACAINITDATA(107, 0, NULL, 0, 0), + PACAINITDATA(108, 0, NULL, 0, 0), + PACAINITDATA(109, 0, NULL, 0, 0), + PACAINITDATA(110, 0, NULL, 0, 0), + PACAINITDATA(111, 0, NULL, 0, 0), + PACAINITDATA(112, 0, NULL, 0, 0), + PACAINITDATA(113, 0, NULL, 0, 0), + PACAINITDATA(114, 0, NULL, 0, 0), + PACAINITDATA(115, 0, NULL, 0, 0), + PACAINITDATA(116, 0, NULL, 0, 0), + PACAINITDATA(117, 0, NULL, 0, 0), + PACAINITDATA(118, 0, NULL, 0, 0), + PACAINITDATA(119, 0, NULL, 0, 0), + PACAINITDATA(120, 0, NULL, 0, 0), + PACAINITDATA(121, 0, NULL, 0, 0), + PACAINITDATA(122, 0, NULL, 0, 0), + PACAINITDATA(123, 0, NULL, 0, 0), + PACAINITDATA(124, 0, NULL, 0, 0), + PACAINITDATA(125, 0, NULL, 0, 0), + PACAINITDATA(126, 0, NULL, 0, 0), + PACAINITDATA(127, 0, NULL, 0, 0), #endif #endif };