Continuing to convert uvm_km_valloc() calls to km_alloc(), sparc64's
struct cpu_info wants to be allocated on an 8 page boundary, so it needs
a custom kmem_va_mode.  My T5120 didn't blow up with this, so I think it
works.

ok?

Index: arch/sparc64/sparc64/cpu.c
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/sparc64/cpu.c,v
retrieving revision 1.71
diff -u -p -u -p -r1.71 cpu.c
--- arch/sparc64/sparc64/cpu.c  31 Jul 2020 11:19:12 -0000      1.71
+++ arch/sparc64/sparc64/cpu.c  21 Dec 2020 05:12:32 -0000
@@ -113,6 +113,12 @@ void hummingbird_init(struct cpu_info *c
 #define        IU_IMPL(v)      ((((u_int64_t)(v))&VER_IMPL) >> VER_IMPL_SHIFT)
 #define        IU_VERS(v)      ((((u_int64_t)(v))&VER_MASK) >> VER_MASK_SHIFT)
 
+/* virtual address allocation mode for struct cpu_info */
+struct kmem_va_mode kv_cpu_info = {
+       .kv_map = &kernel_map,
+       .kv_align = 8 * PAGE_SIZE
+};
+
 struct cpu_info *
 alloc_cpuinfo(struct mainbus_attach_args *ma)
 {
@@ -137,7 +143,7 @@ alloc_cpuinfo(struct mainbus_attach_args
                if (cpi->ci_upaid == portid)
                        return cpi;
 
-       va = uvm_km_valloc_align(kernel_map, sz, 8 * PAGE_SIZE, 0);
+       va = (vaddr_t)km_alloc(sz, &kv_cpu_info, &kp_none, &kd_nowait);
        if (va == 0)
                panic("alloc_cpuinfo: no virtual space");
        va0 = va;

Reply via email to