forked from Minki/linux
powerpc fixes for 4.8 #5
- Don't alias user region to other regions below PAGE_OFFSET from Paul Mackerras - Fix again csum_partial_copy_generic() on 32-bit from Christophe Leroy - Fix corrupted PE allocation bitmap on releasing PE from Gavin Shan Fixes for code merged this cycle: - Fix crash on releasing compound PE from Gavin Shan - Fix processor numbers in OPAL ICP from Benjamin Herrenschmidt - Fix little endian build with CONFIG_KEXEC=n from Thiago Jung Bauermann -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJX0qKlAAoJEFHr6jzI4aWAu30QAK88plLxJ2z5Lyf7axdHf7P0 NfM6xQLyuUQ1xP3ksUB4/4eps3jINJ0bZRd4mMJ3fO/YgNsBACayB9GeE478tMbp 1KmK94qpLk1u4BUxXNtsWJLEuzVqAPr2cGh6jddmkPXGCUx1MFatEVNVJupX+Vt9 sJsmhLatUucZEQI6r4sK5wDOdLYIQgcgTIWW5qHH7jyJDKLGyJbNPtmQhbMWU0a5 zBwD+paecJSGTJEVjd3UwBic+oXt8chwiZkaHLu4Rh6JQ0yVRL4If4EYCodHIpDR H7b0P9De9W6a+IWLjVDMhYKq9rBjjgZwcjMplkO7gBE2P+v/NGzbfORJtNXeOgKE /RSWufpTbpiGyUzP1Lr/j0O59ZoijRGBK8zuha5FtsTlhl909ifc6KuHO5aqHY9r I5o7ws+hSBM1u9cf0Bl011P4uToYzy1auMsZsjDW2SdDEFtJ+WK+0I2vp+M9Jv73 /F48n/EWUuul5oS2Uar+V2AUADpnYPRi50OR1zVJxdJSM8bZFue4brBFfx1bI/2/ jmK87hxNwJtYT45KiuEXr2FWMiB1iNHHxL/OEwWbitf2MfRjq8+LHbdt9FxOSj3/ +8cw3f1zyEjNsvH380HhkUBZknKmD7z8V5Ko5Dx5h8cuRlL+QEW2GnW+1NN7VMoQ T7QTHRR4ziHSKdzAIlTe =q0Jo -----END PGP SIGNATURE----- Merge tag 'powerpc-4.8-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux Pull powerpc fixes from Michael Ellerman: "Fixes marked for stable: - Don't alias user region to other regions below PAGE_OFFSET from Paul Mackerras - Fix again csum_partial_copy_generic() on 32-bit from Christophe Leroy - Fix corrupted PE allocation bitmap on releasing PE from Gavin Shan Fixes for code merged this cycle: - Fix crash on releasing compound PE from Gavin Shan - Fix processor numbers in OPAL ICP from Benjamin Herrenschmidt - Fix little endian build with CONFIG_KEXEC=n from Thiago Jung Bauermann" * tag 'powerpc-4.8-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: powerpc/mm: Don't alias user region to other regions below PAGE_OFFSET powerpc/32: Fix again csum_partial_copy_generic() powerpc/powernv: Fix corrupted PE allocation bitmap on releasing PE powerpc/powernv: Fix crash on releasing compound PE powerpc/xics/opal: Fix processor numbers in OPAL ICP powerpc/pseries: Fix little endian build with CONFIG_KEXEC=n
This commit is contained in:
commit
2771fc8ed6
@ -127,18 +127,19 @@ _GLOBAL(csum_partial_copy_generic)
|
||||
stw r7,12(r1)
|
||||
stw r8,8(r1)
|
||||
|
||||
rlwinm r0,r4,3,0x8
|
||||
rlwnm r6,r6,r0,0,31 /* odd destination address: rotate one byte */
|
||||
cmplwi cr7,r0,0 /* is destination address even ? */
|
||||
addic r12,r6,0
|
||||
addi r6,r4,-4
|
||||
neg r0,r4
|
||||
addi r4,r3,-4
|
||||
andi. r0,r0,CACHELINE_MASK /* # bytes to start of cache line */
|
||||
crset 4*cr7+eq
|
||||
beq 58f
|
||||
|
||||
cmplw 0,r5,r0 /* is this more than total to do? */
|
||||
blt 63f /* if not much to do */
|
||||
rlwinm r7,r6,3,0x8
|
||||
rlwnm r12,r12,r7,0,31 /* odd destination address: rotate one byte */
|
||||
cmplwi cr7,r7,0 /* is destination address even ? */
|
||||
andi. r8,r0,3 /* get it word-aligned first */
|
||||
mtctr r8
|
||||
beq+ 61f
|
||||
|
@ -113,7 +113,12 @@ BEGIN_FTR_SECTION
|
||||
END_MMU_FTR_SECTION_IFCLR(MMU_FTR_1T_SEGMENT)
|
||||
b slb_finish_load_1T
|
||||
|
||||
0:
|
||||
0: /*
|
||||
* For userspace addresses, make sure this is region 0.
|
||||
*/
|
||||
cmpdi r9, 0
|
||||
bne 8f
|
||||
|
||||
/* when using slices, we extract the psize off the slice bitmaps
|
||||
* and then we need to get the sllp encoding off the mmu_psize_defs
|
||||
* array.
|
||||
|
@ -162,11 +162,12 @@ static struct pnv_ioda_pe *pnv_ioda_alloc_pe(struct pnv_phb *phb)
|
||||
static void pnv_ioda_free_pe(struct pnv_ioda_pe *pe)
|
||||
{
|
||||
struct pnv_phb *phb = pe->phb;
|
||||
unsigned int pe_num = pe->pe_number;
|
||||
|
||||
WARN_ON(pe->pdev);
|
||||
|
||||
memset(pe, 0, sizeof(struct pnv_ioda_pe));
|
||||
clear_bit(pe->pe_number, phb->ioda.pe_alloc);
|
||||
clear_bit(pe_num, phb->ioda.pe_alloc);
|
||||
}
|
||||
|
||||
/* The default M64 BAR is shared by all PEs */
|
||||
@ -3402,12 +3403,6 @@ static void pnv_ioda_release_pe(struct pnv_ioda_pe *pe)
|
||||
struct pnv_phb *phb = pe->phb;
|
||||
struct pnv_ioda_pe *slave, *tmp;
|
||||
|
||||
/* Release slave PEs in compound PE */
|
||||
if (pe->flags & PNV_IODA_PE_MASTER) {
|
||||
list_for_each_entry_safe(slave, tmp, &pe->slaves, list)
|
||||
pnv_ioda_release_pe(slave);
|
||||
}
|
||||
|
||||
list_del(&pe->list);
|
||||
switch (phb->type) {
|
||||
case PNV_PHB_IODA1:
|
||||
@ -3422,6 +3417,15 @@ static void pnv_ioda_release_pe(struct pnv_ioda_pe *pe)
|
||||
|
||||
pnv_ioda_release_pe_seg(pe);
|
||||
pnv_ioda_deconfigure_pe(pe->phb, pe);
|
||||
|
||||
/* Release slave PEs in the compound PE */
|
||||
if (pe->flags & PNV_IODA_PE_MASTER) {
|
||||
list_for_each_entry_safe(slave, tmp, &pe->slaves, list) {
|
||||
list_del(&slave->list);
|
||||
pnv_ioda_free_pe(slave);
|
||||
}
|
||||
}
|
||||
|
||||
pnv_ioda_free_pe(pe);
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,6 @@
|
||||
#include <linux/root_dev.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_pci.h>
|
||||
#include <linux/kexec.h>
|
||||
|
||||
#include <asm/mmu.h>
|
||||
#include <asm/processor.h>
|
||||
@ -66,6 +65,7 @@
|
||||
#include <asm/eeh.h>
|
||||
#include <asm/reg.h>
|
||||
#include <asm/plpar_wrappers.h>
|
||||
#include <asm/kexec.h>
|
||||
|
||||
#include "pseries.h"
|
||||
|
||||
|
@ -23,10 +23,10 @@
|
||||
|
||||
static void icp_opal_teardown_cpu(void)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
int hw_cpu = hard_smp_processor_id();
|
||||
|
||||
/* Clear any pending IPI */
|
||||
opal_int_set_mfrr(cpu, 0xff);
|
||||
opal_int_set_mfrr(hw_cpu, 0xff);
|
||||
}
|
||||
|
||||
static void icp_opal_flush_ipi(void)
|
||||
@ -101,14 +101,16 @@ static void icp_opal_eoi(struct irq_data *d)
|
||||
|
||||
static void icp_opal_cause_ipi(int cpu, unsigned long data)
|
||||
{
|
||||
opal_int_set_mfrr(cpu, IPI_PRIORITY);
|
||||
int hw_cpu = get_hard_smp_processor_id(cpu);
|
||||
|
||||
opal_int_set_mfrr(hw_cpu, IPI_PRIORITY);
|
||||
}
|
||||
|
||||
static irqreturn_t icp_opal_ipi_action(int irq, void *dev_id)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
int hw_cpu = hard_smp_processor_id();
|
||||
|
||||
opal_int_set_mfrr(cpu, 0xff);
|
||||
opal_int_set_mfrr(hw_cpu, 0xff);
|
||||
|
||||
return smp_ipi_demux();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user