You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
memblock: stop using implicit alignment to SMP_CACHE_BYTES
When a memblock allocation APIs are called with align = 0, the alignment is implicitly set to SMP_CACHE_BYTES. Implicit alignment is done deep in the memblock allocator and it can come as a surprise. Not that such an alignment would be wrong even when used incorrectly but it is better to be explicit for the sake of clarity and the prinicple of the least surprise. Replace all such uses of memblock APIs with the 'align' parameter explicitly set to SMP_CACHE_BYTES and stop implicit alignment assignment in the memblock internal allocation functions. For the case when memblock APIs are used via helper functions, e.g. like iommu_arena_new_node() in Alpha, the helper functions were detected with Coccinelle's help and then manually examined and updated where appropriate. The direct memblock APIs users were updated using the semantic patch below: @@ expression size, min_addr, max_addr, nid; @@ ( | - memblock_alloc_try_nid_raw(size, 0, min_addr, max_addr, nid) + memblock_alloc_try_nid_raw(size, SMP_CACHE_BYTES, min_addr, max_addr, nid) | - memblock_alloc_try_nid_nopanic(size, 0, min_addr, max_addr, nid) + memblock_alloc_try_nid_nopanic(size, SMP_CACHE_BYTES, min_addr, max_addr, nid) | - memblock_alloc_try_nid(size, 0, min_addr, max_addr, nid) + memblock_alloc_try_nid(size, SMP_CACHE_BYTES, min_addr, max_addr, nid) | - memblock_alloc(size, 0) + memblock_alloc(size, SMP_CACHE_BYTES) | - memblock_alloc_raw(size, 0) + memblock_alloc_raw(size, SMP_CACHE_BYTES) | - memblock_alloc_from(size, 0, min_addr) + memblock_alloc_from(size, SMP_CACHE_BYTES, min_addr) | - memblock_alloc_nopanic(size, 0) + memblock_alloc_nopanic(size, SMP_CACHE_BYTES) | - memblock_alloc_low(size, 0) + memblock_alloc_low(size, SMP_CACHE_BYTES) | - memblock_alloc_low_nopanic(size, 0) + memblock_alloc_low_nopanic(size, SMP_CACHE_BYTES) | - memblock_alloc_from_nopanic(size, 0, min_addr) + memblock_alloc_from_nopanic(size, SMP_CACHE_BYTES, min_addr) | - memblock_alloc_node(size, 0, nid) + memblock_alloc_node(size, SMP_CACHE_BYTES, nid) ) [mhocko@suse.com: changelog update] [akpm@linux-foundation.org: coding-style fixes] [rppt@linux.ibm.com: fix missed uses of implicit alignment] Link: http://lkml.kernel.org/r/20181016133656.GA10925@rapoport-lnx Link: http://lkml.kernel.org/r/1538687224-17535-1-git-send-email-rppt@linux.vnet.ibm.com Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com> Suggested-by: Michal Hocko <mhocko@suse.com> Acked-by: Paul Burton <paul.burton@mips.com> [MIPS] Acked-by: Michael Ellerman <mpe@ellerman.id.au> [powerpc] Acked-by: Michal Hocko <mhocko@suse.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Chris Zankel <chris@zankel.net> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Guan Xuetao <gxt@pku.edu.cn> Cc: Ingo Molnar <mingo@redhat.com> Cc: Matt Turner <mattst88@gmail.com> Cc: Michal Simek <monstr@monstr.eu> Cc: Richard Weinberger <richard@nod.at> Cc: Russell King <linux@armlinux.org.uk> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Tony Luck <tony.luck@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
530d4c0cfd
commit
7e1c4e2792
@@ -346,7 +346,8 @@ apecs_init_arch(void)
|
||||
* Window 1 is direct access 1GB at 1GB
|
||||
* Window 2 is scatter-gather 8MB at 8MB (for isa)
|
||||
*/
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0);
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000,
|
||||
SMP_CACHE_BYTES);
|
||||
hose->sg_pci = NULL;
|
||||
__direct_map_base = 0x40000000;
|
||||
__direct_map_size = 0x40000000;
|
||||
|
||||
@@ -275,7 +275,8 @@ lca_init_arch(void)
|
||||
* Note that we do not try to save any of the DMA window CSRs
|
||||
* before setting them, since we cannot read those CSRs on LCA.
|
||||
*/
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0);
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000,
|
||||
SMP_CACHE_BYTES);
|
||||
hose->sg_pci = NULL;
|
||||
__direct_map_base = 0x40000000;
|
||||
__direct_map_size = 0x40000000;
|
||||
|
||||
@@ -82,7 +82,7 @@ mk_resource_name(int pe, int port, char *str)
|
||||
char *name;
|
||||
|
||||
sprintf(tmp, "PCI %s PE %d PORT %d", str, pe, port);
|
||||
name = memblock_alloc(strlen(tmp) + 1, 0);
|
||||
name = memblock_alloc(strlen(tmp) + 1, SMP_CACHE_BYTES);
|
||||
strcpy(name, tmp);
|
||||
|
||||
return name;
|
||||
@@ -117,7 +117,7 @@ alloc_io7(unsigned int pe)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
io7 = memblock_alloc(sizeof(*io7), 0);
|
||||
io7 = memblock_alloc(sizeof(*io7), SMP_CACHE_BYTES);
|
||||
io7->pe = pe;
|
||||
raw_spin_lock_init(&io7->irq_lock);
|
||||
|
||||
|
||||
@@ -364,9 +364,11 @@ mcpcia_startup_hose(struct pci_controller *hose)
|
||||
* Window 1 is scatter-gather (up to) 1GB at 1GB (for pci)
|
||||
* Window 2 is direct access 2GB at 2GB
|
||||
*/
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0);
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000,
|
||||
SMP_CACHE_BYTES);
|
||||
hose->sg_pci = iommu_arena_new(hose, 0x40000000,
|
||||
size_for_memory(0x40000000), 0);
|
||||
size_for_memory(0x40000000),
|
||||
SMP_CACHE_BYTES);
|
||||
|
||||
__direct_map_base = 0x80000000;
|
||||
__direct_map_size = 0x80000000;
|
||||
|
||||
@@ -351,7 +351,7 @@ t2_sg_map_window2(struct pci_controller *hose,
|
||||
|
||||
/* Note we can only do 1 SG window, as the other is for direct, so
|
||||
do an ISA SG area, especially for the floppy. */
|
||||
hose->sg_isa = iommu_arena_new(hose, base, length, 0);
|
||||
hose->sg_isa = iommu_arena_new(hose, base, length, SMP_CACHE_BYTES);
|
||||
hose->sg_pci = NULL;
|
||||
|
||||
temp = (base & 0xfff00000UL) | ((base + length - 1) >> 20);
|
||||
|
||||
@@ -316,10 +316,12 @@ titan_init_one_pachip_port(titan_pachip_port *port, int index)
|
||||
* Window 1 is direct access 1GB at 2GB
|
||||
* Window 2 is scatter-gather 1GB at 3GB
|
||||
*/
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0);
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000,
|
||||
SMP_CACHE_BYTES);
|
||||
hose->sg_isa->align_entry = 8; /* 64KB for ISA */
|
||||
|
||||
hose->sg_pci = iommu_arena_new(hose, 0xc0000000, 0x40000000, 0);
|
||||
hose->sg_pci = iommu_arena_new(hose, 0xc0000000, 0x40000000,
|
||||
SMP_CACHE_BYTES);
|
||||
hose->sg_pci->align_entry = 4; /* Titan caches 4 PTEs at a time */
|
||||
|
||||
port->wsba[0].csr = hose->sg_isa->dma_base | 3;
|
||||
|
||||
@@ -319,12 +319,14 @@ tsunami_init_one_pchip(tsunami_pchip *pchip, int index)
|
||||
* NOTE: we need the align_entry settings for Acer devices on ES40,
|
||||
* specifically floppy and IDE when memory is larger than 2GB.
|
||||
*/
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0);
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000,
|
||||
SMP_CACHE_BYTES);
|
||||
/* Initially set for 4 PTEs, but will be overridden to 64K for ISA. */
|
||||
hose->sg_isa->align_entry = 4;
|
||||
|
||||
hose->sg_pci = iommu_arena_new(hose, 0x40000000,
|
||||
size_for_memory(0x40000000), 0);
|
||||
size_for_memory(0x40000000),
|
||||
SMP_CACHE_BYTES);
|
||||
hose->sg_pci->align_entry = 4; /* Tsunami caches 4 PTEs at a time */
|
||||
|
||||
__direct_map_base = 0x80000000;
|
||||
|
||||
@@ -111,8 +111,10 @@ wildfire_init_hose(int qbbno, int hoseno)
|
||||
* ??? We ought to scale window 3 memory.
|
||||
*
|
||||
*/
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0);
|
||||
hose->sg_pci = iommu_arena_new(hose, 0xc0000000, 0x08000000, 0);
|
||||
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000,
|
||||
SMP_CACHE_BYTES);
|
||||
hose->sg_pci = iommu_arena_new(hose, 0xc0000000, 0x08000000,
|
||||
SMP_CACHE_BYTES);
|
||||
|
||||
pci = WILDFIRE_pci(qbbno, hoseno);
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ alloc_pci_controller(void)
|
||||
{
|
||||
struct pci_controller *hose;
|
||||
|
||||
hose = memblock_alloc(sizeof(*hose), 0);
|
||||
hose = memblock_alloc(sizeof(*hose), SMP_CACHE_BYTES);
|
||||
|
||||
*hose_tail = hose;
|
||||
hose_tail = &hose->next;
|
||||
@@ -44,7 +44,7 @@ alloc_pci_controller(void)
|
||||
struct resource * __init
|
||||
alloc_resource(void)
|
||||
{
|
||||
return memblock_alloc(sizeof(struct resource), 0);
|
||||
return memblock_alloc(sizeof(struct resource), SMP_CACHE_BYTES);
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE3(pciconfig_iobase, long, which, unsigned long, bus,
|
||||
|
||||
@@ -392,7 +392,7 @@ alloc_pci_controller(void)
|
||||
{
|
||||
struct pci_controller *hose;
|
||||
|
||||
hose = memblock_alloc(sizeof(*hose), 0);
|
||||
hose = memblock_alloc(sizeof(*hose), SMP_CACHE_BYTES);
|
||||
|
||||
*hose_tail = hose;
|
||||
hose_tail = &hose->next;
|
||||
@@ -403,7 +403,7 @@ alloc_pci_controller(void)
|
||||
struct resource * __init
|
||||
alloc_resource(void)
|
||||
{
|
||||
return memblock_alloc(sizeof(struct resource), 0);
|
||||
return memblock_alloc(sizeof(struct resource), SMP_CACHE_BYTES);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ iommu_arena_new_node(int nid, struct pci_controller *hose, dma_addr_t base,
|
||||
printk("%s: couldn't allocate arena from node %d\n"
|
||||
" falling back to system-wide allocation\n",
|
||||
__func__, nid);
|
||||
arena = memblock_alloc(sizeof(*arena), 0);
|
||||
arena = memblock_alloc(sizeof(*arena), SMP_CACHE_BYTES);
|
||||
}
|
||||
|
||||
arena->ptes = memblock_alloc_node(sizeof(*arena), align, nid);
|
||||
@@ -92,7 +92,7 @@ iommu_arena_new_node(int nid, struct pci_controller *hose, dma_addr_t base,
|
||||
|
||||
#else /* CONFIG_DISCONTIGMEM */
|
||||
|
||||
arena = memblock_alloc(sizeof(*arena), 0);
|
||||
arena = memblock_alloc(sizeof(*arena), SMP_CACHE_BYTES);
|
||||
arena->ptes = memblock_alloc_from(mem_size, align, 0);
|
||||
|
||||
#endif /* CONFIG_DISCONTIGMEM */
|
||||
|
||||
@@ -856,7 +856,7 @@ static void __init request_standard_resources(const struct machine_desc *mdesc)
|
||||
*/
|
||||
boot_alias_start = phys_to_idmap(start);
|
||||
if (arm_has_idmap_alias() && boot_alias_start != IDMAP_INVALID_ADDR) {
|
||||
res = memblock_alloc(sizeof(*res), 0);
|
||||
res = memblock_alloc(sizeof(*res), SMP_CACHE_BYTES);
|
||||
res->name = "System RAM (boot alias)";
|
||||
res->start = boot_alias_start;
|
||||
res->end = phys_to_idmap(end);
|
||||
@@ -864,7 +864,7 @@ static void __init request_standard_resources(const struct machine_desc *mdesc)
|
||||
request_resource(&iomem_resource, res);
|
||||
}
|
||||
|
||||
res = memblock_alloc(sizeof(*res), 0);
|
||||
res = memblock_alloc(sizeof(*res), SMP_CACHE_BYTES);
|
||||
res->name = "System RAM";
|
||||
res->start = start;
|
||||
res->end = end;
|
||||
|
||||
@@ -726,7 +726,7 @@ static int __init _setup_clkctrl_provider(struct device_node *np)
|
||||
u64 size;
|
||||
int i;
|
||||
|
||||
provider = memblock_alloc(sizeof(*provider), 0);
|
||||
provider = memblock_alloc(sizeof(*provider), SMP_CACHE_BYTES);
|
||||
if (!provider)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -736,12 +736,14 @@ static int __init _setup_clkctrl_provider(struct device_node *np)
|
||||
of_property_count_elems_of_size(np, "reg", sizeof(u32)) / 2;
|
||||
|
||||
provider->addr =
|
||||
memblock_alloc(sizeof(void *) * provider->num_addrs, 0);
|
||||
memblock_alloc(sizeof(void *) * provider->num_addrs,
|
||||
SMP_CACHE_BYTES);
|
||||
if (!provider->addr)
|
||||
return -ENOMEM;
|
||||
|
||||
provider->size =
|
||||
memblock_alloc(sizeof(u32) * provider->num_addrs, 0);
|
||||
memblock_alloc(sizeof(u32) * provider->num_addrs,
|
||||
SMP_CACHE_BYTES);
|
||||
if (!provider->size)
|
||||
return -ENOMEM;
|
||||
|
||||
|
||||
@@ -218,7 +218,7 @@ static void __init request_standard_resources(void)
|
||||
num_standard_resources = memblock.memory.cnt;
|
||||
standard_resources = memblock_alloc_low(num_standard_resources *
|
||||
sizeof(*standard_resources),
|
||||
0);
|
||||
SMP_CACHE_BYTES);
|
||||
|
||||
for_each_memblock(memory, region) {
|
||||
res = &standard_resources[i++];
|
||||
|
||||
@@ -361,9 +361,9 @@ static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES];
|
||||
|
||||
#define IA64_LOG_ALLOCATE(it, size) \
|
||||
{ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = \
|
||||
(ia64_err_rec_t *)memblock_alloc(size, 0); \
|
||||
(ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); \
|
||||
ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = \
|
||||
(ia64_err_rec_t *)memblock_alloc(size, 0);}
|
||||
(ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES);}
|
||||
#define IA64_LOG_LOCK_INIT(it) spin_lock_init(&ia64_state_log[it].isl_lock)
|
||||
#define IA64_LOG_LOCK(it) spin_lock_irqsave(&ia64_state_log[it].isl_lock, s)
|
||||
#define IA64_LOG_UNLOCK(it) spin_unlock_irqrestore(&ia64_state_log[it].isl_lock,s)
|
||||
|
||||
+4
-2
@@ -59,8 +59,10 @@ struct ia64_tr_entry *ia64_idtrs[NR_CPUS];
|
||||
void __init
|
||||
mmu_context_init (void)
|
||||
{
|
||||
ia64_ctx.bitmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, 0);
|
||||
ia64_ctx.flushmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, 0);
|
||||
ia64_ctx.bitmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3,
|
||||
SMP_CACHE_BYTES);
|
||||
ia64_ctx.flushmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3,
|
||||
SMP_CACHE_BYTES);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -391,7 +391,9 @@ void __init hubdev_init_node(nodepda_t * npda, cnodeid_t node)
|
||||
if (node >= num_online_nodes()) /* Headless/memless IO nodes */
|
||||
node = 0;
|
||||
|
||||
hubdev_info = (struct hubdev_info *)memblock_alloc_node(size, 0, node);
|
||||
hubdev_info = (struct hubdev_info *)memblock_alloc_node(size,
|
||||
SMP_CACHE_BYTES,
|
||||
node);
|
||||
|
||||
npda->pdinfo = (void *)hubdev_info;
|
||||
}
|
||||
|
||||
@@ -511,7 +511,8 @@ static void __init sn_init_pdas(char **cmdline_p)
|
||||
*/
|
||||
for_each_online_node(cnode) {
|
||||
nodepdaindr[cnode] =
|
||||
memblock_alloc_node(sizeof(nodepda_t), 0, cnode);
|
||||
memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES,
|
||||
cnode);
|
||||
memset(nodepdaindr[cnode]->phys_cpuid, -1,
|
||||
sizeof(nodepdaindr[cnode]->phys_cpuid));
|
||||
spin_lock_init(&nodepdaindr[cnode]->ptc_lock);
|
||||
@@ -522,7 +523,7 @@ static void __init sn_init_pdas(char **cmdline_p)
|
||||
*/
|
||||
for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++)
|
||||
nodepdaindr[cnode] =
|
||||
memblock_alloc_node(sizeof(nodepda_t), 0, 0);
|
||||
memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, 0);
|
||||
|
||||
/*
|
||||
* Now copy the array of nodepda pointers to each nodepda.
|
||||
|
||||
@@ -268,7 +268,7 @@ void __init dvma_init(void)
|
||||
list_add(&(hole->list), &hole_list);
|
||||
|
||||
iommu_use = memblock_alloc(IOMMU_TOTAL_ENTRIES * sizeof(unsigned long),
|
||||
0);
|
||||
SMP_CACHE_BYTES);
|
||||
|
||||
dvma_unmap_iommu(DVMA_START, DVMA_SIZE);
|
||||
|
||||
|
||||
@@ -376,7 +376,7 @@ void * __ref zalloc_maybe_bootmem(size_t size, gfp_t mask)
|
||||
if (mem_init_done)
|
||||
p = kzalloc(size, mask);
|
||||
else {
|
||||
p = memblock_alloc(size, 0);
|
||||
p = memblock_alloc(size, SMP_CACHE_BYTES);
|
||||
if (p)
|
||||
memset(p, 0, size);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user