Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/aarch64/aarch64 Fix uvmexp.ncolors for some big.LIT...
details: https://anonhg.NetBSD.org/src/rev/87a75911dce3
branches: trunk
changeset: 973554:87a75911dce3
user: rin <rin%NetBSD.org@localhost>
date: Sat Jul 04 04:39:20 2020 +0000
description:
Fix uvmexp.ncolors for some big.LITTLE configuration; it is uncertain
which CPU is used as primary, and as a result, secondary CPUs can
require larger number of colors.
In order to solve this problem, update uvmexp.ncolors via
uvm_page_recolor(9) when secondary CPUs are attached, as done for
other ports like x86.
Pointed out by jmcneill@, and discussed on port-arm@:
http://mail-index.netbsd.org/port-arm/2020/07/03/msg006837.html
Tested and OK'd by ryo@.
diffstat:
sys/arch/aarch64/aarch64/cpufunc.c | 21 +++++++++++++++------
1 files changed, 15 insertions(+), 6 deletions(-)
diffs (59 lines):
diff -r bf0f2924416e -r 87a75911dce3 sys/arch/aarch64/aarch64/cpufunc.c
--- a/sys/arch/aarch64/aarch64/cpufunc.c Sat Jul 04 03:08:20 2020 +0000
+++ b/sys/arch/aarch64/aarch64/cpufunc.c Sat Jul 04 04:39:20 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: cpufunc.c,v 1.21 2020/07/01 07:59:16 ryo Exp $ */
+/* $NetBSD: cpufunc.c,v 1.22 2020/07/04 04:39:20 rin Exp $ */
/*
* Copyright (c) 2017 Ryo Shimizu <ryo%nerv.org@localhost>
@@ -30,13 +30,15 @@
#include "opt_multiprocessor.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpufunc.c,v 1.21 2020/07/01 07:59:16 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpufunc.c,v 1.22 2020/07/04 04:39:20 rin Exp $");
#include <sys/param.h>
#include <sys/types.h>
#include <sys/kmem.h>
#include <sys/cpu.h>
+#include <uvm/uvm_page.h>
+
#include <aarch64/cpufunc.h>
u_int cputype; /* compat arm */
@@ -102,6 +104,7 @@
{
struct cpu_info * const ci = curcpu();
uint32_t clidr, ctr;
+ u_int vindexsize;
int level, cachetype;
struct aarch64_cache_info *cinfo = NULL;
@@ -215,14 +218,20 @@
((cinfo[0].cacheable == CACHE_CACHEABLE_ICACHE) ||
(cinfo[0].cacheable == CACHE_CACHEABLE_IDCACHE))) {
- aarch64_cache_vindexsize =
+ vindexsize =
cinfo[0].icache.cache_size /
cinfo[0].icache.cache_ways;
- KASSERT(aarch64_cache_vindexsize != 0);
- aarch64_cache_prefer_mask = aarch64_cache_vindexsize - 1;
+ KASSERT(vindexsize != 0);
} else {
- aarch64_cache_vindexsize = 0;
+ vindexsize = 0;
+ }
+
+ if (vindexsize > aarch64_cache_vindexsize) {
+ aarch64_cache_vindexsize = vindexsize;
+ aarch64_cache_prefer_mask = vindexsize - 1;
+ if (uvm.page_init_done)
+ uvm_page_recolor(vindexsize / PAGE_SIZE);
}
}
Home |
Main Index |
Thread Index |
Old Index