Merge tag 'powerpc-4.6-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull powerpc updates from Michael Ellerman: "This was delayed a day or two by some build-breakage on old toolchains which we've now fixed. There's two PCI commits both acked by Bjorn. There's one commit to mm/hugepage.c which is (co)authored by Kirill. Highlights: - Restructure Linux PTE on Book3S/64 to Radix format from Paul Mackerras - Book3s 64 MMU cleanup in preparation for Radix MMU from Aneesh Kumar K.V - Add POWER9 cputable entry from Michael Neuling - FPU/Altivec/VSX save/restore optimisations from Cyril Bur - Add support for new ftrace ABI on ppc64le from Torsten Duwe Various cleanups & minor fixes from: - Adam Buchbinder, Andrew Donnellan, Balbir Singh, Christophe Leroy, Cyril Bur, Luis Henriques, Madhavan Srinivasan, Pan Xinhui, Russell Currey, Sukadev Bhattiprolu, Suraj Jitindar Singh. General: - atomics: Allow architectures to define their own __atomic_op_* helpers from Boqun Feng - Implement atomic{, 64}_*_return_* variants and acquire/release/ relaxed variants for (cmp)xchg from Boqun Feng - Add powernv_defconfig from Jeremy Kerr - Fix BUG_ON() reporting in real mode from Balbir Singh - Add xmon command to dump OPAL msglog from Andrew Donnellan - Add xmon command to dump process/task similar to ps(1) from Douglas Miller - Clean up memory hotplug failure paths from David Gibson pci/eeh: - Redesign SR-IOV on PowerNV to give absolute isolation between VFs from Wei Yang. - EEH Support for SRIOV VFs from Wei Yang and Gavin Shan. - PCI/IOV: Rename and export virtfn_{add, remove} from Wei Yang - PCI: Add pcibios_bus_add_device() weak function from Wei Yang - MAINTAINERS: Update EEH details and maintainership from Russell Currey cxl: - Support added to the CXL driver for running on both bare-metal and hypervisor systems, from Christophe Lombard and Frederic Barrat. - Ignore probes for virtual afu pci devices from Vaibhav Jain perf: - Export Power8 generic and cache events to sysfs from Sukadev Bhattiprolu - hv-24x7: Fix usage with chip events, display change in counter values, display domain indices in sysfs, eliminate domain suffix in event names, from Sukadev Bhattiprolu Freescale: - Updates from Scott: "Highlights include 8xx optimizations, 32-bit checksum optimizations, 86xx consolidation, e5500/e6500 cpu hotplug, more fman and other dt bits, and minor fixes/cleanup" * tag 'powerpc-4.6-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (179 commits) powerpc: Fix unrecoverable SLB miss during restore_math() powerpc/8xx: Fix do_mtspr_cpu6() build on older compilers powerpc/rcpm: Fix build break when SMP=n powerpc/book3e-64: Use hardcoded mttmr opcode powerpc/fsl/dts: Add "jedec,spi-nor" flash compatible powerpc/T104xRDB: add tdm riser card node to device tree powerpc32: PAGE_EXEC required for inittext powerpc/mpc85xx: Add pcsphy nodes to FManV3 device tree powerpc/mpc85xx: Add MDIO bus muxing support to the board device tree(s) powerpc/86xx: Introduce and use common dtsi powerpc/86xx: Update device tree powerpc/86xx: Move dts files to fsl directory powerpc/86xx: Switch to kconfig fragments approach powerpc/86xx: Update defconfigs powerpc/86xx: Consolidate common platform code powerpc32: Remove one insn in mulhdu powerpc32: small optimisation in flush_icache_range() powerpc: Simplify test in __dma_sync() powerpc32: move xxxxx_dcache_range() functions inline powerpc32: Remove clear_pages() and define clear_page() inline ...
This commit is contained in:
@@ -168,11 +168,11 @@ unsigned long htab_convert_pte_flags(unsigned long pteflags)
|
||||
rflags |= HPTE_R_N;
|
||||
/*
|
||||
* PP bits:
|
||||
* Linux use slb key 0 for kernel and 1 for user.
|
||||
* kernel areas are mapped by PP bits 00
|
||||
* and and there is no kernel RO (_PAGE_KERNEL_RO).
|
||||
* User area mapped by 0x2 and read only use by
|
||||
* 0x3.
|
||||
* Linux uses slb key 0 for kernel and 1 for user.
|
||||
* kernel areas are mapped with PP=00
|
||||
* and there is no kernel RO (_PAGE_KERNEL_RO).
|
||||
* User area is mapped with PP=0x2 for read/write
|
||||
* or PP=0x3 for read-only (including writeable but clean pages).
|
||||
*/
|
||||
if (pteflags & _PAGE_USER) {
|
||||
rflags |= 0x2;
|
||||
@@ -265,28 +265,32 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend,
|
||||
return ret < 0 ? ret : 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||
int htab_remove_mapping(unsigned long vstart, unsigned long vend,
|
||||
int psize, int ssize)
|
||||
{
|
||||
unsigned long vaddr;
|
||||
unsigned int step, shift;
|
||||
int rc;
|
||||
int ret = 0;
|
||||
|
||||
shift = mmu_psize_defs[psize].shift;
|
||||
step = 1 << shift;
|
||||
|
||||
if (!ppc_md.hpte_removebolted) {
|
||||
printk(KERN_WARNING "Platform doesn't implement "
|
||||
"hpte_removebolted\n");
|
||||
return -EINVAL;
|
||||
if (!ppc_md.hpte_removebolted)
|
||||
return -ENODEV;
|
||||
|
||||
for (vaddr = vstart; vaddr < vend; vaddr += step) {
|
||||
rc = ppc_md.hpte_removebolted(vaddr, psize, ssize);
|
||||
if (rc == -ENOENT) {
|
||||
ret = -ENOENT;
|
||||
continue;
|
||||
}
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
}
|
||||
|
||||
for (vaddr = vstart; vaddr < vend; vaddr += step)
|
||||
ppc_md.hpte_removebolted(vaddr, psize, ssize);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||
|
||||
static int __init htab_dt_scan_seg_sizes(unsigned long node,
|
||||
const char *uname, int depth,
|
||||
@@ -607,10 +611,28 @@ static int __init htab_dt_scan_pftsize(unsigned long node,
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned htab_shift_for_mem_size(unsigned long mem_size)
|
||||
{
|
||||
unsigned memshift = __ilog2(mem_size);
|
||||
unsigned pshift = mmu_psize_defs[mmu_virtual_psize].shift;
|
||||
unsigned pteg_shift;
|
||||
|
||||
/* round mem_size up to next power of 2 */
|
||||
if ((1UL << memshift) < mem_size)
|
||||
memshift += 1;
|
||||
|
||||
/* aim for 2 pages / pteg */
|
||||
pteg_shift = memshift - (pshift + 1);
|
||||
|
||||
/*
|
||||
* 2^11 PTEGS of 128 bytes each, ie. 2^18 bytes is the minimum htab
|
||||
* size permitted by the architecture.
|
||||
*/
|
||||
return max(pteg_shift + 7, 18U);
|
||||
}
|
||||
|
||||
static unsigned long __init htab_get_table_size(void)
|
||||
{
|
||||
unsigned long mem_size, rnd_mem_size, pteg_count, psize;
|
||||
|
||||
/* If hash size isn't already provided by the platform, we try to
|
||||
* retrieve it from the device-tree. If it's not there neither, we
|
||||
* calculate it now based on the total RAM size
|
||||
@@ -620,31 +642,30 @@ static unsigned long __init htab_get_table_size(void)
|
||||
if (ppc64_pft_size)
|
||||
return 1UL << ppc64_pft_size;
|
||||
|
||||
/* round mem_size up to next power of 2 */
|
||||
mem_size = memblock_phys_mem_size();
|
||||
rnd_mem_size = 1UL << __ilog2(mem_size);
|
||||
if (rnd_mem_size < mem_size)
|
||||
rnd_mem_size <<= 1;
|
||||
|
||||
/* # pages / 2 */
|
||||
psize = mmu_psize_defs[mmu_virtual_psize].shift;
|
||||
pteg_count = max(rnd_mem_size >> (psize + 1), 1UL << 11);
|
||||
|
||||
return pteg_count << 7;
|
||||
return 1UL << htab_shift_for_mem_size(memblock_phys_mem_size());
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||
int create_section_mapping(unsigned long start, unsigned long end)
|
||||
{
|
||||
return htab_bolt_mapping(start, end, __pa(start),
|
||||
pgprot_val(PAGE_KERNEL), mmu_linear_psize,
|
||||
mmu_kernel_ssize);
|
||||
int rc = htab_bolt_mapping(start, end, __pa(start),
|
||||
pgprot_val(PAGE_KERNEL), mmu_linear_psize,
|
||||
mmu_kernel_ssize);
|
||||
|
||||
if (rc < 0) {
|
||||
int rc2 = htab_remove_mapping(start, end, mmu_linear_psize,
|
||||
mmu_kernel_ssize);
|
||||
BUG_ON(rc2 && (rc2 != -ENOENT));
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
int remove_section_mapping(unsigned long start, unsigned long end)
|
||||
{
|
||||
return htab_remove_mapping(start, end, mmu_linear_psize,
|
||||
mmu_kernel_ssize);
|
||||
int rc = htab_remove_mapping(start, end, mmu_linear_psize,
|
||||
mmu_kernel_ssize);
|
||||
WARN_ON(rc < 0);
|
||||
return rc;
|
||||
}
|
||||
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||
|
||||
|
Reference in New Issue
Block a user