From owner-svn-src-projects@FreeBSD.ORG Sun Jul 26 00:16:44 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4DACD106566C; Sun, 26 Jul 2009 00:16:44 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3AC448FC08; Sun, 26 Jul 2009 00:16:44 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6Q0Gi2t054835; Sun, 26 Jul 2009 00:16:44 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6Q0GiDf054828; Sun, 26 Jul 2009 00:16:44 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907260016.n6Q0GiDf054828@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 26 Jul 2009 00:16:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195880 - in projects/ppc64/sys/powerpc: aim include X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2009 00:16:44 -0000 Author: nwhitehorn Date: Sun Jul 26 00:16:43 2009 New Revision: 195880 URL: http://svn.freebsd.org/changeset/base/195880 Log: This gets the rest of the shared AIM code building for AIM64. Most of the changes are adjusting printf formats and setting things that should be register_t to register_t. Modified: projects/ppc64/sys/powerpc/aim/trap.c projects/ppc64/sys/powerpc/aim/uma_machdep.c projects/ppc64/sys/powerpc/aim/vm_machdep.c projects/ppc64/sys/powerpc/include/_inttypes.h projects/ppc64/sys/powerpc/include/_stdint.h projects/ppc64/sys/powerpc/include/frame.h Modified: projects/ppc64/sys/powerpc/aim/trap.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap.c Sat Jul 25 21:51:12 2009 (r195879) +++ projects/ppc64/sys/powerpc/aim/trap.c Sun Jul 26 00:16:43 2009 (r195880) @@ -65,6 +65,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -284,15 +285,16 @@ printtrap(u_int vector, struct trapframe trapname(vector)); switch (vector) { case EXC_DSI: - printf(" virtual address = 0x%x\n", frame->cpu.aim.dar); + printf(" virtual address = 0x%" PRIxPTR "\n", + frame->cpu.aim.dar); break; case EXC_ISI: - printf(" virtual address = 0x%x\n", frame->srr0); + printf(" virtual address = 0x%" PRIxPTR "\n", frame->srr0); break; } - printf(" srr0 = 0x%x\n", frame->srr0); - printf(" srr1 = 0x%x\n", frame->srr1); - printf(" lr = 0x%x\n", frame->lr); + printf(" srr0 = 0x%" PRIxPTR "\n", frame->srr0); + printf(" srr1 = 0x%" PRIxPTR "\n", frame->srr1); + printf(" lr = 0x%" PRIxPTR "\n", frame->lr); printf(" curthread = %p\n", curthread); if (curthread != NULL) printf(" pid = %d, comm = %s\n", @@ -350,7 +352,8 @@ syscall(struct trapframe *frame) /* * The prep code is MP aware. */ - (*p->p_sysent->sv_prepsyscall)(frame, args, &code, ¶ms); + (*p->p_sysent->sv_prepsyscall)(frame, (int *)args, &code, + ¶ms); } else if (code == SYS_syscall) { /* * code is first argument, @@ -602,7 +605,7 @@ badaddr_read(void *addr, size_t size, in x = *(volatile int32_t *)addr; break; default: - panic("badaddr: invalid size (%d)", size); + panic("badaddr: invalid size (%zd)", size); } /* Make sure we took the machine check, if we caused one. */ Modified: projects/ppc64/sys/powerpc/aim/uma_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/uma_machdep.c Sat Jul 25 21:51:12 2009 (r195879) +++ projects/ppc64/sys/powerpc/aim/uma_machdep.c Sun Jul 26 00:16:43 2009 (r195880) @@ -100,7 +100,7 @@ uma_small_free(void *mem, int size, u_in return; } - m = PHYS_TO_VM_PAGE((u_int32_t)mem); + m = PHYS_TO_VM_PAGE((vm_offset_t)mem); m->wire_count--; vm_page_free(m); atomic_subtract_int(&cnt.v_wire_count, 1); Modified: projects/ppc64/sys/powerpc/aim/vm_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/vm_machdep.c Sat Jul 25 21:51:12 2009 (r195879) +++ projects/ppc64/sys/powerpc/aim/vm_machdep.c Sun Jul 26 00:16:43 2009 (r195880) @@ -145,7 +145,8 @@ cpu_fork(struct thread *td1, struct proc KASSERT(td1 == curthread || td1 == &thread0, ("cpu_fork: p1 not curproc and not proc0")); - CTR3(KTR_PROC, "cpu_fork: called td1=%08x p2=%08x flags=%x", (u_int)td1, (u_int)p2, flags); + CTR3(KTR_PROC, "cpu_fork: called td1=%p p2=%p flags=%x", + td1, p2, flags); if ((flags & RFPROC) == 0) return; @@ -207,8 +208,8 @@ cpu_set_fork_handler(td, func, arg) { struct callframe *cf; - CTR4(KTR_PROC, "%s called with td=%08x func=%08x arg=%08x", - __func__, (u_int)td, (u_int)func, (u_int)arg); + CTR4(KTR_PROC, "%s called with td=%p func=%p arg=%p", + __func__, td, func, arg); cf = (struct callframe *)td->td_pcb->pcb_sp; @@ -461,11 +462,11 @@ cpu_set_upcall_kse(struct thread *td, vo stack_t *stack) { struct trapframe *tf; - uint32_t sp; + uintptr_t sp; tf = td->td_frame; /* align stack and alloc space for frame ptr and saved LR */ - sp = ((uint32_t)stack->ss_sp + stack->ss_size - sizeof(uint64_t)) & + sp = ((uintptr_t)stack->ss_sp + stack->ss_size - sizeof(uint64_t)) & ~0x1f; bzero(tf, sizeof(struct trapframe)); Modified: projects/ppc64/sys/powerpc/include/_inttypes.h ============================================================================== --- projects/ppc64/sys/powerpc/include/_inttypes.h Sat Jul 25 21:51:12 2009 (r195879) +++ projects/ppc64/sys/powerpc/include/_inttypes.h Sun Jul 26 00:16:43 2009 (r195880) @@ -44,177 +44,185 @@ * Macros for format specifiers. */ +#ifdef __powerpc64__ +#define PRI64 "l" +#define PRIreg "l" +#else +#define PRI64 "ll" +#define PRIreg +#endif + /* fprintf(3) macros for signed integers. */ #define PRId8 "d" /* int8_t */ #define PRId16 "d" /* int16_t */ #define PRId32 "d" /* int32_t */ -#define PRId64 "lld" /* int64_t */ +#define PRId64 PRI64"d" /* int64_t */ #define PRIdLEAST8 "d" /* int_least8_t */ #define PRIdLEAST16 "d" /* int_least16_t */ #define PRIdLEAST32 "d" /* int_least32_t */ -#define PRIdLEAST64 "lld" /* int_least64_t */ +#define PRIdLEAST64 PRI64"d" /* int_least64_t */ #define PRIdFAST8 "d" /* int_fast8_t */ #define PRIdFAST16 "d" /* int_fast16_t */ #define PRIdFAST32 "d" /* int_fast32_t */ -#define PRIdFAST64 "lld" /* int_fast64_t */ +#define PRIdFAST64 PRI64"d" /* int_fast64_t */ #define PRIdMAX "jd" /* intmax_t */ -#define PRIdPTR "d" /* intptr_t */ +#define PRIdPTR PRIreg"d" /* intptr_t */ #define PRIi8 "i" /* int8_t */ #define PRIi16 "i" /* int16_t */ #define PRIi32 "i" /* int32_t */ -#define PRIi64 "lli" /* int64_t */ +#define PRIi64 PRI64"i" /* int64_t */ #define PRIiLEAST8 "i" /* int_least8_t */ #define PRIiLEAST16 "i" /* int_least16_t */ #define PRIiLEAST32 "i" /* int_least32_t */ -#define PRIiLEAST64 "lli" /* int_least64_t */ +#define PRIiLEAST64 PRI64"i" /* int_least64_t */ #define PRIiFAST8 "i" /* int_fast8_t */ #define PRIiFAST16 "i" /* int_fast16_t */ #define PRIiFAST32 "i" /* int_fast32_t */ -#define PRIiFAST64 "lli" /* int_fast64_t */ +#define PRIiFAST64 PRI64"i" /* int_fast64_t */ #define PRIiMAX "ji" /* intmax_t */ -#define PRIiPTR "i" /* intptr_t */ +#define PRIiPTR PRIreg"i" /* intptr_t */ /* fprintf(3) macros for unsigned integers. */ #define PRIo8 "o" /* uint8_t */ #define PRIo16 "o" /* uint16_t */ #define PRIo32 "o" /* uint32_t */ -#define PRIo64 "llo" /* uint64_t */ +#define PRIo64 PRI64"o" /* uint64_t */ #define PRIoLEAST8 "o" /* uint_least8_t */ #define PRIoLEAST16 "o" /* uint_least16_t */ #define PRIoLEAST32 "o" /* uint_least32_t */ -#define PRIoLEAST64 "llo" /* uint_least64_t */ +#define PRIoLEAST64 PRI64"o" /* uint_least64_t */ #define PRIoFAST8 "o" /* uint_fast8_t */ #define PRIoFAST16 "o" /* uint_fast16_t */ #define PRIoFAST32 "o" /* uint_fast32_t */ -#define PRIoFAST64 "llo" /* uint_fast64_t */ +#define PRIoFAST64 PRI64"o" /* uint_fast64_t */ #define PRIoMAX "jo" /* uintmax_t */ -#define PRIoPTR "o" /* uintptr_t */ +#define PRIoPTR PRIreg"o" /* uintptr_t */ #define PRIu8 "u" /* uint8_t */ #define PRIu16 "u" /* uint16_t */ #define PRIu32 "u" /* uint32_t */ -#define PRIu64 "llu" /* uint64_t */ +#define PRIu64 PRI64"u" /* uint64_t */ #define PRIuLEAST8 "u" /* uint_least8_t */ #define PRIuLEAST16 "u" /* uint_least16_t */ #define PRIuLEAST32 "u" /* uint_least32_t */ -#define PRIuLEAST64 "llu" /* uint_least64_t */ +#define PRIuLEAST64 PRI64"u" /* uint_least64_t */ #define PRIuFAST8 "u" /* uint_fast8_t */ #define PRIuFAST16 "u" /* uint_fast16_t */ #define PRIuFAST32 "u" /* uint_fast32_t */ -#define PRIuFAST64 "llu" /* uint_fast64_t */ +#define PRIuFAST64 PRI64"u" /* uint_fast64_t */ #define PRIuMAX "ju" /* uintmax_t */ -#define PRIuPTR "u" /* uintptr_t */ +#define PRIuPTR PRIreg"u" /* uintptr_t */ #define PRIx8 "x" /* uint8_t */ #define PRIx16 "x" /* uint16_t */ #define PRIx32 "x" /* uint32_t */ -#define PRIx64 "llx" /* uint64_t */ +#define PRIx64 PRI64"x" /* uint64_t */ #define PRIxLEAST8 "x" /* uint_least8_t */ #define PRIxLEAST16 "x" /* uint_least16_t */ #define PRIxLEAST32 "x" /* uint_least32_t */ -#define PRIxLEAST64 "llx" /* uint_least64_t */ +#define PRIxLEAST64 PRI64"x" /* uint_least64_t */ #define PRIxFAST8 "x" /* uint_fast8_t */ #define PRIxFAST16 "x" /* uint_fast16_t */ #define PRIxFAST32 "x" /* uint_fast32_t */ -#define PRIxFAST64 "llx" /* uint_fast64_t */ +#define PRIxFAST64 PRI64"x" /* uint_fast64_t */ #define PRIxMAX "jx" /* uintmax_t */ -#define PRIxPTR "x" /* uintptr_t */ +#define PRIxPTR PRIreg"x" /* uintptr_t */ #define PRIX8 "X" /* uint8_t */ #define PRIX16 "X" /* uint16_t */ #define PRIX32 "X" /* uint32_t */ -#define PRIX64 "llX" /* uint64_t */ +#define PRIX64 PRI64"X" /* uint64_t */ #define PRIXLEAST8 "X" /* uint_least8_t */ #define PRIXLEAST16 "X" /* uint_least16_t */ #define PRIXLEAST32 "X" /* uint_least32_t */ -#define PRIXLEAST64 "llX" /* uint_least64_t */ +#define PRIXLEAST64 PRI64"X" /* uint_least64_t */ #define PRIXFAST8 "X" /* uint_fast8_t */ #define PRIXFAST16 "X" /* uint_fast16_t */ #define PRIXFAST32 "X" /* uint_fast32_t */ -#define PRIXFAST64 "llX" /* uint_fast64_t */ +#define PRIXFAST64 PRI64"X" /* uint_fast64_t */ #define PRIXMAX "jX" /* uintmax_t */ -#define PRIXPTR "X" /* uintptr_t */ +#define PRIXPTR PRIreg"X" /* uintptr_t */ /* fscanf(3) macros for signed integers. */ #define SCNd8 "hhd" /* int8_t */ #define SCNd16 "hd" /* int16_t */ #define SCNd32 "d" /* int32_t */ -#define SCNd64 "lld" /* int64_t */ +#define SCNd64 PRI64"d" /* int64_t */ #define SCNdLEAST8 "hhd" /* int_least8_t */ #define SCNdLEAST16 "hd" /* int_least16_t */ #define SCNdLEAST32 "d" /* int_least32_t */ -#define SCNdLEAST64 "lld" /* int_least64_t */ +#define SCNdLEAST64 PRI64"d" /* int_least64_t */ #define SCNdFAST8 "d" /* int_fast8_t */ #define SCNdFAST16 "d" /* int_fast16_t */ #define SCNdFAST32 "d" /* int_fast32_t */ -#define SCNdFAST64 "lld" /* int_fast64_t */ +#define SCNdFAST64 PRI64"d" /* int_fast64_t */ #define SCNdMAX "jd" /* intmax_t */ -#define SCNdPTR "d" /* intptr_t */ +#define SCNdPTR PRIreg"d" /* intptr_t */ #define SCNi8 "hhi" /* int8_t */ #define SCNi16 "hi" /* int16_t */ #define SCNi32 "i" /* int32_t */ -#define SCNi64 "lli" /* int64_t */ +#define SCNi64 PRI64"i" /* int64_t */ #define SCNiLEAST8 "hhi" /* int_least8_t */ #define SCNiLEAST16 "hi" /* int_least16_t */ #define SCNiLEAST32 "i" /* int_least32_t */ -#define SCNiLEAST64 "lli" /* int_least64_t */ +#define SCNiLEAST64 PRI64"i" /* int_least64_t */ #define SCNiFAST8 "i" /* int_fast8_t */ #define SCNiFAST16 "i" /* int_fast16_t */ #define SCNiFAST32 "i" /* int_fast32_t */ -#define SCNiFAST64 "lli" /* int_fast64_t */ +#define SCNiFAST64 PRI64"i" /* int_fast64_t */ #define SCNiMAX "ji" /* intmax_t */ -#define SCNiPTR "i" /* intptr_t */ +#define SCNiPTR PRIreg"i" /* intptr_t */ /* fscanf(3) macros for unsigned integers. */ #define SCNo8 "hho" /* uint8_t */ #define SCNo16 "ho" /* uint16_t */ #define SCNo32 "o" /* uint32_t */ -#define SCNo64 "llo" /* uint64_t */ +#define SCNo64 PRI64"o" /* uint64_t */ #define SCNoLEAST8 "hho" /* uint_least8_t */ #define SCNoLEAST16 "ho" /* uint_least16_t */ #define SCNoLEAST32 "o" /* uint_least32_t */ -#define SCNoLEAST64 "llo" /* uint_least64_t */ +#define SCNoLEAST64 PRI64"o" /* uint_least64_t */ #define SCNoFAST8 "o" /* uint_fast8_t */ #define SCNoFAST16 "o" /* uint_fast16_t */ #define SCNoFAST32 "o" /* uint_fast32_t */ -#define SCNoFAST64 "llo" /* uint_fast64_t */ +#define SCNoFAST64 PRI64"o" /* uint_fast64_t */ #define SCNoMAX "jo" /* uintmax_t */ -#define SCNoPTR "o" /* uintptr_t */ +#define SCNoPTR PRIreg"o" /* uintptr_t */ #define SCNu8 "hhu" /* uint8_t */ #define SCNu16 "hu" /* uint16_t */ #define SCNu32 "u" /* uint32_t */ -#define SCNu64 "llu" /* uint64_t */ +#define SCNu64 PRI64"u" /* uint64_t */ #define SCNuLEAST8 "hhu" /* uint_least8_t */ #define SCNuLEAST16 "hu" /* uint_least16_t */ #define SCNuLEAST32 "u" /* uint_least32_t */ -#define SCNuLEAST64 "llu" /* uint_least64_t */ +#define SCNuLEAST64 PRI64"u" /* uint_least64_t */ #define SCNuFAST8 "u" /* uint_fast8_t */ #define SCNuFAST16 "u" /* uint_fast16_t */ #define SCNuFAST32 "u" /* uint_fast32_t */ -#define SCNuFAST64 "llu" /* uint_fast64_t */ +#define SCNuFAST64 PRI64"u" /* uint_fast64_t */ #define SCNuMAX "ju" /* uintmax_t */ -#define SCNuPTR "u" /* uintptr_t */ +#define SCNuPTR PRIreg"u" /* uintptr_t */ #define SCNx8 "hhx" /* uint8_t */ #define SCNx16 "hx" /* uint16_t */ #define SCNx32 "x" /* uint32_t */ -#define SCNx64 "llx" /* uint64_t */ +#define SCNx64 PRI64"x" /* uint64_t */ #define SCNxLEAST8 "hhx" /* uint_least8_t */ #define SCNxLEAST16 "hx" /* uint_least16_t */ #define SCNxLEAST32 "x" /* uint_least32_t */ -#define SCNxLEAST64 "llx" /* uint_least64_t */ +#define SCNxLEAST64 PRI64"x" /* uint_least64_t */ #define SCNxFAST8 "x" /* uint_fast8_t */ #define SCNxFAST16 "x" /* uint_fast16_t */ #define SCNxFAST32 "x" /* uint_fast32_t */ -#define SCNxFAST64 "llx" /* uint_fast64_t */ +#define SCNxFAST64 PRI64"x" /* uint_fast64_t */ #define SCNxMAX "jx" /* uintmax_t */ -#define SCNxPTR "x" /* uintptr_t */ +#define SCNxPTR PRIreg"x" /* uintptr_t */ #endif /* !_MACHINE_INTTYPES_H_ */ Modified: projects/ppc64/sys/powerpc/include/_stdint.h ============================================================================== --- projects/ppc64/sys/powerpc/include/_stdint.h Sat Jul 25 21:51:12 2009 (r195879) +++ projects/ppc64/sys/powerpc/include/_stdint.h Sun Jul 26 00:16:43 2009 (r195880) @@ -45,15 +45,22 @@ #define INT8_C(c) (c) #define INT16_C(c) (c) #define INT32_C(c) (c) -#define INT64_C(c) (c ## LL) #define UINT8_C(c) (c) #define UINT16_C(c) (c) #define UINT32_C(c) (c ## U) -#define UINT64_C(c) (c ## ULL) +#ifdef __powerpc64__ +#define INT64_C(c) (c ## L) +#define UINT64_C(c) (c ## UL) +#define INTMAX_C(c) (c ## L) +#define UINTMAX_C(c) (c ## UL) +#else +#define INT64_C(c) (c ## LL) +#define UINT64_C(c) (c ## ULL) #define INTMAX_C(c) (c ## LL) #define UINTMAX_C(c) (c ## ULL) +#endif #endif /* !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) */ @@ -129,9 +136,15 @@ * ISO/IEC 9899:1999 * 7.18.2.4 Limits of integer types capable of holding object pointers */ +#ifdef __powerpc64__ +#define INTPTR_MIN INT64_MIN +#define INTPTR_MAX INT64_MAX +#define UINTPTR_MAX UINT64_MAX +#else #define INTPTR_MIN INT32_MIN #define INTPTR_MAX INT32_MAX #define UINTPTR_MAX UINT32_MAX +#endif /* * ISO/IEC 9899:1999 @@ -145,6 +158,18 @@ * ISO/IEC 9899:1999 * 7.18.3 Limits of other integer types */ +#ifdef __powerpc64__ +/* Limits of ptrdiff_t. */ +#define PTRDIFF_MIN INT64_MIN +#define PTRDIFF_MAX INT64_MAX + +/* Limits of sig_atomic_t. */ +#define SIG_ATOMIC_MIN INT64_MIN +#define SIG_ATOMIC_MAX INT64_MAX + +/* Limit of size_t. */ +#define SIZE_MAX UINT64_MAX +#else /* Limits of ptrdiff_t. */ #define PTRDIFF_MIN INT32_MIN #define PTRDIFF_MAX INT32_MAX @@ -155,6 +180,7 @@ /* Limit of size_t. */ #define SIZE_MAX UINT32_MAX +#endif #ifndef WCHAR_MIN /* Also possibly defined in */ /* Limits of wchar_t. */ Modified: projects/ppc64/sys/powerpc/include/frame.h ============================================================================== --- projects/ppc64/sys/powerpc/include/frame.h Sat Jul 25 21:51:12 2009 (r195879) +++ projects/ppc64/sys/powerpc/include/frame.h Sun Jul 26 00:16:43 2009 (r195880) @@ -55,7 +55,7 @@ struct trapframe { register_t ctr; register_t srr0; register_t srr1; - int exc; + register_t exc; union { struct { /* dar & dsisr are only filled on a DSI trap */ @@ -90,6 +90,6 @@ struct callframe { /* Definitions for syscalls */ #define FIRSTARG 3 /* first arg in reg 3 */ #define NARGREG 8 /* 8 args in regs */ -#define MOREARGS(sp) ((caddr_t)((int)(sp) + 8)) /* more args go here */ +#define MOREARGS(sp) ((caddr_t)((uintptr_t)(sp) + 8)) /* more args go here */ #endif /* _MACHINE_FRAME_H_ */ From owner-svn-src-projects@FreeBSD.ORG Sun Jul 26 03:20:13 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0018C1065675; Sun, 26 Jul 2009 03:20:12 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DEF128FC2A; Sun, 26 Jul 2009 03:20:12 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6Q3KCmJ058539; Sun, 26 Jul 2009 03:20:12 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6Q3KC4o058528; Sun, 26 Jul 2009 03:20:12 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907260320.n6Q3KC4o058528@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 26 Jul 2009 03:20:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195881 - in projects/ppc64/sys: conf powerpc/aim powerpc/aim64 powerpc/include powerpc/powermac powerpc/powerpc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2009 03:20:13 -0000 Author: nwhitehorn Date: Sun Jul 26 03:20:12 2009 New Revision: 195881 URL: http://svn.freebsd.org/changeset/base/195881 Log: Checkpoint current status: everything currently compiles except aim/copyinout.c, powerpc/elf_machdep.c, and powerpc/in_cksum.c. Hopefully, I will see some hello world boot messages soon. Changes are: - Create a new powerpc/aim64 directory to hold a small number of aim64-specific files. Depending on whether we need to have a sys/powerpc64 in the end, this could be moved there. - Move aim/mmu_oea64.c to aim64 - Pacify the compiler about changed types, update trap_subr.S, etc. - Remove device options for devices that don't exist on any PPC64 machines. Added: projects/ppc64/sys/powerpc/aim64/ projects/ppc64/sys/powerpc/aim64/locore.S - copied unchanged from r195651, projects/ppc64/sys/powerpc/aim/locore.S projects/ppc64/sys/powerpc/aim64/machdep.c - copied, changed from r195651, projects/ppc64/sys/powerpc/aim/machdep.c projects/ppc64/sys/powerpc/aim64/mmu_oea64.c - copied, changed from r195651, projects/ppc64/sys/powerpc/aim/mmu_oea64.c projects/ppc64/sys/powerpc/aim64/swtch.S - copied unchanged from r195651, projects/ppc64/sys/powerpc/aim/swtch.S projects/ppc64/sys/powerpc/aim64/trap_subr.S - copied, changed from r195651, projects/ppc64/sys/powerpc/aim/trap_subr.S Deleted: projects/ppc64/sys/powerpc/aim/mmu_oea64.c Modified: projects/ppc64/sys/conf/Makefile.powerpc64 projects/ppc64/sys/conf/files.powerpc projects/ppc64/sys/conf/files.powerpc64 projects/ppc64/sys/conf/ldscript.powerpc64 projects/ppc64/sys/powerpc/include/spr.h projects/ppc64/sys/powerpc/powermac/cpcht.c projects/ppc64/sys/powerpc/powermac/uninorth.c projects/ppc64/sys/powerpc/powerpc/bcopy.c projects/ppc64/sys/powerpc/powerpc/cpu.c projects/ppc64/sys/powerpc/powerpc/db_interface.c projects/ppc64/sys/powerpc/powerpc/db_trace.c projects/ppc64/sys/powerpc/powerpc/syncicache.c Modified: projects/ppc64/sys/conf/Makefile.powerpc64 ============================================================================== --- projects/ppc64/sys/conf/Makefile.powerpc64 Sun Jul 26 00:16:43 2009 (r195880) +++ projects/ppc64/sys/conf/Makefile.powerpc64 Sun Jul 26 03:20:12 2009 (r195881) @@ -8,7 +8,7 @@ # This makefile is constructed from a machine description: # config machineid # Most changes should be made in the machine description -# /sys/powerpc/conf/``machineid'' +# /sys/powerpc64/conf/``machineid'' # after which you should do # config machineid # Generic makefile changes should be made in Modified: projects/ppc64/sys/conf/files.powerpc ============================================================================== --- projects/ppc64/sys/conf/files.powerpc Sun Jul 26 00:16:43 2009 (r195880) +++ projects/ppc64/sys/conf/files.powerpc Sun Jul 26 03:20:12 2009 (r195881) @@ -77,7 +77,6 @@ powerpc/aim/interrupt.c optional aim powerpc/aim/locore.S optional aim no-obj powerpc/aim/machdep.c optional aim powerpc/aim/mmu_oea.c optional aim -powerpc/aim/mmu_oea64.c optional aim powerpc/aim/mp_cpudep.c optional aim smp powerpc/aim/nexus.c optional aim powerpc/aim/ofw_machdep.c optional aim @@ -87,6 +86,7 @@ powerpc/aim/swtch.S optional aim powerpc/aim/trap.c optional aim powerpc/aim/uma_machdep.c optional aim powerpc/aim/vm_machdep.c optional aim +powerpc/aim64/mmu_oea64.c optional aim powerpc/booke/clock.c optional e500 powerpc/booke/copyinout.c optional e500 powerpc/booke/interrupt.c optional e500 Modified: projects/ppc64/sys/conf/files.powerpc64 ============================================================================== --- projects/ppc64/sys/conf/files.powerpc64 Sun Jul 26 00:16:43 2009 (r195880) +++ projects/ppc64/sys/conf/files.powerpc64 Sun Jul 26 03:20:12 2009 (r195881) @@ -17,7 +17,6 @@ font.h optional sc \ crypto/blowfish/bf_enc.c optional crypto | ipsec crypto/des/des_enc.c optional crypto | ipsec | netsmb -dev/bm/if_bm.c optional bm powermac dev/adb/adb_bus.c optional adb dev/adb/adb_kbd.c optional adb dev/adb/adb_mouse.c optional adb @@ -39,7 +38,6 @@ dev/ofw/ofw_standard.c optional aim dev/powermac_nvram/powermac_nvram.c optional powermac_nvram powermac dev/scc/scc_bfe_macio.c optional scc powermac dev/sound/macio/aoa.c optional snd_davbus | snd_ai2s powermac -dev/sound/macio/davbus.c optional snd_davbus powermac dev/sound/macio/i2s.c optional snd_ai2s powermac dev/sound/macio/snapper.c optional snd_ai2s iicbus powermac dev/sound/macio/tumbler.c optional snd_ai2s iicbus powermac @@ -66,21 +64,20 @@ libkern/ucmpdi2.c standard libkern/udivdi3.c standard libkern/umoddi3.c standard powerpc/aim/clock.c optional aim -powerpc/aim/copyinout.c optional aim powerpc/aim/interrupt.c optional aim -powerpc/aim/locore.S optional aim no-obj -powerpc/aim/machdep.c optional aim -powerpc/aim/mmu_oea.c optional aim -powerpc/aim/mmu_oea64.c optional aim powerpc/aim/mp_cpudep.c optional aim smp powerpc/aim/nexus.c optional aim powerpc/aim/ofw_machdep.c optional aim powerpc/aim/ofwmagic.S optional aim powerpc/aim/platform_chrp.c optional aim -powerpc/aim/swtch.S optional aim powerpc/aim/trap.c optional aim powerpc/aim/uma_machdep.c optional aim powerpc/aim/vm_machdep.c optional aim +#powerpc/aim64/copyinout.c optional aim +powerpc/aim64/locore.S optional aim no-obj +powerpc/aim64/machdep.c optional aim +powerpc/aim64/mmu_oea64.c optional aim +powerpc/aim64/swtch.S optional aim powerpc/cpufreq/dfs.c optional cpufreq powerpc/cpufreq/pcr.c optional cpufreq aim powerpc/ofw/ofw_cpu.c optional aim @@ -91,11 +88,8 @@ powerpc/ofw/ofw_syscons.c optional sc ai powerpc/powermac/ata_kauai.c optional powermac ata | powermac atamacio powerpc/powermac/ata_macio.c optional powermac ata | powermac atamacio powerpc/powermac/ata_dbdma.c optional powermac ata | powermac atamacio -powerpc/powermac/cuda.c optional powermac cuda powerpc/powermac/cpcht.c optional powermac pci powerpc/powermac/dbdma.c optional powermac pci -powerpc/powermac/grackle.c optional powermac pci -powerpc/powermac/hrowpic.c optional powermac pci powerpc/powermac/kiic.c optional powermac kiic powerpc/powermac/macgpio.c optional powermac pci powerpc/powermac/macio.c optional powermac pci @@ -140,7 +134,3 @@ powerpc/powerpc/suswintr.c standard powerpc/powerpc/syncicache.c standard powerpc/powerpc/sys_machdep.c standard powerpc/powerpc/uio_machdep.c standard -powerpc/psim/iobus.c optional psim -powerpc/psim/ata_iobus.c optional ata psim -powerpc/psim/openpic_iobus.c optional psim -powerpc/psim/uart_iobus.c optional uart psim Modified: projects/ppc64/sys/conf/ldscript.powerpc64 ============================================================================== --- projects/ppc64/sys/conf/ldscript.powerpc64 Sun Jul 26 00:16:43 2009 (r195880) +++ projects/ppc64/sys/conf/ldscript.powerpc64 Sun Jul 26 03:20:12 2009 (r195881) @@ -1,6 +1,6 @@ /* $FreeBSD$ */ -OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc") +OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc", "elf64-powerpc") OUTPUT_ARCH(powerpc) ENTRY(__start) SEARCH_DIR(/usr/lib); Copied: projects/ppc64/sys/powerpc/aim64/locore.S (from r195651, projects/ppc64/sys/powerpc/aim/locore.S) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/aim64/locore.S Sun Jul 26 03:20:12 2009 (r195881, copy of r195651, projects/ppc64/sys/powerpc/aim/locore.S) @@ -0,0 +1,209 @@ +/* $FreeBSD$ */ +/* $NetBSD: locore.S,v 1.24 2000/05/31 05:09:17 thorpej Exp $ */ + +/*- + * Copyright (C) 2001 Benno Rice + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY Benno Rice ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/*- + * Copyright (C) 1995, 1996 Wolfgang Solfrank. + * Copyright (C) 1995, 1996 TooLs GmbH. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by TooLs GmbH. + * 4. The name of TooLs GmbH may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "assym.s" + +#include + +#include +#include +#include +#include +#include +#include + +/* Locate the per-CPU data structure */ +#define GET_CPUINFO(r) \ + mfsprg0 r + +/* + * Compiled KERNBASE location and the kernel load address + */ + .globl kernbase + .set kernbase, KERNBASE + +#define TMPSTKSZ 8192 /* 8K temporary stack */ + +/* + * Globals + */ + .data + .align 4 +GLOBAL(tmpstk) + .space TMPSTKSZ +GLOBAL(esym) + .long 0 /* end of symbol table */ + +GLOBAL(ofmsr) + .long 0, 0, 0, 0, 0 /* msr/sprg0-3 used in Open Firmware */ + +#define INTRCNT_COUNT 256 /* max(HROWPIC_IRQMAX,OPENPIC_IRQMAX) */ +GLOBAL(intrnames) + .space INTRCNT_COUNT * (MAXCOMLEN + 1) * 2 +GLOBAL(eintrnames) + .align 4 +GLOBAL(intrcnt) + .space INTRCNT_COUNT * 4 * 2 +GLOBAL(eintrcnt) + +/* + * File-scope for locore.S + */ +idle_u: + .long 0 /* fake uarea during idle after exit */ +openfirmware_entry: + .long 0 /* Open Firmware entry point */ +srsave: + .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + .text + .globl btext +btext: + +/* + * This symbol is here for the benefit of kvm_mkdb, and is supposed to + * mark the start of kernel text. + */ + .globl kernel_text +kernel_text: + +/* + * Startup entry. Note, this must be the first thing in the text + * segment! + */ + .text + .globl __start +__start: + li 8,0 + li 9,0x100 + mtctr 9 +1: + dcbf 0,8 + icbi 0,8 + addi 8,8,0x20 + bdnz 1b + sync + isync + + /* Save the argument pointer and length */ + mr 20,6 + mr 21,7 + + lis 8,openfirmware_entry@ha + stw 5,openfirmware_entry@l(8) /* save client interface handler */ + + lis 1,(tmpstk+TMPSTKSZ-16)@ha + addi 1,1,(tmpstk+TMPSTKSZ-16)@l + + mfmsr 0 + lis 9,ofmsr@ha + stwu 0,ofmsr@l(9) + + mfsprg0 0 /* save SPRG0-3 */ + stw 0,4(9) /* ofmsr[1] = sprg0 */ + mfsprg1 0 + stw 0,8(9) /* ofmsr[2] = sprg1 */ + mfsprg2 0 + stw 0,12(9) /* ofmsr[3] = sprg2 */ + mfsprg3 0 + stw 0,16(9) /* ofmsr[4] = sprg3 */ + + bl OF_initial_setup + + lis 4,end@ha + addi 4,4,end@l + mr 5,4 + + lis 3,kernel_text@ha + addi 3,3,kernel_text@l + + /* Restore the argument pointer and length */ + mr 6,20 + mr 7,21 + + bl powerpc_init + mr %r1, %r3 + li %r3, 0 + stw %r3, 0(%r1) + bl mi_startup + b OF_exit + +/* + * int setfault() + * + * Similar to setjmp to setup for handling faults on accesses to user memory. + * Any routine using this may only call bcopy, either the form below, + * or the (currently used) C code optimized, so it doesn't use any non-volatile + * registers. + */ + .globl setfault +setfault: + mflr 0 + mfcr 12 + mfsprg 4,0 + lwz 4,PC_CURTHREAD(4) + lwz 4,TD_PCB(4) + stw 3,PCB_ONFAULT(4) + stw 0,0(3) + stw 1,4(3) + stw 2,8(3) + stmw 12,12(3) + xor 3,3,3 + blr + +#include Copied and modified: projects/ppc64/sys/powerpc/aim64/machdep.c (from r195651, projects/ppc64/sys/powerpc/aim/machdep.c) ============================================================================== --- projects/ppc64/sys/powerpc/aim/machdep.c Mon Jul 13 01:37:48 2009 (r195651, copy source) +++ projects/ppc64/sys/powerpc/aim64/machdep.c Sun Jul 26 03:20:12 2009 (r195881) @@ -137,7 +137,7 @@ struct pcpu __pcpu[MAXCPU]; static struct trapframe frame0; -char machine[] = "powerpc"; +char machine[] = "powerpc64"; SYSCTL_STRING(_hw, HW_MACHINE, machine, CTLFLAG_RD, machine, 0, ""); static void cpu_startup(void *); @@ -163,9 +163,7 @@ long Maxmem = 0; long realmem = 0; struct pmap ofw_pmap; -extern int ofmsr; - -struct bat battable[16]; +extern register_t ofmsr; struct kva_md_info kmi; @@ -209,7 +207,7 @@ cpu_startup(void *dummy) for (indx = 0; phys_avail[indx + 1] != 0; indx += 2) { int size1 = phys_avail[indx + 1] - phys_avail[indx]; - printf("0x%08x - 0x%08x, %d bytes (%d pages)\n", + printf("0x%16lx - 0x%16lx, %d bytes (%d pages)\n", phys_avail[indx], phys_avail[indx + 1] - 1, size1, size1 / PAGE_SIZE); } @@ -232,7 +230,6 @@ cpu_startup(void *dummy) extern char kernel_text[], _end[]; -extern void *testppc64, *testppc64size; extern void *restorebridge, *restorebridgesize; extern void *rfid_patch, *rfi_patch1, *rfi_patch2; #ifdef SMP @@ -250,16 +247,13 @@ powerpc_init(u_int startkernel, u_int en { struct pcpu *pc; vm_offset_t end; - void *generictrap; - size_t trap_offset; void *kmdp; char *env; - uint32_t msr, scratch; + register_t msr, scratch; uint8_t *cache_check; end = 0; kmdp = NULL; - trap_offset = 0; /* * Parse metadata if present and fetch parameters. Must be done @@ -342,15 +336,15 @@ powerpc_init(u_int startkernel, u_int en case IBM970FX: case IBM970MP: case IBM970GX: - scratch = mfspr64upper(SPR_HID5,msr); - scratch &= ~HID5_970_DCBZ_SIZE_HI; - mtspr64(SPR_HID5, scratch, mfspr(SPR_HID5), msr); + scratch = mfspr(SPR_HID5); + scratch &= ~((register_t)HID5_970_DCBZ_SIZE_HI << 32); + mtspr(SPR_HID5, scratch); break; } /* * Initialize the interrupt tables and figure out our cache line - * size and whether or not we need the 64-bit bridge code. + * size. */ /* @@ -365,8 +359,8 @@ powerpc_init(u_int startkernel, u_int en /* * Measure the cacheline size using dcbz * - * Use EXC_PGM as a playground. We are about to overwrite it - * anyway, we know it exists, and we know it is cache-aligned. + * Use EXC_PGM as a playground. We know it exists, is available + * in real mode, and is cache-aligned. */ cache_check = (void *)EXC_PGM; @@ -380,96 +374,40 @@ powerpc_init(u_int startkernel, u_int en for (cacheline_size = 0; cacheline_size < 0x100 && cache_check[cacheline_size] == 0; cacheline_size++); - /* Work around psim bug */ - if (cacheline_size == 0) { - printf("WARNING: cacheline size undetermined, setting to 32\n"); - cacheline_size = 32; - } - /* - * Figure out whether we need to use the 64 bit PMAP. This works by - * executing an instruction that is only legal on 64-bit PPC (mtmsrd), - * and setting ppc64 = 0 if that causes a trap. + * This is a PPC64 system */ ppc64 = 1; - bcopy(&testppc64, (void *)EXC_PGM, (size_t)&testppc64size); - __syncicache((void *)EXC_PGM, (size_t)&testppc64size); - - __asm __volatile("\ - mfmsr %0; \ - mtsprg2 %1; \ - \ - mtmsrd %0; \ - mfsprg2 %1;" - : "=r"(scratch), "=r"(ppc64)); - - /* - * Now copy restorebridge into all the handlers, if necessary, - * and set up the trap tables. - */ - - if (ppc64) { - /* Patch the two instances of rfi -> rfid */ - bcopy(&rfid_patch,&rfi_patch1,4); - #ifdef KDB - /* rfi_patch2 is at the end of dbleave */ - bcopy(&rfid_patch,&rfi_patch2,4); - #endif - - /* - * Copy a code snippet to restore 32-bit bridge mode - * to the top of every non-generic trap handler - */ - - trap_offset += (size_t)&restorebridgesize; - bcopy(&restorebridge, (void *)EXC_RST, trap_offset); - bcopy(&restorebridge, (void *)EXC_DSI, trap_offset); - bcopy(&restorebridge, (void *)EXC_ALI, trap_offset); - bcopy(&restorebridge, (void *)EXC_PGM, trap_offset); - bcopy(&restorebridge, (void *)EXC_MCHK, trap_offset); - bcopy(&restorebridge, (void *)EXC_TRC, trap_offset); - bcopy(&restorebridge, (void *)EXC_BPT, trap_offset); - - /* - * Set the common trap entry point to the one that - * knows to restore 32-bit operation on execution. - */ - - generictrap = &trapcode64; - } else { - generictrap = &trapcode; - } - #ifdef SMP - bcopy(&rstcode, (void *)(EXC_RST + trap_offset), (size_t)&rstsize); + bcopy(&rstcode, (void *)EXC_RST, (size_t)&rstsize); #else - bcopy(generictrap, (void *)EXC_RST, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_RST, (size_t)&trapsize); #endif #ifdef KDB - bcopy(&dblow, (void *)(EXC_MCHK + trap_offset), (size_t)&dbsize); - bcopy(&dblow, (void *)(EXC_PGM + trap_offset), (size_t)&dbsize); - bcopy(&dblow, (void *)(EXC_TRC + trap_offset), (size_t)&dbsize); - bcopy(&dblow, (void *)(EXC_BPT + trap_offset), (size_t)&dbsize); + bcopy(&dblow, (void *)EXC_MCHK, (size_t)&dbsize); + bcopy(&dblow, (void *)EXC_PGM, (size_t)&dbsize); + bcopy(&dblow, (void *)EXC_TRC, (size_t)&dbsize); + bcopy(&dblow, (void *)EXC_BPT, (size_t)&dbsize); #else - bcopy(generictrap, (void *)EXC_MCHK, (size_t)&trapsize); - bcopy(generictrap, (void *)EXC_PGM, (size_t)&trapsize); - bcopy(generictrap, (void *)EXC_TRC, (size_t)&trapsize); - bcopy(generictrap, (void *)EXC_BPT, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_MCHK, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_PGM, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_TRC, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_BPT, (size_t)&trapsize); #endif - bcopy(&dsitrap, (void *)(EXC_DSI + trap_offset), (size_t)&dsisize); - bcopy(&alitrap, (void *)(EXC_ALI + trap_offset), (size_t)&alisize); - bcopy(generictrap, (void *)EXC_ISI, (size_t)&trapsize); - bcopy(generictrap, (void *)EXC_EXI, (size_t)&trapsize); - bcopy(generictrap, (void *)EXC_FPU, (size_t)&trapsize); - bcopy(generictrap, (void *)EXC_DECR, (size_t)&trapsize); - bcopy(generictrap, (void *)EXC_SC, (size_t)&trapsize); - bcopy(generictrap, (void *)EXC_FPA, (size_t)&trapsize); - bcopy(generictrap, (void *)EXC_VEC, (size_t)&trapsize); - bcopy(generictrap, (void *)EXC_VECAST, (size_t)&trapsize); - bcopy(generictrap, (void *)EXC_THRM, (size_t)&trapsize); + bcopy(&dsitrap, (void *)(EXC_DSI), (size_t)&dsisize); + bcopy(&alitrap, (void *)(EXC_ALI), (size_t)&alisize); + bcopy(&trapcode, (void *)EXC_ISI, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_EXI, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_FPU, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_DECR, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_SC, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_FPA, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_VEC, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_VECAST, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_THRM, (size_t)&trapsize); __syncicache(EXC_RSVD, EXC_LAST - EXC_RSVD); /* @@ -489,10 +427,7 @@ powerpc_init(u_int startkernel, u_int en * in case the platform module had a better idea of what we * should do. */ - if (ppc64) - pmap_mmu_install(MMU_TYPE_G5, BUS_PROBE_GENERIC); - else - pmap_mmu_install(MMU_TYPE_OEA, BUS_PROBE_GENERIC); + pmap_mmu_install(MMU_TYPE_G5, BUS_PROBE_GENERIC); pmap_bootstrap(startkernel, endkernel); mtmsr(mfmsr() | PSL_IR|PSL_DR|PSL_ME|PSL_RI); @@ -720,15 +655,6 @@ sigreturn(struct thread *td, struct sigr return (EJUSTRETURN); } -#ifdef COMPAT_FREEBSD4 -int -freebsd4_sigreturn(struct thread *td, struct freebsd4_sigreturn_args *uap) -{ - - return sigreturn(td, (struct sigreturn_args *)uap); -} -#endif - /* * Construct a PCB from a trapframe. This is called from kdb_trap() where * we want to start a backtrace from the function that caused us to enter @@ -907,7 +833,7 @@ cpu_idle(int busy) #ifdef INVARIANTS if ((msr & PSL_EE) != PSL_EE) { struct thread *td = curthread; - printf("td msr %x\n", td->td_md.md_saved_msr); + printf("td msr %#lx\n", td->td_md.md_saved_msr); panic("ints disabled in idleproc!"); } #endif Copied and modified: projects/ppc64/sys/powerpc/aim64/mmu_oea64.c (from r195651, projects/ppc64/sys/powerpc/aim/mmu_oea64.c) ============================================================================== --- projects/ppc64/sys/powerpc/aim/mmu_oea64.c Mon Jul 13 01:37:48 2009 (r195651, copy source) +++ projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Sun Jul 26 03:20:12 2009 (r195881) @@ -142,6 +142,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -159,10 +160,10 @@ __FBSDID("$FreeBSD$"); #define TODO panic("%s: not implemented", __func__); -static __inline u_int32_t -cntlzw(volatile u_int32_t a) { - u_int32_t b; - __asm ("cntlzw %0, %1" : "=r"(b) : "r"(a)); +static __inline register_t +cntlzd(volatile register_t a) { + register_t b; + __asm ("cntlzd %0, %1" : "=r"(b) : "r"(a)); return b; } @@ -709,8 +710,8 @@ moea64_bridge_cpu_bootstrap(mmu_t mmup, mtsrin(i << ADDR_SR_SHFT, kernel_pmap->pm_sr[i]); } __asm __volatile ("sync; mtsdr1 %0; isync" - :: "r"((u_int)moea64_pteg_table - | (32 - cntlzw(moea64_pteg_mask >> 11)))); + :: "r"((uintptr_t)moea64_pteg_table + | (64 - cntlzd(moea64_pteg_mask >> 11)))); tlbia(); } @@ -1156,7 +1157,7 @@ moea64_zero_page_area(mmu_t mmu, vm_page vm_offset_t pa = VM_PAGE_TO_PHYS(m); if (!moea64_initialized) - panic("moea64_zero_page: can't zero pa %#x", pa); + panic("moea64_zero_page: can't zero pa %#" PRIxPTR, pa); if (size + off > PAGE_SIZE) panic("moea64_zero_page: size + off > PAGE_SIZE"); @@ -1571,7 +1572,8 @@ moea64_kenter(mmu_t mmu, vm_offset_t va, if (!pmap_bootstrapped) { if (va >= VM_MIN_KERNEL_ADDRESS && va < VM_MAX_KERNEL_ADDRESS) - panic("Trying to enter an address in KVA -- %#x!\n",pa); + panic("Trying to enter an address in KVA -- %#" + PRIxPTR "!\n",pa); } pte_lo = moea64_calc_wimg(pa); @@ -1584,7 +1586,7 @@ moea64_kenter(mmu_t mmu, vm_offset_t va, TLBIE(kernel_pmap, va); if (error != 0 && error != ENOENT) - panic("moea64_kenter: failed to enter va %#x pa %#x: %d", va, + panic("moea64_kenter: failed to enter va %#zx pa %#zx: %d", va, pa, error); /* @@ -2032,7 +2034,7 @@ moea64_pvo_enter(pmap_t pm, uma_zone_t z */ if (bootstrap) { if (moea64_bpvo_pool_index >= BPVO_POOL_SIZE) { - panic("moea64_enter: bpvo pool exhausted, %d, %d, %d", + panic("moea64_enter: bpvo pool exhausted, %d, %d, %zd", moea64_bpvo_pool_index, BPVO_POOL_SIZE, BPVO_POOL_SIZE * sizeof(struct pvo_entry)); } Copied: projects/ppc64/sys/powerpc/aim64/swtch.S (from r195651, projects/ppc64/sys/powerpc/aim/swtch.S) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/aim64/swtch.S Sun Jul 26 03:20:12 2009 (r195881, copy of r195651, projects/ppc64/sys/powerpc/aim/swtch.S) @@ -0,0 +1,190 @@ +/* $FreeBSD$ */ +/* $NetBSD: locore.S,v 1.24 2000/05/31 05:09:17 thorpej Exp $ */ + +/*- + * Copyright (C) 2001 Benno Rice + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY Benno Rice ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/*- + * Copyright (C) 1995, 1996 Wolfgang Solfrank. + * Copyright (C) 1995, 1996 TooLs GmbH. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by TooLs GmbH. + * 4. The name of TooLs GmbH may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "assym.s" + +#include + +#include +#include +#include +#include +#include + +/* + * void cpu_throw(struct thread *old, struct thread *new) + */ +ENTRY(cpu_throw) + mr %r15, %r4 + b cpu_switchin + +/* + * void cpu_switch(struct thread *old, + * struct thread *new, + * struct mutex *mtx); + * + * Switch to a new thread saving the current state in the old thread. + */ +ENTRY(cpu_switch) + stw %r5,TD_LOCK(%r3) /* ULE: update old thread's lock */ + /* XXX needs to change for MP */ + + lwz %r5,TD_PCB(%r3) /* Get the old thread's PCB ptr */ + mr %r12,%r2 + stmw %r12,PCB_CONTEXT(%r5) /* Save the non-volatile GP regs. + These can now be used for scratch */ + + mfcr %r16 /* Save the condition register */ + stw %r16,PCB_CR(%r5) + mflr %r16 /* Save the link register */ + stw %r16,PCB_LR(%r5) + mfsr %r16,USER_SR /* Save USER_SR for copyin/out */ + isync + stw %r16,PCB_AIM_USR(%r5) + stw %r1,PCB_SP(%r5) /* Save the stack pointer */ + + mr %r14,%r3 /* Copy the old thread ptr... */ + mr %r15,%r4 /* and the new thread ptr in scratch */ + + lwz %r6,PCB_FLAGS(%r5) + /* Save FPU context if needed */ + andi. %r6, %r6, PCB_FPU + beq .L1 + bl save_fpu + +.L1: + lwz %r6,PCB_FLAGS(%r5) + /* Save Altivec context if needed */ + andi. %r6, %r6, PCB_VEC + beq .L2 + bl save_vec + +.L2: + mr %r3,%r14 /* restore old thread ptr */ + bl pmap_deactivate /* Deactivate the current pmap */ + +cpu_switchin: + mfsprg %r7,0 /* Get the pcpu pointer */ + stw %r15,PC_CURTHREAD(%r7) /* Store new current thread */ + lwz %r17,TD_PCB(%r15) /* Store new current PCB */ + stw %r17,PC_CURPCB(%r7) + + mr %r3,%r15 /* Get new thread ptr */ + bl pmap_activate /* Activate the new address space */ + + lwz %r6, PCB_FLAGS(%r17) + /* Restore FPU context if needed */ + andi. %r6, %r6, PCB_FPU + beq .L3 + mr %r3,%r15 /* Pass curthread to enable_fpu */ + bl enable_fpu + +.L3: + lwz %r6, PCB_FLAGS(%r17) + /* Restore Altivec context if needed */ + andi. %r6, %r6, PCB_VEC + beq .L4 + mr %r3,%r15 /* Pass curthread to enable_vec */ + bl enable_vec + + /* thread to restore is in r3 */ +.L4: + mr %r3,%r17 /* Recover PCB ptr */ + lmw %r12,PCB_CONTEXT(%r3) /* Load the non-volatile GP regs */ + mr %r2,%r12 + lwz %r5,PCB_CR(%r3) /* Load the condition register */ + mtcr %r5 + lwz %r5,PCB_LR(%r3) /* Load the link register */ + mtlr %r5 + lwz %r5,PCB_AIM_USR(%r3) /* Load the USER_SR segment reg */ + mtsr USER_SR,%r5 + isync + lwz %r1,PCB_SP(%r3) /* Load the stack pointer */ + /* + * Perform a dummy stwcx. to clear any reservations we may have + * inherited from the previous thread. It doesn't matter if the + * stwcx succeeds or not. pcb_context[0] can be clobbered. + */ + stwcx. %r1, 0, %r3 + blr + +/* + * savectx(pcb) + * Update pcb, saving current processor state + */ +ENTRY(savectx) + mr %r12,%r2 + stmw %r12,PCB_CONTEXT(%r3) /* Save the non-volatile GP regs */ + mfcr %r4 /* Save the condition register */ + stw %r4,PCB_CONTEXT(%r3) + blr + +/* + * fork_trampoline() + * Set up the return from cpu_fork() + */ +ENTRY(fork_trampoline) + lwz %r3,CF_FUNC(%r1) + lwz %r4,CF_ARG0(%r1) + lwz %r5,CF_ARG1(%r1) + bl fork_exit + addi %r1,%r1,CF_SIZE-FSP /* Allow 8 bytes in front of + trapframe to simulate FRAME_SETUP + does when allocating space for + a frame pointer/saved LR */ + b trapexit Copied and modified: projects/ppc64/sys/powerpc/aim64/trap_subr.S (from r195651, projects/ppc64/sys/powerpc/aim/trap_subr.S) ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap_subr.S Mon Jul 13 01:37:48 2009 (r195651, copy source) +++ projects/ppc64/sys/powerpc/aim64/trap_subr.S Sun Jul 26 03:20:12 2009 (r195881) @@ -92,116 +92,116 @@ /* Have to enable translation to allow access of kernel stack: */ \ GET_CPUINFO(%r31); \ mfsrr0 %r30; \ - stw %r30,(savearea+CPUSAVE_SRR0)(%r31); /* save SRR0 */ \ + std %r30,(savearea+CPUSAVE_SRR0)(%r31); /* save SRR0 */ \ mfsrr1 %r30; \ - stw %r30,(savearea+CPUSAVE_SRR1)(%r31); /* save SRR1 */ \ + std %r30,(savearea+CPUSAVE_SRR1)(%r31); /* save SRR1 */ \ mfmsr %r30; \ ori %r30,%r30,(PSL_DR|PSL_IR|PSL_RI)@l; /* relocation on */ \ mtmsr %r30; /* stack can now be accessed */ \ isync; \ mfsprg1 %r31; /* get saved SP */ \ - stwu %r31,-FRAMELEN(%r1); /* save it in the callframe */ \ - stw %r0, FRAME_0+8(%r1); /* save r0 in the trapframe */ \ - stw %r31,FRAME_1+8(%r1); /* save SP " " */ \ - stw %r2, FRAME_2+8(%r1); /* save r2 " " */ \ - stw %r28,FRAME_LR+8(%r1); /* save LR " " */ \ + stdu %r31,-FRAMELEN(%r1); /* save it in the callframe */ \ + std %r0, FRAME_0+8(%r1); /* save r0 in the trapframe */ \ + std %r31,FRAME_1+8(%r1); /* save SP " " */ \ + std %r2, FRAME_2+8(%r1); /* save r2 " " */ \ + std %r28,FRAME_LR+8(%r1); /* save LR " " */ \ stw %r29,FRAME_CR+8(%r1); /* save CR " " */ \ GET_CPUINFO(%r2); \ - lwz %r28,(savearea+CPUSAVE_R28)(%r2); /* get saved r28 */ \ - lwz %r29,(savearea+CPUSAVE_R29)(%r2); /* get saved r29 */ \ - lwz %r30,(savearea+CPUSAVE_R30)(%r2); /* get saved r30 */ \ - lwz %r31,(savearea+CPUSAVE_R31)(%r2); /* get saved r31 */ \ - stw %r3, FRAME_3+8(%r1); /* save r3-r31 */ \ - stw %r4, FRAME_4+8(%r1); \ - stw %r5, FRAME_5+8(%r1); \ - stw %r6, FRAME_6+8(%r1); \ - stw %r7, FRAME_7+8(%r1); \ - stw %r8, FRAME_8+8(%r1); \ - stw %r9, FRAME_9+8(%r1); \ - stw %r10, FRAME_10+8(%r1); \ - stw %r11, FRAME_11+8(%r1); \ - stw %r12, FRAME_12+8(%r1); \ - stw %r13, FRAME_13+8(%r1); \ - stw %r14, FRAME_14+8(%r1); \ - stw %r15, FRAME_15+8(%r1); \ - stw %r16, FRAME_16+8(%r1); \ - stw %r17, FRAME_17+8(%r1); \ - stw %r18, FRAME_18+8(%r1); \ - stw %r19, FRAME_19+8(%r1); \ - stw %r20, FRAME_20+8(%r1); \ - stw %r21, FRAME_21+8(%r1); \ - stw %r22, FRAME_22+8(%r1); \ - stw %r23, FRAME_23+8(%r1); \ - stw %r24, FRAME_24+8(%r1); \ - stw %r25, FRAME_25+8(%r1); \ - stw %r26, FRAME_26+8(%r1); \ - stw %r27, FRAME_27+8(%r1); \ - stw %r28, FRAME_28+8(%r1); \ - stw %r29, FRAME_29+8(%r1); \ - stw %r30, FRAME_30+8(%r1); \ - stw %r31, FRAME_31+8(%r1); \ - lwz %r28,(savearea+CPUSAVE_AIM_DAR)(%r2); /* saved DAR */ \ + ld %r28,(savearea+CPUSAVE_R28)(%r2); /* get saved r28 */ \ + ld %r29,(savearea+CPUSAVE_R29)(%r2); /* get saved r29 */ \ + ld %r30,(savearea+CPUSAVE_R30)(%r2); /* get saved r30 */ \ + ld %r31,(savearea+CPUSAVE_R31)(%r2); /* get saved r31 */ \ + std %r3, FRAME_3+8(%r1); /* save r3-r31 */ \ + std %r4, FRAME_4+8(%r1); \ + std %r5, FRAME_5+8(%r1); \ + std %r6, FRAME_6+8(%r1); \ + std %r7, FRAME_7+8(%r1); \ + std %r8, FRAME_8+8(%r1); \ + std %r9, FRAME_9+8(%r1); \ + std %r10, FRAME_10+8(%r1); \ + std %r11, FRAME_11+8(%r1); \ + std %r12, FRAME_12+8(%r1); \ + std %r13, FRAME_13+8(%r1); \ + std %r14, FRAME_14+8(%r1); \ + std %r15, FRAME_15+8(%r1); \ + std %r16, FRAME_16+8(%r1); \ + std %r17, FRAME_17+8(%r1); \ + std %r18, FRAME_18+8(%r1); \ + std %r19, FRAME_19+8(%r1); \ + std %r20, FRAME_20+8(%r1); \ + std %r21, FRAME_21+8(%r1); \ + std %r22, FRAME_22+8(%r1); \ + std %r23, FRAME_23+8(%r1); \ + std %r24, FRAME_24+8(%r1); \ + std %r25, FRAME_25+8(%r1); \ + std %r26, FRAME_26+8(%r1); \ + std %r27, FRAME_27+8(%r1); \ + std %r28, FRAME_28+8(%r1); \ + std %r29, FRAME_29+8(%r1); \ + std %r30, FRAME_30+8(%r1); \ + std %r31, FRAME_31+8(%r1); \ + ld %r28,(savearea+CPUSAVE_AIM_DAR)(%r2); /* saved DAR */ \ lwz %r29,(savearea+CPUSAVE_AIM_DSISR)(%r2);/* saved DSISR */\ - lwz %r30,(savearea+CPUSAVE_SRR0)(%r2); /* saved SRR0 */ \ - lwz %r31,(savearea+CPUSAVE_SRR1)(%r2); /* saved SRR1 */ \ + ld %r30,(savearea+CPUSAVE_SRR0)(%r2); /* saved SRR0 */ \ + ld %r31,(savearea+CPUSAVE_SRR1)(%r2); /* saved SRR1 */ \ mfxer %r3; \ mfctr %r4; \ mfsprg3 %r5; \ - stw %r3, FRAME_XER+8(1); /* save xer/ctr/exc */ \ - stw %r4, FRAME_CTR+8(1); \ - stw %r5, FRAME_EXC+8(1); \ - stw %r28,FRAME_AIM_DAR+8(1); \ + std %r3, FRAME_XER+8(1); /* save xer/ctr/exc */ \ + std %r4, FRAME_CTR+8(1); \ + std %r5, FRAME_EXC+8(1); \ + std %r28,FRAME_AIM_DAR+8(1); \ stw %r29,FRAME_AIM_DSISR+8(1); /* save dsisr/srr0/srr1 */ \ - stw %r30,FRAME_SRR0+8(1); \ - stw %r31,FRAME_SRR1+8(1) + std %r30,FRAME_SRR0+8(1); \ + std %r31,FRAME_SRR1+8(1) #define FRAME_LEAVE(savearea) \ /* Now restore regs: */ \ - lwz %r2,FRAME_SRR0+8(%r1); \ - lwz %r3,FRAME_SRR1+8(%r1); \ - lwz %r4,FRAME_CTR+8(%r1); \ - lwz %r5,FRAME_XER+8(%r1); \ - lwz %r6,FRAME_LR+8(%r1); \ + ld %r2,FRAME_SRR0+8(%r1); \ + ld %r3,FRAME_SRR1+8(%r1); \ + ld %r4,FRAME_CTR+8(%r1); \ + ld %r5,FRAME_XER+8(%r1); \ + ld %r6,FRAME_LR+8(%r1); \ GET_CPUINFO(%r7); \ - stw %r2,(savearea+CPUSAVE_SRR0)(%r7); /* save SRR0 */ \ - stw %r3,(savearea+CPUSAVE_SRR1)(%r7); /* save SRR1 */ \ + std %r2,(savearea+CPUSAVE_SRR0)(%r7); /* save SRR0 */ \ + std %r3,(savearea+CPUSAVE_SRR1)(%r7); /* save SRR1 */ \ lwz %r7,FRAME_CR+8(%r1); \ mtctr %r4; \ mtxer %r5; \ mtlr %r6; \ mtsprg1 %r7; /* save cr */ \ - lwz %r31,FRAME_31+8(%r1); /* restore r0-31 */ \ - lwz %r30,FRAME_30+8(%r1); \ - lwz %r29,FRAME_29+8(%r1); \ - lwz %r28,FRAME_28+8(%r1); \ - lwz %r27,FRAME_27+8(%r1); \ - lwz %r26,FRAME_26+8(%r1); \ - lwz %r25,FRAME_25+8(%r1); \ - lwz %r24,FRAME_24+8(%r1); \ - lwz %r23,FRAME_23+8(%r1); \ - lwz %r22,FRAME_22+8(%r1); \ - lwz %r21,FRAME_21+8(%r1); \ - lwz %r20,FRAME_20+8(%r1); \ - lwz %r19,FRAME_19+8(%r1); \ - lwz %r18,FRAME_18+8(%r1); \ - lwz %r17,FRAME_17+8(%r1); \ - lwz %r16,FRAME_16+8(%r1); \ - lwz %r15,FRAME_15+8(%r1); \ - lwz %r14,FRAME_14+8(%r1); \ - lwz %r13,FRAME_13+8(%r1); \ - lwz %r12,FRAME_12+8(%r1); \ - lwz %r11,FRAME_11+8(%r1); \ - lwz %r10,FRAME_10+8(%r1); \ - lwz %r9, FRAME_9+8(%r1); \ - lwz %r8, FRAME_8+8(%r1); \ - lwz %r7, FRAME_7+8(%r1); \ - lwz %r6, FRAME_6+8(%r1); \ - lwz %r5, FRAME_5+8(%r1); \ - lwz %r4, FRAME_4+8(%r1); \ - lwz %r3, FRAME_3+8(%r1); \ - lwz %r2, FRAME_2+8(%r1); \ - lwz %r0, FRAME_0+8(%r1); \ - lwz %r1, FRAME_1+8(%r1); \ + ld %r31,FRAME_31+8(%r1); /* restore r0-31 */ \ + ld %r30,FRAME_30+8(%r1); \ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Sun Jul 26 07:48:22 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 80759106564A; Sun, 26 Jul 2009 07:48:22 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 63BDF8FC16; Sun, 26 Jul 2009 07:48:22 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6Q7mMtl063475; Sun, 26 Jul 2009 07:48:22 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6Q7mMUK063471; Sun, 26 Jul 2009 07:48:22 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907260748.n6Q7mMUK063471@svn.freebsd.org> From: Stanislav Sedov Date: Sun, 26 Jul 2009 07:48:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195883 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2009 07:48:22 -0000 Author: stas Date: Sun Jul 26 07:48:22 2009 New Revision: 195883 URL: http://svn.freebsd.org/changeset/base/195883 Log: - Install with setgid mode (required for sysctl access). - Discard setgid privilegies after file list retrieval. Modified: projects/libprocstat/usr.bin/fstat/Makefile projects/libprocstat/usr.bin/fstat/fstat.c projects/libprocstat/usr.bin/fstat/fuser.c Modified: projects/libprocstat/usr.bin/fstat/Makefile ============================================================================== --- projects/libprocstat/usr.bin/fstat/Makefile Sun Jul 26 06:38:56 2009 (r195882) +++ projects/libprocstat/usr.bin/fstat/Makefile Sun Jul 26 07:48:22 2009 (r195883) @@ -8,6 +8,8 @@ SRCS= cd9660.c common_kvm.c fstat.c fuse LINKS= ${BINDIR}/fstat ${BINDIR}/fuser DPADD= ${LIBKVM} LDADD= -lkvm -lutil +BINGRP= kmem +BINMODE=2555 WARNS?= 6 MAN1= fuser.1 fstat.1 Modified: projects/libprocstat/usr.bin/fstat/fstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fstat.c Sun Jul 26 06:38:56 2009 (r195882) +++ projects/libprocstat/usr.bin/fstat/fstat.c Sun Jul 26 07:48:22 2009 (r195883) @@ -165,12 +165,19 @@ do_fstat(int argc, char **argv) checkfile = 1; } + /* + * Discard setgid privileges if not the running kernel so that bad + * guys can't print interesting stuff from kernel memory. + */ + if (nlistf != NULL || memf != NULL) + setgid(getgid()); procstat = procstat_open(nlistf, memf); if (procstat == NULL) errx(1, "procstat_open()"); p = procstat_getprocs(procstat, what, arg, &cnt); if (p == NULL) errx(1, "procstat_getprocs()"); + setgid(getgid()); /* * Print header. Modified: projects/libprocstat/usr.bin/fstat/fuser.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fuser.c Sun Jul 26 06:38:56 2009 (r195882) +++ projects/libprocstat/usr.bin/fstat/fuser.c Sun Jul 26 07:48:22 2009 (r195883) @@ -168,11 +168,11 @@ do_fuser(int argc, char *argv[]) struct reqfile *reqfiles; int ch, cnt, sig; unsigned int i, nfiles; - char *ep, *kernimg, *mcore; + char *ep, *nlistf, *memf; sig = SIGKILL; /* Default to kill. */ - kernimg = NULL; - mcore = NULL; + nlistf = NULL; + memf = NULL; while ((ch = getopt(argc, argv, "M:N:cfhkms:u")) != -1) switch(ch) { case 'f': @@ -186,10 +186,10 @@ do_fuser(int argc, char *argv[]) flags |= CFLAG; break; case 'N': - kernimg = optarg; + nlistf = optarg; break; case 'M': - mcore = optarg; + memf = optarg; break; case 'u': flags |= UFLAG; @@ -240,12 +240,19 @@ do_fuser(int argc, char *argv[]) if (nfiles == 0) errx(EX_IOERR, "files not accessible"); - procstat = procstat_open(kernimg, mcore); + /* + * Discard setgid privileges if not the running kernel so that bad + * guys can't print interesting stuff from kernel memory. + */ + if (nlistf != NULL || memf != NULL) + setgid(getgid()); + procstat = procstat_open(nlistf, memf); if (procstat == NULL) errx(1, "procstat_open()"); p = procstat_getprocs(procstat, KERN_PROC_PROC, 0, &cnt); if (p == NULL) errx(1, "procstat_getprocs()"); + setgid(getgid()); /* * Walk through process table and look for matching files. From owner-svn-src-projects@FreeBSD.ORG Sun Jul 26 08:06:38 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9925F106564A; Sun, 26 Jul 2009 08:06:38 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 864C88FC16; Sun, 26 Jul 2009 08:06:38 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6Q86cWV063860; Sun, 26 Jul 2009 08:06:38 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6Q86caH063858; Sun, 26 Jul 2009 08:06:38 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907260806.n6Q86caH063858@svn.freebsd.org> From: Stanislav Sedov Date: Sun, 26 Jul 2009 08:06:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195884 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2009 08:06:38 -0000 Author: stas Date: Sun Jul 26 08:06:38 2009 New Revision: 195884 URL: http://svn.freebsd.org/changeset/base/195884 Log: - Move translation tables to places where they used instead of exposing them globally. Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Sun Jul 26 07:48:22 2009 (r195883) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Sun Jul 26 08:06:38 2009 (r195884) @@ -97,135 +97,6 @@ __FBSDID("$FreeBSD$"); int statfs(const char *, struct statfs *); /* XXX */ -/* - * Vnode-to-filestat types translation table. - */ -static struct { - int vtype; - int fst_vtype; -} vt2fst[] = { - { VNON, PS_FST_VTYPE_VNON }, - { VREG, PS_FST_VTYPE_VREG }, - { VDIR, PS_FST_VTYPE_VDIR }, - { VBLK, PS_FST_VTYPE_VBLK }, - { VCHR, PS_FST_VTYPE_VCHR }, - { VLNK, PS_FST_VTYPE_VLNK }, - { VSOCK, PS_FST_VTYPE_VSOCK }, - { VFIFO, PS_FST_VTYPE_VFIFO }, - { VBAD, PS_FST_VTYPE_VBAD } -}; -#define NVFTYPES (sizeof(vt2fst) / sizeof(*vt2fst)) - -/* - * kinfo tof ilestat vnode types translation table. - */ -static struct { - int kf_vtype; - int fst_vtype; -} kfvtypes2fst[] = { - { KF_VTYPE_VNON, PS_FST_VTYPE_VNON }, - { KF_VTYPE_VREG, PS_FST_VTYPE_VREG }, - { KF_VTYPE_VDIR, PS_FST_VTYPE_VDIR }, - { KF_VTYPE_VBLK, PS_FST_VTYPE_VBLK }, - { KF_VTYPE_VCHR, PS_FST_VTYPE_VCHR }, - { KF_VTYPE_VLNK, PS_FST_VTYPE_VLNK }, - { KF_VTYPE_VSOCK, PS_FST_VTYPE_VSOCK }, - { KF_VTYPE_VFIFO, PS_FST_VTYPE_VFIFO }, - { KF_VTYPE_VBAD, PS_FST_VTYPE_VBAD } -}; -#define NKFVTYPES (sizeof(kfvtypes2fst) / sizeof(*kfvtypes2fst)) - -/* - * Descriptor-to-filestat flags translation table. - */ -static struct { - int flag; - int fst_flag; -} fstflags[] = { - { FREAD, PS_FST_FFLAG_READ }, - { FWRITE, PS_FST_FFLAG_WRITE }, - { O_NONBLOCK, PS_FST_FFLAG_NONBLOCK }, - { O_APPEND, PS_FST_FFLAG_APPEND }, - { O_SHLOCK, PS_FST_FFLAG_SHLOCK }, - { O_EXLOCK, PS_FST_FFLAG_EXLOCK }, - { O_ASYNC, PS_FST_FFLAG_ASYNC }, - { O_SYNC, PS_FST_FFLAG_SYNC }, - { O_NOFOLLOW, PS_FST_FFLAG_NOFOLLOW }, - { O_CREAT, PS_FST_FFLAG_CREAT }, - { O_TRUNC, PS_FST_FFLAG_TRUNC }, - { O_EXCL, PS_FST_FFLAG_EXCL }, - { O_DIRECT, PS_FST_FFLAG_DIRECT }, - { O_EXEC, PS_FST_FFLAG_EXEC } -}; -#define NFSTFLAGS (sizeof(fstflags) / sizeof(*fstflags)) - -/* - * kinfo types to filestat translation table. - */ -static struct { - int kf_type; - int fst_type; -} kftypes2fst[] = { - { KF_TYPE_NONE, PS_FST_TYPE_NONE }, - { KF_TYPE_VNODE, PS_FST_TYPE_VNODE }, - { KF_TYPE_SOCKET, PS_FST_TYPE_SOCKET }, - { KF_TYPE_PIPE, PS_FST_TYPE_PIPE }, - { KF_TYPE_FIFO, PS_FST_TYPE_FIFO }, - { KF_TYPE_KQUEUE, PS_FST_TYPE_KQUEUE }, - { KF_TYPE_CRYPTO, PS_FST_TYPE_CRYPTO }, - { KF_TYPE_MQUEUE, PS_FST_TYPE_MQUEUE }, - { KF_TYPE_SHM, PS_FST_TYPE_SHM }, - { KF_TYPE_SEM, PS_FST_TYPE_SEM }, - { KF_TYPE_PTS, PS_FST_TYPE_PTS }, - { KF_TYPE_UNKNOWN, PS_FST_TYPE_UNKNOWN } -}; -#define NKFTYPES (sizeof(kftypes2fst) / sizeof(*kftypes2fst)) - -/* - * kinfo flags to filestat translation table. - */ -static struct { - int kf_flag; - int fst_flag; -} kfflags2fst[] = { - { KF_FLAG_READ, PS_FST_FFLAG_READ }, - { KF_FLAG_WRITE, PS_FST_FFLAG_WRITE }, - { KF_FLAG_NONBLOCK, PS_FST_FFLAG_NONBLOCK }, - { KF_FLAG_APPEND, PS_FST_FFLAG_APPEND }, - { KF_FLAG_HASLOCK, PS_FST_FFLAG_SHLOCK }, /* XXX: which lock? */ - { KF_FLAG_ASYNC, PS_FST_FFLAG_ASYNC }, - { KF_FLAG_FSYNC, PS_FST_FFLAG_SYNC }, - { KF_FLAG_DIRECT, PS_FST_FFLAG_DIRECT }, - /* XXX: other types? */ -}; -#define NKFFLAGS (sizeof(kfflags2fst) / sizeof(*kfflags2fst)) - -/* - * Filesystem specific handlers. - */ -#define FSTYPE(fst) {#fst, fst##_filestat} -struct { - const char *tag; - int (*handler)(kvm_t *kd, struct vnode *vp, - struct vnstat *vn); -} fstypes[] = { - FSTYPE(ufs), - FSTYPE(devfs), - FSTYPE(nfs), - FSTYPE(msdosfs), - FSTYPE(isofs), -#ifdef ZFS - FSTYPE(zfs), -#endif -/* - FSTYPE(ntfs), - FSTYPE(nwfs), - FSTYPE(smbfs), - FSTYPE(udf), -*/ -}; -#define NTYPES (sizeof(fstypes) / sizeof(*fstypes)) - #define PROCSTAT_KVM 1 #define PROCSTAT_SYSCTL 2 @@ -574,9 +445,30 @@ exit: return (head); } +/* + * kinfo types to filestat translation. + */ static int kinfo_type2fst(int kftype) { + static struct { + int kf_type; + int fst_type; + } kftypes2fst[] = { + { KF_TYPE_NONE, PS_FST_TYPE_NONE }, + { KF_TYPE_VNODE, PS_FST_TYPE_VNODE }, + { KF_TYPE_SOCKET, PS_FST_TYPE_SOCKET }, + { KF_TYPE_PIPE, PS_FST_TYPE_PIPE }, + { KF_TYPE_FIFO, PS_FST_TYPE_FIFO }, + { KF_TYPE_KQUEUE, PS_FST_TYPE_KQUEUE }, + { KF_TYPE_CRYPTO, PS_FST_TYPE_CRYPTO }, + { KF_TYPE_MQUEUE, PS_FST_TYPE_MQUEUE }, + { KF_TYPE_SHM, PS_FST_TYPE_SHM }, + { KF_TYPE_SEM, PS_FST_TYPE_SEM }, + { KF_TYPE_PTS, PS_FST_TYPE_PTS }, + { KF_TYPE_UNKNOWN, PS_FST_TYPE_UNKNOWN } + }; +#define NKFTYPES (sizeof(kftypes2fst) / sizeof(*kftypes2fst)) unsigned int i; for (i = 0; i < NKFTYPES; i++) @@ -587,9 +479,27 @@ kinfo_type2fst(int kftype) return (kftypes2fst[i].fst_type); } +/* + * kinfo flags to filestat translation. + */ static int kinfo_fflags2fst(int kfflags) { + static struct { + int kf_flag; + int fst_flag; + } kfflags2fst[] = { + { KF_FLAG_READ, PS_FST_FFLAG_READ }, + { KF_FLAG_WRITE, PS_FST_FFLAG_WRITE }, + { KF_FLAG_NONBLOCK, PS_FST_FFLAG_NONBLOCK }, + { KF_FLAG_APPEND, PS_FST_FFLAG_APPEND }, + { KF_FLAG_HASLOCK, PS_FST_FFLAG_SHLOCK }, /* XXX: which lock? */ + { KF_FLAG_ASYNC, PS_FST_FFLAG_ASYNC }, + { KF_FLAG_FSYNC, PS_FST_FFLAG_SYNC }, + { KF_FLAG_DIRECT, PS_FST_FFLAG_DIRECT }, + /* XXX: other types? */ + }; +#define NKFFLAGS (sizeof(kfflags2fst) / sizeof(*kfflags2fst)) unsigned int i; int flags; @@ -811,11 +721,33 @@ static int procstat_get_vnode_info_kvm(kvm_t *kd, struct filestat *fst, struct vnstat *vn, char *errbuf) { - char tagstr[12]; - int error; - int found; + /* Filesystem specific handlers. */ + #define FSTYPE(fst) {#fst, fst##_filestat} + struct { + const char *tag; + int (*handler)(kvm_t *kd, struct vnode *vp, + struct vnstat *vn); + } fstypes[] = { + FSTYPE(ufs), + FSTYPE(devfs), + FSTYPE(nfs), + FSTYPE(msdosfs), + FSTYPE(isofs), +#ifdef ZFS + FSTYPE(zfs), +#endif +/* + FSTYPE(ntfs), + FSTYPE(nwfs), + FSTYPE(smbfs), + FSTYPE(udf), +*/ + }; +#define NTYPES (sizeof(fstypes) / sizeof(*fstypes)) struct vnode vnode; + char tagstr[12]; void *vp; + int error, found; unsigned int i; assert(kd); @@ -870,9 +802,27 @@ fail: return (1); } +/* + * kinfo vnode type to filestat translation. + */ static int kinfo_vtype2fst(int kfvtype) { + static struct { + int kf_vtype; + int fst_vtype; + } kfvtypes2fst[] = { + { KF_VTYPE_VNON, PS_FST_VTYPE_VNON }, + { KF_VTYPE_VREG, PS_FST_VTYPE_VREG }, + { KF_VTYPE_VDIR, PS_FST_VTYPE_VDIR }, + { KF_VTYPE_VBLK, PS_FST_VTYPE_VBLK }, + { KF_VTYPE_VCHR, PS_FST_VTYPE_VCHR }, + { KF_VTYPE_VLNK, PS_FST_VTYPE_VLNK }, + { KF_VTYPE_VSOCK, PS_FST_VTYPE_VSOCK }, + { KF_VTYPE_VFIFO, PS_FST_VTYPE_VFIFO }, + { KF_VTYPE_VBAD, PS_FST_VTYPE_VBAD } + }; +#define NKFVTYPES (sizeof(kfvtypes2fst) / sizeof(*kfvtypes2fst)) unsigned int i; for (i = 0; i < NKFVTYPES; i++) @@ -1085,9 +1035,32 @@ procstat_get_socket_info_sysctl(struct f return (0); } +/* + * Descriptor flags to filestat translation. + */ static int to_filestat_flags(int flags) { + static struct { + int flag; + int fst_flag; + } fstflags[] = { + { FREAD, PS_FST_FFLAG_READ }, + { FWRITE, PS_FST_FFLAG_WRITE }, + { O_NONBLOCK, PS_FST_FFLAG_NONBLOCK }, + { O_APPEND, PS_FST_FFLAG_APPEND }, + { O_SHLOCK, PS_FST_FFLAG_SHLOCK }, + { O_EXLOCK, PS_FST_FFLAG_EXLOCK }, + { O_ASYNC, PS_FST_FFLAG_ASYNC }, + { O_SYNC, PS_FST_FFLAG_SYNC }, + { O_NOFOLLOW, PS_FST_FFLAG_NOFOLLOW }, + { O_CREAT, PS_FST_FFLAG_CREAT }, + { O_TRUNC, PS_FST_FFLAG_TRUNC }, + { O_EXCL, PS_FST_FFLAG_EXCL }, + { O_DIRECT, PS_FST_FFLAG_DIRECT }, + { O_EXEC, PS_FST_FFLAG_EXEC } + }; +#define NFSTFLAGS (sizeof(fstflags) / sizeof(*fstflags)) int fst_flags; unsigned int i; @@ -1098,9 +1071,27 @@ to_filestat_flags(int flags) return (fst_flags); } +/* + * Vnode type to filestate translation. + */ static int vntype2psfsttype(int type) { + static struct { + int vtype; + int fst_vtype; + } vt2fst[] = { + { VNON, PS_FST_VTYPE_VNON }, + { VREG, PS_FST_VTYPE_VREG }, + { VDIR, PS_FST_VTYPE_VDIR }, + { VBLK, PS_FST_VTYPE_VBLK }, + { VCHR, PS_FST_VTYPE_VCHR }, + { VLNK, PS_FST_VTYPE_VLNK }, + { VSOCK, PS_FST_VTYPE_VSOCK }, + { VFIFO, PS_FST_VTYPE_VFIFO }, + { VBAD, PS_FST_VTYPE_VBAD } + }; +#define NVFTYPES (sizeof(vt2fst) / sizeof(*vt2fst)) unsigned int i, fst_type; fst_type = PS_FST_VTYPE_UNKNOWN; From owner-svn-src-projects@FreeBSD.ORG Sun Jul 26 08:14:01 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8FCBA1065673; Sun, 26 Jul 2009 08:14:01 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7DBE48FC0A; Sun, 26 Jul 2009 08:14:01 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6Q8E1Vi064031; Sun, 26 Jul 2009 08:14:01 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6Q8E1lH064027; Sun, 26 Jul 2009 08:14:01 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907260814.n6Q8E1lH064027@svn.freebsd.org> From: Stanislav Sedov Date: Sun, 26 Jul 2009 08:14:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195885 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2009 08:14:01 -0000 Author: stas Date: Sun Jul 26 08:14:01 2009 New Revision: 195885 URL: http://svn.freebsd.org/changeset/base/195885 Log: - Style(9) nitpicking. Modified: projects/libprocstat/usr.bin/fstat/fstat.c projects/libprocstat/usr.bin/fstat/fuser.c projects/libprocstat/usr.bin/fstat/libprocstat.c Modified: projects/libprocstat/usr.bin/fstat/fstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fstat.c Sun Jul 26 08:06:38 2009 (r195884) +++ projects/libprocstat/usr.bin/fstat/fstat.c Sun Jul 26 08:14:01 2009 (r195885) @@ -209,11 +209,11 @@ do_fstat(int argc, char **argv) static void dofiles(struct procstat *procstat, struct kinfo_proc *kp) { - struct filestat_list *head; const char *cmd; const char *uname; - int pid; struct filestat *fst; + struct filestat_list *head; + int pid; uname = user_from_uid(kp->ki_uid, 0); pid = kp->ki_pid; @@ -231,11 +231,10 @@ static void print_file_info(struct procstat *procstat, struct filestat *fst, const char *uname, const char *cmd, int pid) { - const char *filename; struct vnstat vn; - int error; - int fsmatch = 0; DEVS *d; + const char *filename; + int error, fsmatch = 0; filename = NULL; if (checkfile != 0) { @@ -318,10 +317,10 @@ print_socket_info(struct procstat *procs }; #define STYPEMAX 5 struct sockstat sock; - char errbuf[_POSIX2_LINE_MAX]; - static int isopen; struct protoent *pe; + char errbuf[_POSIX2_LINE_MAX]; int error; + static int isopen; error = procstat_get_socket_info(procstat, fst, &sock, errbuf); if (error != 0) { @@ -427,9 +426,9 @@ static void print_vnode_info(struct procstat *procstat, struct filestat *fst) { struct vnstat vn; - const char *badtype; char errbuf[_POSIX2_LINE_MAX]; char mode[15]; + const char *badtype; int error; badtype = NULL; Modified: projects/libprocstat/usr.bin/fstat/fuser.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fuser.c Sun Jul 26 08:06:38 2009 (r195884) +++ projects/libprocstat/usr.bin/fstat/fuser.c Sun Jul 26 08:14:01 2009 (r195885) @@ -166,9 +166,9 @@ do_fuser(int argc, char *argv[]) struct kinfo_proc *p; struct procstat *procstat; struct reqfile *reqfiles; + char *ep, *nlistf, *memf; int ch, cnt, sig; unsigned int i, nfiles; - char *ep, *nlistf, *memf; sig = SIGKILL; /* Default to kill. */ nlistf = NULL; @@ -288,10 +288,10 @@ static void dofiles(struct procstat *procstat, struct kinfo_proc *kp, struct reqfile *reqfiles, size_t nfiles) { + struct vnstat vn; struct consumer *cons; struct filestat *fst; struct filestat_list *head; - struct vnstat vn; int error, match; unsigned int i; Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Sun Jul 26 08:06:38 2009 (r195884) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Sun Jul 26 08:14:01 2009 (r195885) @@ -136,9 +136,9 @@ procstat_close(struct procstat *procstat struct procstat * procstat_open(const char *nlistf, const char *memf) { + struct procstat *procstat; kvm_t *kd; char buf[_POSIX2_LINE_MAX]; - struct procstat *procstat; procstat = calloc(1, sizeof(*procstat)); if (procstat == NULL) { @@ -259,25 +259,23 @@ filestat_new_entry(void *typedep, int ty static struct filestat_list * procstat_getfiles_kvm(kvm_t *kd, struct kinfo_proc *kp, int mmapped) { - int i; struct file file; struct filedesc filed; - unsigned int nfiles; + struct vm_map_entry vmentry; + struct vm_object object; + struct vmspace vmspace; + vm_map_entry_t entryp; + vm_map_t map; + vm_object_t objp; struct file **ofiles; struct filestat *entry; struct filestat_list *head; - int type; void *data; - vm_map_t map; - struct vmspace vmspace; - struct vm_map_entry vmentry; - vm_map_entry_t entryp; - struct vm_object object; - vm_object_t objp; - int prot, fflags; + int i, fflags; + int prot, type; + unsigned int nfiles; assert(kd); - if (kp->ki_fd == NULL) return (NULL); if (!kvm_read_all(kd, (unsigned long)kp->ki_fd, &filed, @@ -513,6 +511,7 @@ kinfo_fflags2fst(int kfflags) static int kinfo_uflags2fst(int fd) { + switch (fd) { case KF_FD_TYPE_CWD: return (PS_FST_UFLAG_CDIR); @@ -533,12 +532,11 @@ procstat_getfiles_sysctl(struct kinfo_pr { struct kinfo_file *kif, *files; struct filestat_list *head; - int fd, fflags, uflags, type; struct filestat *entry; - int cnt, i; + int cnt, fd, fflags; + int i, type, uflags; assert(kp); - if (kp->ki_fd == NULL) return (NULL); @@ -837,8 +835,8 @@ static int procstat_get_vnode_info_sysctl(struct filestat *fst, struct vnstat *vn, char *errbuf __unused) { - struct kinfo_file *kif; struct statfs stbuf; + struct kinfo_file *kif; char *name; assert(fst); @@ -895,10 +893,10 @@ static int procstat_get_socket_info_kvm(kvm_t *kd, struct filestat *fst, struct sockstat *sock, char *errbuf) { - struct socket s; - struct protosw proto; struct domain dom; struct inpcb inpcb; + struct protosw proto; + struct socket s; struct unpcb unpcb; ssize_t len; void *so; From owner-svn-src-projects@FreeBSD.ORG Sun Jul 26 08:18:40 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8B40B106564A; Sun, 26 Jul 2009 08:18:40 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5F32B8FC1E; Sun, 26 Jul 2009 08:18:40 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6Q8IeQ0064151; Sun, 26 Jul 2009 08:18:40 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6Q8IeOd064147; Sun, 26 Jul 2009 08:18:40 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907260818.n6Q8IeOd064147@svn.freebsd.org> From: Stanislav Sedov Date: Sun, 26 Jul 2009 08:18:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195886 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2009 08:18:40 -0000 Author: stas Date: Sun Jul 26 08:18:40 2009 New Revision: 195886 URL: http://svn.freebsd.org/changeset/base/195886 Log: - Use getvnodemount and getvnodedata wrapper functions instead of direct access to vnode. Modified: projects/libprocstat/usr.bin/fstat/common_kvm.c projects/libprocstat/usr.bin/fstat/common_kvm.h projects/libprocstat/usr.bin/fstat/msdosfs.c Modified: projects/libprocstat/usr.bin/fstat/common_kvm.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/common_kvm.c Sun Jul 26 08:14:01 2009 (r195885) +++ projects/libprocstat/usr.bin/fstat/common_kvm.c Sun Jul 26 08:18:40 2009 (r195886) @@ -111,16 +111,16 @@ devfs_filestat(kvm_t *kd, struct vnode * struct devfs_dirent devfs_dirent; struct mount mount; - if (!kvm_read_all(kd, (unsigned long)vp->v_data, &devfs_dirent, + if (!kvm_read_all(kd, (unsigned long)getvnodedata(vp), &devfs_dirent, sizeof(devfs_dirent))) { warnx("can't read devfs_dirent at %p", (void *)vp->v_data); return (1); } - if (!kvm_read_all(kd, (unsigned long)vp->v_mount, &mount, + if (!kvm_read_all(kd, (unsigned long)getvnodemount(vp), &mount, sizeof(mount))) { warnx("can't read mount at %p", - (void *)vp->v_mount); + (void *)getvnodemount(vp)); return (1); } vn->vn_fsid = (long)mount.mnt_stat.f_fsid.val[0]; @@ -194,7 +194,6 @@ dev2udev(kvm_t *kd, struct cdev *dev) } } -#ifdef ZFS void * getvnodedata(struct vnode *vp) { @@ -206,4 +205,3 @@ getvnodemount(struct vnode *vp) { return (vp->v_mount); } -#endif Modified: projects/libprocstat/usr.bin/fstat/common_kvm.h ============================================================================== --- projects/libprocstat/usr.bin/fstat/common_kvm.h Sun Jul 26 08:14:01 2009 (r195885) +++ projects/libprocstat/usr.bin/fstat/common_kvm.h Sun Jul 26 08:18:40 2009 (r195886) @@ -42,10 +42,8 @@ int isofs_filestat(kvm_t *kd, struct vno int msdosfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); int nfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); int ufs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); -#ifdef ZFS int zfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); void *getvnodedata(struct vnode *vp); struct mount *getvnodemount(struct vnode *vp); -#endif #endif /* __COMMON_KVM_H__ */ Modified: projects/libprocstat/usr.bin/fstat/msdosfs.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/msdosfs.c Sun Jul 26 08:14:01 2009 (r195885) +++ projects/libprocstat/usr.bin/fstat/msdosfs.c Sun Jul 26 08:18:40 2009 (r195886) @@ -62,7 +62,7 @@ __FBSDID("$FreeBSD$"); * VTODE is defined in denode.h only if _KERNEL is defined, but that leads to * header explosion */ -#define VTODE(vp) ((struct denode *)(vp)->v_data) +#define VTODE(vp) ((struct denode *)getvnodedata(vp)) #include "libprocstat.h" #include "common_kvm.h" From owner-svn-src-projects@FreeBSD.ORG Sun Jul 26 08:47:01 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 10BCD106566B; Sun, 26 Jul 2009 08:47:01 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F14BD8FC16; Sun, 26 Jul 2009 08:47:00 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6Q8l0qY064693; Sun, 26 Jul 2009 08:47:00 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6Q8l0Dp064688; Sun, 26 Jul 2009 08:47:00 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907260847.n6Q8l0Dp064688@svn.freebsd.org> From: Stanislav Sedov Date: Sun, 26 Jul 2009 08:47:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195887 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2009 08:47:01 -0000 Author: stas Date: Sun Jul 26 08:47:00 2009 New Revision: 195887 URL: http://svn.freebsd.org/changeset/base/195887 Log: - Add ntfs, nwfs, smbfs and udf support. Obtained from: fuser Added: projects/libprocstat/usr.bin/fstat/ntfs.c projects/libprocstat/usr.bin/fstat/nwfs.c projects/libprocstat/usr.bin/fstat/smbfs.c projects/libprocstat/usr.bin/fstat/udf.c Modified: projects/libprocstat/usr.bin/fstat/Makefile projects/libprocstat/usr.bin/fstat/common_kvm.h projects/libprocstat/usr.bin/fstat/libprocstat.c Modified: projects/libprocstat/usr.bin/fstat/Makefile ============================================================================== --- projects/libprocstat/usr.bin/fstat/Makefile Sun Jul 26 08:18:40 2009 (r195886) +++ projects/libprocstat/usr.bin/fstat/Makefile Sun Jul 26 08:47:00 2009 (r195887) @@ -4,7 +4,8 @@ .include PROG= fstat -SRCS= cd9660.c common_kvm.c fstat.c fuser.c libprocstat.c main.c msdosfs.c +SRCS= cd9660.c common_kvm.c fstat.c fuser.c libprocstat.c main.c \ + msdosfs.c ntfs.c nwfs.c smbfs.c udf.c LINKS= ${BINDIR}/fstat ${BINDIR}/fuser DPADD= ${LIBKVM} LDADD= -lkvm -lutil Modified: projects/libprocstat/usr.bin/fstat/common_kvm.h ============================================================================== --- projects/libprocstat/usr.bin/fstat/common_kvm.h Sun Jul 26 08:18:40 2009 (r195886) +++ projects/libprocstat/usr.bin/fstat/common_kvm.h Sun Jul 26 08:47:00 2009 (r195887) @@ -41,6 +41,10 @@ int devfs_filestat(kvm_t *kd, struct vno int isofs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); int msdosfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); int nfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); +int ntfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); +int nwfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); +int smbfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); +int udf_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); int ufs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); int zfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn); void *getvnodedata(struct vnode *vp); Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Sun Jul 26 08:18:40 2009 (r195886) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Sun Jul 26 08:47:00 2009 (r195887) @@ -734,12 +734,10 @@ procstat_get_vnode_info_kvm(kvm_t *kd, s #ifdef ZFS FSTYPE(zfs), #endif -/* FSTYPE(ntfs), FSTYPE(nwfs), FSTYPE(smbfs), FSTYPE(udf), -*/ }; #define NTYPES (sizeof(fstypes) / sizeof(*fstypes)) struct vnode vnode; Added: projects/libprocstat/usr.bin/fstat/ntfs.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/libprocstat/usr.bin/fstat/ntfs.c Sun Jul 26 08:47:00 2009 (r195887) @@ -0,0 +1,69 @@ +/*- + * Copyright (c) 2005-2009 Stanislav Sedov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include "libprocstat.h" +#include "common_kvm.h" + +int +ntfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn) +{ + struct fnode fnod; + struct ntnode node; + int error; + + assert(kd); + assert(vn); + error = kvm_read_all(kd, (unsigned long)VTOF(vp), &fnod, sizeof(fnod)); + if (error != 0) { + warnx("can't read ntfs fnode at %p", (void *)VTOF(vp)); + return (1); + } + error = kvm_read_all(kd, (unsigned long)FTONT(&fnod), &node, + sizeof(node)); + if (error != 0) { + warnx("can't read ntfs node at %p", (void *)FTONT(&fnod)); + return (1); + } + vn->vn_fileid = node.i_number; + vn->vn_fsid = dev2udev(kd, node.i_dev); + return (0); +} Added: projects/libprocstat/usr.bin/fstat/nwfs.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/libprocstat/usr.bin/fstat/nwfs.c Sun Jul 26 08:47:00 2009 (r195887) @@ -0,0 +1,74 @@ +/*- + * Copyright (c) 2005-2009 Stanislav Sedov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#define _KERNEL +#include +#undef _KERNEL + +#include +#include +#include +#include + +#include +#include + +#include "libprocstat.h" +#include "common_kvm.h" + +int +nwfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn) +{ + struct mount mnt; + struct nwnode node; + int error; + + assert(kd); + assert(vn); + error = kvm_read_all(kd, (unsigned long)VTONW(vp), &node, sizeof(node)); + if (error != 0) { + warnx("can't read nwfs fnode at %p", (void *)VTONW(vp)); + return (1); + } + error = kvm_read_all(kd, (unsigned long)getvnodemount(vp), &mnt, + sizeof(mnt)); + if (error != 0) { + warnx("can't read mount at %p for vnode %p", + (void *)getvnodemount(vp), vp); + return (1); + } + vn->vn_fileid = node.n_fid.f_id; + if (vn->vn_fileid == 0) + vn->vn_fileid = NWFS_ROOT_INO; + vn->vn_fsid = mnt.mnt_stat.f_fsid.val[0]; + return (0); +} Added: projects/libprocstat/usr.bin/fstat/smbfs.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/libprocstat/usr.bin/fstat/smbfs.c Sun Jul 26 08:47:00 2009 (r195887) @@ -0,0 +1,75 @@ +/*- + * Copyright (c) 2005-2009 Stanislav Sedov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#define _KERNEL +#include +#undef _KERNEL + +#include +#include +#include +#include + +#include +#include + +#include "libprocstat.h" +#include "common_kvm.h" + +int +smbfs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn) +{ + struct smbnode node; + struct mount mnt; + int error; + + assert(kd); + assert(vn); + error = kvm_read_all(kd, (unsigned long)VTOSMB(vp), &node, + sizeof(node)); + if (error != 0) { + warnx("can't read smbfs fnode at %p", (void *)VTOSMB(vp)); + return (1); + } + error = kvm_read_all(kd, (unsigned long)getvnodemount(vp), &mnt, + sizeof(mnt)); + if (error != 0) { + warnx("can't read mount at %p for vnode %p", + (void *)getvnodemount(vp), vp); + return (1); + } + vn->vn_fileid = node.n_ino; + if (vn->vn_fileid == 0) + vn->vn_fileid = 2; + vn->vn_fsid = mnt.mnt_stat.f_fsid.val[0]; + return (0); +} Added: projects/libprocstat/usr.bin/fstat/udf.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/libprocstat/usr.bin/fstat/udf.c Sun Jul 26 08:47:00 2009 (r195887) @@ -0,0 +1,100 @@ +/*- + * Copyright (c) 2005-2009 Stanislav Sedov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#define _KERNEL +#include +#undef _KERNEL + +#include +#include +#include +#include + +#include + +#include "libprocstat.h" +#include "common_kvm.h" + +/* XXX */ +struct udf_mnt { + int im_flags; + struct mount *im_mountp; + struct g_consumer *im_cp; + struct bufobj *im_bo; + struct cdev *im_dev; + struct vnode *im_devvp; + int bsize; + int bshift; + int bmask; + uint32_t part_start; + uint32_t part_len; + uint64_t root_id; + struct long_ad root_icb; + int p_sectors; + int s_table_entries; + void *s_table; + void *im_d2l; +}; +struct udf_node { + struct vnode *i_vnode; + struct udf_mnt *udfmp; + ino_t hash_id; + long diroff; + struct file_entry *fentry; +}; +#define VTON(vp) ((struct udf_node *)((vp)->v_data)) + +int +udf_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn) +{ + struct udf_node node; + struct udf_mnt mnt; + int error; + + assert(kd); + assert(vn); + error = kvm_read_all(kd, (unsigned long)VTON(vp), &node, sizeof(node)); + if (error != 0) { + warnx("can't read udf fnode at %p", (void *)VTON(vp)); + return (1); + } + error = kvm_read_all(kd, (unsigned long)node.udfmp, &mnt, sizeof(mnt)); + if (error != 0) { + warnx("can't read udf_mnt at %p for vnode %p", + (void *)node.udfmp, vp); + return (1); + } + vn->vn_fileid = node.hash_id; + vn->vn_fsid = dev2udev(kd, mnt.im_dev); + return (0); +} From owner-svn-src-projects@FreeBSD.ORG Sun Jul 26 20:35:48 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 35280106564A; Sun, 26 Jul 2009 20:35:48 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 23AD38FC0A; Sun, 26 Jul 2009 20:35:48 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6QKZm3Z079652; Sun, 26 Jul 2009 20:35:48 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6QKZliu079650; Sun, 26 Jul 2009 20:35:47 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907262035.n6QKZliu079650@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 26 Jul 2009 20:35:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195897 - projects/ppc64/contrib/binutils/bfd X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2009 20:35:48 -0000 Author: nwhitehorn Date: Sun Jul 26 20:35:47 2009 New Revision: 195897 URL: http://svn.freebsd.org/changeset/base/195897 Log: Fix a segfault in ld when the PLT is defined but not used. This follows a similar change in 2006 made by Alan Modra. Modified: projects/ppc64/contrib/binutils/bfd/elf64-ppc.c Modified: projects/ppc64/contrib/binutils/bfd/elf64-ppc.c ============================================================================== --- projects/ppc64/contrib/binutils/bfd/elf64-ppc.c Sun Jul 26 20:12:06 2009 (r195896) +++ projects/ppc64/contrib/binutils/bfd/elf64-ppc.c Sun Jul 26 20:35:47 2009 (r195897) @@ -7206,7 +7206,7 @@ ppc64_elf_build_stubs (bfd_boolean emit_ stub_sec->_cooked_size = 0; } - if (htab->plt != NULL) + if (htab->glink != NULL && htab->glink->contents != NULL) { unsigned int indx; bfd_vma plt0; From owner-svn-src-projects@FreeBSD.ORG Sun Jul 26 20:47:14 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A081A1065672; Sun, 26 Jul 2009 20:47:14 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8EF968FC13; Sun, 26 Jul 2009 20:47:14 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6QKlEYF079956; Sun, 26 Jul 2009 20:47:14 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6QKlECa079954; Sun, 26 Jul 2009 20:47:14 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907262047.n6QKlECa079954@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 26 Jul 2009 20:47:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195898 - projects/ppc64/usr.bin/xlint/arch/powerpc64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2009 20:47:14 -0000 Author: nwhitehorn Date: Sun Jul 26 20:47:14 2009 New Revision: 195898 URL: http://svn.freebsd.org/changeset/base/195898 Log: Add powerpc64 bits for xlint. This allows make kernel-toolchain to complete. Added: projects/ppc64/usr.bin/xlint/arch/powerpc64/ - copied from r195651, projects/ppc64/usr.bin/xlint/arch/powerpc/ Modified: projects/ppc64/usr.bin/xlint/arch/powerpc64/targparam.h Modified: projects/ppc64/usr.bin/xlint/arch/powerpc64/targparam.h ============================================================================== --- projects/ppc64/usr.bin/xlint/arch/powerpc/targparam.h Mon Jul 13 01:37:48 2009 (r195651) +++ projects/ppc64/usr.bin/xlint/arch/powerpc64/targparam.h Sun Jul 26 20:47:14 2009 (r195898) @@ -35,7 +35,7 @@ * Machine-dependent target parameters for lint1. */ -#include "ilp32.h" +#include "lp64.h" /* * Should be set to 1 if the difference of two pointers is of type long @@ -43,8 +43,8 @@ * kept in sync with the compiler! */ -#define PTRDIFF_IS_LONG 0 -#define SIZEOF_IS_ULONG 0 +#define PTRDIFF_IS_LONG 1 +#define SIZEOF_IS_ULONG 1 #define FLOAT_SIZE (4 * CHAR_BIT) #define DOUBLE_SIZE (8 * CHAR_BIT) From owner-svn-src-projects@FreeBSD.ORG Sun Jul 26 20:47:48 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C8694106566B; Sun, 26 Jul 2009 20:47:48 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B71A18FC12; Sun, 26 Jul 2009 20:47:48 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6QKlmNw079999; Sun, 26 Jul 2009 20:47:48 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6QKlmDU079997; Sun, 26 Jul 2009 20:47:48 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907262047.n6QKlmDU079997@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 26 Jul 2009 20:47:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195899 - projects/ppc64/gnu/usr.bin/binutils/ld X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2009 20:47:49 -0000 Author: nwhitehorn Date: Sun Jul 26 20:47:48 2009 New Revision: 195899 URL: http://svn.freebsd.org/changeset/base/195899 Log: Add bits for generating 32-bit PPC binaries. Modified: projects/ppc64/gnu/usr.bin/binutils/ld/Makefile.powerpc64 Modified: projects/ppc64/gnu/usr.bin/binutils/ld/Makefile.powerpc64 ============================================================================== --- projects/ppc64/gnu/usr.bin/binutils/ld/Makefile.powerpc64 Sun Jul 26 20:47:14 2009 (r195898) +++ projects/ppc64/gnu/usr.bin/binutils/ld/Makefile.powerpc64 Sun Jul 26 20:47:48 2009 (r195899) @@ -10,3 +10,20 @@ e${NATIVE_EMULATION}.c: emulparams/${NAT ${TOOLS_PREFIX}/usr \ ${HOST} ${TARGET_TUPLE} ${TARGET_TUPLE} \ ${NATIVE_EMULATION} "" no ${NATIVE_EMULATION} ${TARGET_TUPLE} + +PPC32_EMULATION= elf32ppc +_ppc32_path= \"${TOOLS_PREFIX}/usr/lib/powerpc\" +EMS+= ${PPC32_EMULATION} +.for ext in ${ELF_SCR_EXT} +LDSCRIPTS+= ${PPC32_EMULATION}.${ext} +.endfor + +SRCS+= e${PPC32_EMULATION}.c +CLEANFILES+= e${PPC32_EMULATION}.c +e${PPC32_EMULATION}.c: emulparams/${PPC32_EMULATION}.sh emultempl/elf32.em \ + scripttempl/elf.sc genscripts.sh stringify.sed + sh ${.CURDIR}/genscripts.sh ${SRCDIR}/ld ${_ppc32_path} \ + ${TOOLS_PREFIX}/usr \ + ${HOST} ${TARGET_TUPLE} ${TARGET_TUPLE} \ + ${PPC32_EMULATION} "" no ${PPC32_EMULATION} ${TARGET_TUPLE} + From owner-svn-src-projects@FreeBSD.ORG Sun Jul 26 20:52:13 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5F4B51065674; Sun, 26 Jul 2009 20:52:13 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 392E58FC13; Sun, 26 Jul 2009 20:52:13 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6QKqDC3080120; Sun, 26 Jul 2009 20:52:13 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6QKqDm6080109; Sun, 26 Jul 2009 20:52:13 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907262052.n6QKqDm6080109@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 26 Jul 2009 20:52:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195900 - in projects/ppc64/sys: conf powerpc/aim powerpc/aim64 powerpc/include powerpc/powerpc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jul 2009 20:52:13 -0000 Author: nwhitehorn Date: Sun Jul 26 20:52:12 2009 New Revision: 195900 URL: http://svn.freebsd.org/changeset/base/195900 Log: Add in some more missing bits, and a few beginning corrections for the dot symbol function descriptor business in the PowerPC64 ABI. This produces a kernel that compiles, links, and even manages to make it into powerpc_init(). Added: projects/ppc64/sys/powerpc/aim64/copyinout.c - copied, changed from r195651, projects/ppc64/sys/powerpc/aim/copyinout.c projects/ppc64/sys/powerpc/powerpc/elf64_machdep.c - copied, changed from r195651, projects/ppc64/sys/powerpc/powerpc/elf_machdep.c Modified: projects/ppc64/sys/conf/files.powerpc64 projects/ppc64/sys/powerpc/aim/mmu_oea.c projects/ppc64/sys/powerpc/aim64/locore.S projects/ppc64/sys/powerpc/aim64/mmu_oea64.c projects/ppc64/sys/powerpc/aim64/trap_subr.S projects/ppc64/sys/powerpc/include/asm.h projects/ppc64/sys/powerpc/powerpc/in_cksum.c projects/ppc64/sys/powerpc/powerpc/setjmp.S Modified: projects/ppc64/sys/conf/files.powerpc64 ============================================================================== --- projects/ppc64/sys/conf/files.powerpc64 Sun Jul 26 20:47:48 2009 (r195899) +++ projects/ppc64/sys/conf/files.powerpc64 Sun Jul 26 20:52:12 2009 (r195900) @@ -47,22 +47,13 @@ dev/syscons/scvtb.c optional sc dev/syscons/teken/teken.c optional sc dev/uart/uart_cpu_powerpc.c optional uart kern/syscalls.c optional ktr -libkern/ashldi3.c standard -libkern/ashrdi3.c standard libkern/bcmp.c standard -libkern/cmpdi2.c standard -libkern/divdi3.c standard libkern/ffs.c standard libkern/ffsl.c standard libkern/fls.c standard libkern/flsl.c standard -libkern/lshrdi3.c standard libkern/memmove.c standard libkern/memset.c standard -libkern/moddi3.c standard -libkern/ucmpdi2.c standard -libkern/udivdi3.c standard -libkern/umoddi3.c standard powerpc/aim/clock.c optional aim powerpc/aim/interrupt.c optional aim powerpc/aim/mp_cpudep.c optional aim smp @@ -73,7 +64,7 @@ powerpc/aim/platform_chrp.c optional aim powerpc/aim/trap.c optional aim powerpc/aim/uma_machdep.c optional aim powerpc/aim/vm_machdep.c optional aim -#powerpc/aim64/copyinout.c optional aim +powerpc/aim64/copyinout.c optional aim powerpc/aim64/locore.S optional aim no-obj powerpc/aim64/machdep.c optional aim powerpc/aim64/mmu_oea64.c optional aim @@ -112,7 +103,7 @@ powerpc/powerpc/db_hwwatch.c optional dd powerpc/powerpc/db_interface.c optional ddb powerpc/powerpc/db_trace.c optional ddb powerpc/powerpc/dump_machdep.c standard -powerpc/powerpc/elf_machdep.c standard +powerpc/powerpc/elf64_machdep.c standard powerpc/powerpc/fpu.c optional aim powerpc/powerpc/fuswintr.c standard powerpc/powerpc/gdb_machdep.c optional gdb Modified: projects/ppc64/sys/powerpc/aim/mmu_oea.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/mmu_oea.c Sun Jul 26 20:47:48 2009 (r195899) +++ projects/ppc64/sys/powerpc/aim/mmu_oea.c Sun Jul 26 20:52:12 2009 (r195900) @@ -193,8 +193,8 @@ struct ofw_map { */ static struct mem_region *regions; static struct mem_region *pregions; -u_int phys_avail_count; -int regions_sz, pregions_sz; +static u_int phys_avail_count; +static int regions_sz, pregions_sz; static struct ofw_map *translations; extern struct pmap ofw_pmap; Copied and modified: projects/ppc64/sys/powerpc/aim64/copyinout.c (from r195651, projects/ppc64/sys/powerpc/aim/copyinout.c) ============================================================================== --- projects/ppc64/sys/powerpc/aim/copyinout.c Mon Jul 13 01:37:48 2009 (r195651, copy source) +++ projects/ppc64/sys/powerpc/aim64/copyinout.c Sun Jul 26 20:52:12 2009 (r195900) @@ -103,13 +103,13 @@ copyout(const void *kaddr, void *udaddr, up = udaddr; while (len > 0) { - p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); + p = (char *)USER_ADDR + ((uintptr_t)up & ~SEGMENT_MASK); l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; if (l > len) l = len; - set_user_sr(pm->pm_sr[(u_int)up >> ADDR_SR_SHFT]); + set_user_sr(pm->pm_sr[(uintptr_t)up >> ADDR_SR_SHFT]); bcopy(kp, p, l); @@ -144,13 +144,13 @@ copyin(const void *udaddr, void *kaddr, up = udaddr; while (len > 0) { - p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); + p = (char *)USER_ADDR + ((uintptr_t)up & ~SEGMENT_MASK); l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; if (l > len) l = len; - set_user_sr(pm->pm_sr[(u_int)up >> ADDR_SR_SHFT]); + set_user_sr(pm->pm_sr[(uintptr_t)up >> ADDR_SR_SHFT]); bcopy(p, kp, l); @@ -218,14 +218,14 @@ subyte(void *addr, int byte) td = PCPU_GET(curthread); pm = &td->td_proc->p_vmspace->vm_pmap; - p = (char *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + p = (char *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK)); if (setfault(env)) { td->td_pcb->pcb_onfault = NULL; return (-1); } - set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + set_user_sr(pm->pm_sr[(uintptr_t)addr >> ADDR_SR_SHFT]); *p = (char)byte; @@ -234,6 +234,31 @@ subyte(void *addr, int byte) } int +suword32(void *addr, int word) +{ + struct thread *td; + pmap_t pm; + faultbuf env; + int *p; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + p = (int *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK)); + + if (setfault(env)) { + td->td_pcb->pcb_onfault = NULL; + return (-1); + } + + set_user_sr(pm->pm_sr[(uintptr_t)addr >> ADDR_SR_SHFT]); + + *p = word; + + td->td_pcb->pcb_onfault = NULL; + return (0); +} + +int suword(void *addr, long word) { struct thread *td; @@ -243,14 +268,14 @@ suword(void *addr, long word) td = PCPU_GET(curthread); pm = &td->td_proc->p_vmspace->vm_pmap; - p = (long *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + p = (long *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK)); if (setfault(env)) { td->td_pcb->pcb_onfault = NULL; return (-1); } - set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + set_user_sr(pm->pm_sr[(uintptr_t)addr >> ADDR_SR_SHFT]); *p = word; @@ -259,12 +284,11 @@ suword(void *addr, long word) } int -suword32(void *addr, int32_t word) +suword64(void *addr, int64_t word) { return (suword(addr, (long)word)); } - int fubyte(const void *addr) { @@ -276,14 +300,15 @@ fubyte(const void *addr) td = PCPU_GET(curthread); pm = &td->td_proc->p_vmspace->vm_pmap; - p = (u_char *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + p = (u_char *)((uintptr_t)USER_ADDR + + ((uintptr_t)addr & ~SEGMENT_MASK)); if (setfault(env)) { td->td_pcb->pcb_onfault = NULL; return (-1); } - set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + set_user_sr(pm->pm_sr[(uintptr_t)addr >> ADDR_SR_SHFT]); val = *p; @@ -301,14 +326,14 @@ fuword(const void *addr) td = PCPU_GET(curthread); pm = &td->td_proc->p_vmspace->vm_pmap; - p = (long *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + p = (long *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK)); if (setfault(env)) { td->td_pcb->pcb_onfault = NULL; return (-1); } - set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + set_user_sr(pm->pm_sr[(uintptr_t)addr >> ADDR_SR_SHFT]); val = *p; @@ -338,9 +363,10 @@ casuword(volatile u_long *addr, u_long o td = PCPU_GET(curthread); pm = &td->td_proc->p_vmspace->vm_pmap; - p = (u_long *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + p = (u_long *)((uintptr_t)USER_ADDR + + ((uintptr_t)addr & ~SEGMENT_MASK)); - set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + set_user_sr(pm->pm_sr[(uintptr_t)addr >> ADDR_SR_SHFT]); if (setfault(env)) { td->td_pcb->pcb_onfault = NULL; Modified: projects/ppc64/sys/powerpc/aim64/locore.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/locore.S Sun Jul 26 20:47:48 2009 (r195899) +++ projects/ppc64/sys/powerpc/aim64/locore.S Sun Jul 26 20:52:12 2009 (r195900) @@ -127,8 +127,7 @@ kernel_text: * segment! */ .text - .globl __start -__start: +ASENTRY(__start) li 8,0 li 9,0x100 mtctr 9 @@ -163,7 +162,8 @@ __start: mfsprg3 0 stw 0,16(9) /* ofmsr[4] = sprg3 */ - bl OF_initial_setup + bl .OF_initial_setup + nop lis 4,end@ha addi 4,4,end@l @@ -176,12 +176,15 @@ __start: mr 6,20 mr 7,21 - bl powerpc_init + bl .powerpc_init + nop mr %r1, %r3 li %r3, 0 stw %r3, 0(%r1) - bl mi_startup - b OF_exit + bl .mi_startup + nop + b .OF_exit + nop /* * int setfault() @@ -191,8 +194,7 @@ __start: * or the (currently used) C code optimized, so it doesn't use any non-volatile * registers. */ - .globl setfault -setfault: +ASENTRY(setfault) mflr 0 mfcr 12 mfsprg 4,0 @@ -206,4 +208,4 @@ setfault: xor 3,3,3 blr -#include +#include Modified: projects/ppc64/sys/powerpc/aim64/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Sun Jul 26 20:47:48 2009 (r195899) +++ projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Sun Jul 26 20:52:12 2009 (r195900) @@ -268,9 +268,9 @@ struct ofw_map { */ static struct mem_region *regions; static struct mem_region *pregions; -extern u_int phys_avail_count; -extern int regions_sz, pregions_sz; -extern int ofw_real_mode; +static u_int phys_avail_count; +static int regions_sz, pregions_sz; +static int ofw_real_mode; static struct ofw_map translations[64]; extern struct pmap ofw_pmap; @@ -732,11 +732,13 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o /* We don't have a direct map since there is no BAT */ hw_direct_map = 0; +#ifndef __powerpc64__ /* Make sure battable is zero, since we have no BAT */ for (i = 0; i < 16; i++) { battable[i].batu = 0; battable[i].batl = 0; } +#endif /* Get physical memory regions from firmware */ mem_regions(&pregions, &pregions_sz, ®ions, ®ions_sz); Modified: projects/ppc64/sys/powerpc/aim64/trap_subr.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/trap_subr.S Sun Jul 26 20:47:48 2009 (r195899) +++ projects/ppc64/sys/powerpc/aim64/trap_subr.S Sun Jul 26 20:52:12 2009 (r195900) @@ -478,8 +478,7 @@ CNAME(asttrapexit): /* * Deliberate entry to dbtrap */ - .globl CNAME(breakpoint) -CNAME(breakpoint): +ASENTRY(breakpoint) mtsprg1 %r1 mfmsr %r3 mtsrr1 %r3 Modified: projects/ppc64/sys/powerpc/include/asm.h ============================================================================== --- projects/ppc64/sys/powerpc/include/asm.h Sun Jul 26 20:47:48 2009 (r195899) +++ projects/ppc64/sys/powerpc/include/asm.h Sun Jul 26 20:52:12 2009 (r195900) @@ -60,8 +60,16 @@ #define _GLOBAL(x) \ .data; .align 2; .globl x; x: +#ifdef __powerpc64__ +#define _ENTRY(x) \ + .text; .align 2; .globl x; .section ".opd","aw"; \ + .align 3; x: \ + .quad .x,.TOC.@tocbase,0; .previous; \ + .align 4; .globl .x; .type .x,@function; .x: +#else #define _ENTRY(x) \ .text; .align 4; .globl x; .type x,@function; x: +#endif #ifdef GPROF # define _PROF_PROLOGUE mflr 0; stw 0,4(1); bl _mcount Copied and modified: projects/ppc64/sys/powerpc/powerpc/elf64_machdep.c (from r195651, projects/ppc64/sys/powerpc/powerpc/elf_machdep.c) ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/elf_machdep.c Mon Jul 13 01:37:48 2009 (r195651, copy source) +++ projects/ppc64/sys/powerpc/powerpc/elf64_machdep.c Sun Jul 26 20:52:12 2009 (r195900) @@ -48,7 +48,7 @@ #include #include -struct sysentvec elf32_freebsd_sysvec = { +struct sysentvec elf64_freebsd_sysvec = { .sv_size = SYS_MAXSYSCALL, .sv_table = sysent, .sv_mask = 0, @@ -62,7 +62,7 @@ struct sysentvec elf32_freebsd_sysvec = .sv_sigcode = sigcode, .sv_szsigcode = &szsigcode, .sv_prepsyscall = NULL, - .sv_name = "FreeBSD ELF32", + .sv_name = "FreeBSD ELF64", .sv_coredump = __elfN(coredump), .sv_imgact_try = NULL, .sv_minsigstksz = MINSIGSTKSZ, @@ -76,44 +76,44 @@ struct sysentvec elf32_freebsd_sysvec = .sv_setregs = exec_setregs, .sv_fixlimit = NULL, .sv_maxssiz = NULL, - .sv_flags = SV_ABI_FREEBSD | SV_ILP32 + .sv_flags = SV_ABI_FREEBSD | SV_LP64 }; -static Elf32_Brandinfo freebsd_brand_info = { +static Elf64_Brandinfo freebsd_brand_info = { .brand = ELFOSABI_FREEBSD, - .machine = EM_PPC, + .machine = EM_PPC64, .compat_3_brand = "FreeBSD", .emul_path = NULL, .interp_path = "/libexec/ld-elf.so.1", - .sysvec = &elf32_freebsd_sysvec, + .sysvec = &elf64_freebsd_sysvec, .interp_newpath = NULL, - .brand_note = &elf32_freebsd_brandnote, + .brand_note = &elf64_freebsd_brandnote, .flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE }; -SYSINIT(elf32, SI_SUB_EXEC, SI_ORDER_ANY, - (sysinit_cfunc_t) elf32_insert_brand_entry, +SYSINIT(elf64, SI_SUB_EXEC, SI_ORDER_ANY, + (sysinit_cfunc_t) elf64_insert_brand_entry, &freebsd_brand_info); -static Elf32_Brandinfo freebsd_brand_oinfo = { +static Elf64_Brandinfo freebsd_brand_oinfo = { .brand = ELFOSABI_FREEBSD, - .machine = EM_PPC, + .machine = EM_PPC64, .compat_3_brand = "FreeBSD", .emul_path = NULL, .interp_path = "/usr/libexec/ld-elf.so.1", - .sysvec = &elf32_freebsd_sysvec, + .sysvec = &elf64_freebsd_sysvec, .interp_newpath = NULL, - .brand_note = &elf32_freebsd_brandnote, + .brand_note = &elf64_freebsd_brandnote, .flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE }; -SYSINIT(oelf32, SI_SUB_EXEC, SI_ORDER_ANY, - (sysinit_cfunc_t) elf32_insert_brand_entry, +SYSINIT(oelf64, SI_SUB_EXEC, SI_ORDER_ANY, + (sysinit_cfunc_t) elf64_insert_brand_entry, &freebsd_brand_oinfo); void -elf32_dump_thread(struct thread *td __unused, void *dst __unused, +elf64_dump_thread(struct thread *td __unused, void *dst __unused, size_t *off __unused) { } Modified: projects/ppc64/sys/powerpc/powerpc/in_cksum.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/in_cksum.c Sun Jul 26 20:47:48 2009 (r195899) +++ projects/ppc64/sys/powerpc/powerpc/in_cksum.c Sun Jul 26 20:52:12 2009 (r195900) @@ -228,7 +228,7 @@ skip_start: if (len < mlen) mlen = len; - if ((clen ^ (int) addr) & 1) + if ((clen ^ (long) addr) & 1) sum += in_cksumdata(addr, mlen) << 8; else sum += in_cksumdata(addr, mlen); Modified: projects/ppc64/sys/powerpc/powerpc/setjmp.S ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/setjmp.S Sun Jul 26 20:47:48 2009 (r195899) +++ projects/ppc64/sys/powerpc/powerpc/setjmp.S Sun Jul 26 20:52:12 2009 (r195900) @@ -4,6 +4,8 @@ /* kernel version of this file, does not have signal goop */ /* int setjmp(jmp_buf env) */ +#include + #define JMP_r1 0x04 #define JMP_r14 0x08 #define JMP_r15 0x0c @@ -29,9 +31,7 @@ #define JMP_xer 0x5c #define JMP_sig 0x60 - -.globl setjmp -setjmp: +ASENTRY(setjmp) stw 31, JMP_r31(3) /* r1, r14-r30 */ stw 1, JMP_r1 (3) @@ -67,8 +67,7 @@ setjmp: .extern sigsetmask -.globl longjmp -longjmp: +ASENTRY(longjmp) lwz 31, JMP_r31(3) /* r1, r14-r30 */ lwz 1, JMP_r1 (3) From owner-svn-src-projects@FreeBSD.ORG Mon Jul 27 04:41:05 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 04AF8106566B; Mon, 27 Jul 2009 04:41:05 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E55D28FC1A; Mon, 27 Jul 2009 04:41:04 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6R4f4Yx089126; Mon, 27 Jul 2009 04:41:04 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6R4f4t6089121; Mon, 27 Jul 2009 04:41:04 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907270441.n6R4f4t6089121@svn.freebsd.org> From: Nathan Whitehorn Date: Mon, 27 Jul 2009 04:41:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195901 - in projects/ppc64/sys/powerpc: aim aim64 include ofw X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Jul 2009 04:41:05 -0000 Author: nwhitehorn Date: Mon Jul 27 04:41:04 2009 New Revision: 195901 URL: http://svn.freebsd.org/changeset/base/195901 Log: Add the various OFW machdep bits to be able to talk to a 32-bit Open Firmware from a 64-bit environment, and also to handle calling locations in memory from C. This involved hacking a PPC64 ABI function descriptor structure to wrap the plain pointer to the OFW entry point. With this, the kernel starts, prints Hello World, starts KDB, informs me it has no platform module because the Mambo support is uncommitted, politely panics, and stops. Huzzah! Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c projects/ppc64/sys/powerpc/aim64/locore.S projects/ppc64/sys/powerpc/include/psl.h projects/ppc64/sys/powerpc/ofw/ofw_real.c Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/ofw_machdep.c Sun Jul 26 20:52:12 2009 (r195900) +++ projects/ppc64/sys/powerpc/aim/ofw_machdep.c Mon Jul 27 04:41:04 2009 (r195901) @@ -74,6 +74,16 @@ static int (*ofwcall)(void *); static void *fdt; int ofw_real_mode; +#ifdef __powerpc64__ +/* Handle PPC64 ABI brain damage */ +struct { + int (*funcptr)(void *); + uintptr_t toc; + uintptr_t env; +} ofwcall_funcdesc; +#endif + + static int openfirmware(void *args); /* @@ -271,7 +281,18 @@ OF_initial_setup(void *fdt_ptr, void *ju else ofw_real_mode = 1; - ofwcall = openfirm; + #ifdef __powerpc64__ + /* + * For PPC64, we need to hack up a function descriptor object + * to be able to call a memory address. + */ + ofwcall_funcdesc.funcptr = openfirm; + ofwcall_funcdesc.toc = 0; + ofwcall_funcdesc.env= 0; + ofwcall = (int (*)(void *))(&ofwcall_funcdesc); + #else + ofwcall = openfirm; + #endif fdt = fdt_ptr; } Modified: projects/ppc64/sys/powerpc/aim64/locore.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/locore.S Sun Jul 26 20:52:12 2009 (r195900) +++ projects/ppc64/sys/powerpc/aim64/locore.S Mon Jul 27 04:41:04 2009 (r195901) @@ -144,7 +144,7 @@ ASENTRY(__start) mr 21,7 lis 8,openfirmware_entry@ha - stw 5,openfirmware_entry@l(8) /* save client interface handler */ + std 5,openfirmware_entry@l(8) /* save client interface handler */ lis 1,(tmpstk+TMPSTKSZ-16)@ha addi 1,1,(tmpstk+TMPSTKSZ-16)@l Modified: projects/ppc64/sys/powerpc/include/psl.h ============================================================================== --- projects/ppc64/sys/powerpc/include/psl.h Sun Jul 26 20:52:12 2009 (r195900) +++ projects/ppc64/sys/powerpc/include/psl.h Mon Jul 27 04:41:04 2009 (r195901) @@ -92,6 +92,10 @@ #define PSL_RI 0x00000002 /* recoverable interrupt */ #define PSL_LE 0x00000001 /* endian mode (1 == le) */ +#ifdef __powerpc64__ +#define PSL_SF (0x1UL << 63) +#endif + #define PSL_601_MASK ~(PSL_POW|PSL_ILE|PSL_BE|PSL_RI|PSL_LE) /* @@ -109,7 +113,11 @@ #define PSL_MBO 0 #define PSL_MBZ 0 +#ifdef __powerpc64__ +#define PSL_KERNSET (PSL_SF | PSL_EE | PSL_ME | PSL_IR | PSL_DR | PSL_RI) +#else #define PSL_KERNSET (PSL_EE | PSL_ME | PSL_IR | PSL_DR | PSL_RI) +#endif #define PSL_USERSET (PSL_KERNSET | PSL_PR) #define PSL_USERSTATIC (PSL_USERSET | PSL_IP | 0x87c0008c) Modified: projects/ppc64/sys/powerpc/ofw/ofw_real.c ============================================================================== --- projects/ppc64/sys/powerpc/ofw/ofw_real.c Sun Jul 26 20:52:12 2009 (r195900) +++ projects/ppc64/sys/powerpc/ofw/ofw_real.c Mon Jul 27 04:41:04 2009 (r195901) @@ -211,8 +211,13 @@ ofw_real_map(const void *buf, size_t len mtx_assert(&of_bounce_mtx, MA_OWNED); if (of_bounce_virt == NULL) { + /* + * If we haven't set up the MMU, then buf is guaranteed + * to be accessible to OF, because the only memory we + * can use right now is memory mapped by firmware. + */ if (!pmap_bootstrapped) - return (cell_t)buf; + return (cell_t)(uintptr_t)buf; /* * XXX: It is possible for us to get called before the VM has @@ -279,11 +284,11 @@ ofw_real_test(ofw_t ofw, const char *nam cell_t nreturns; cell_t service; cell_t missing; - } args = { - (cell_t)"test", - 1, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"test"; + args.nargs = 1; + args.nreturns = 1; ofw_real_start(); @@ -310,11 +315,11 @@ ofw_real_peer(ofw_t ofw, phandle_t node) cell_t nreturns; cell_t node; cell_t next; - } args = { - (cell_t)"peer", - 1, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"peer"; + args.nargs = 1; + args.nreturns = 1; args.node = node; if (openfirmware(&args) == -1) @@ -332,11 +337,11 @@ ofw_real_child(ofw_t ofw, phandle_t node cell_t nreturns; cell_t node; cell_t child; - } args = { - (cell_t)"child", - 1, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"child"; + args.nargs = 1; + args.nreturns = 1; args.node = node; if (openfirmware(&args) == -1) @@ -354,11 +359,11 @@ ofw_real_parent(ofw_t ofw, phandle_t nod cell_t nreturns; cell_t node; cell_t parent; - } args = { - (cell_t)"parent", - 1, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"parent"; + args.nargs = 1; + args.nreturns = 1; args.node = node; if (openfirmware(&args) == -1) @@ -376,11 +381,11 @@ ofw_real_instance_to_package(ofw_t ofw, cell_t nreturns; cell_t instance; cell_t package; - } args = { - (cell_t)"instance-to-package", - 1, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"instance-to-package"; + args.nargs = 1; + args.nreturns = 1; args.instance = instance; if (openfirmware(&args) == -1) @@ -399,11 +404,11 @@ ofw_real_getproplen(ofw_t ofw, phandle_t cell_t package; cell_t propname; cell_t proplen; - } args = { - (cell_t)"getproplen", - 2, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"getproplen"; + args.nargs = 2; + args.nreturns = 1; ofw_real_start(); @@ -431,11 +436,11 @@ ofw_real_getprop(ofw_t ofw, phandle_t pa cell_t buf; cell_t buflen; cell_t size; - } args = { - (cell_t)"getprop", - 4, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"getprop"; + args.nargs = 4; + args.nreturns = 1; ofw_real_start(); @@ -466,11 +471,11 @@ ofw_real_nextprop(ofw_t ofw, phandle_t p cell_t previous; cell_t buf; cell_t flag; - } args = { - (cell_t)"nextprop", - 3, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"nextprop"; + args.nargs = 3; + args.nreturns = 1; ofw_real_start(); @@ -502,11 +507,11 @@ ofw_real_setprop(ofw_t ofw, phandle_t pa cell_t buf; cell_t len; cell_t size; - } args = { - (cell_t)"setprop", - 4, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"setprop"; + args.nargs = 4; + args.nreturns = 1; ofw_real_start(); @@ -534,11 +539,11 @@ ofw_real_canon(ofw_t ofw, const char *de cell_t buf; cell_t len; cell_t size; - } args = { - (cell_t)"canon", - 3, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"canon"; + args.nargs = 3; + args.nreturns = 1; ofw_real_start(); @@ -565,11 +570,11 @@ ofw_real_finddevice(ofw_t ofw, const cha cell_t nreturns; cell_t device; cell_t package; - } args = { - (cell_t)"finddevice", - 1, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"finddevice"; + args.nargs = 1; + args.nreturns = 1; ofw_real_start(); @@ -594,11 +599,11 @@ ofw_real_instance_to_path(ofw_t ofw, iha cell_t buf; cell_t len; cell_t size; - } args = { - (cell_t)"instance-to-path", - 3, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"instance-to-path"; + args.nargs = 3; + args.nreturns = 1; ofw_real_start(); @@ -627,11 +632,11 @@ ofw_real_package_to_path(ofw_t ofw, phan cell_t buf; cell_t len; cell_t size; - } args = { - (cell_t)"package-to-path", - 3, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"package-to-path"; + args.nargs = 3; + args.nreturns = 1; ofw_real_start(); @@ -660,15 +665,15 @@ ofw_real_call_method(ofw_t ofw, ihandle_ cell_t method; cell_t instance; cell_t args_n_results[12]; - } args = { - (cell_t)"call-method", - 2, - 1, - }; + } args; cell_t *cp; unsigned long *ap; int n; + args.name = (cell_t)(uintptr_t)"call-method"; + args.nargs = 2; + args.nreturns = 1; + if (nargs > 6) return (-1); @@ -707,11 +712,11 @@ ofw_real_open(ofw_t ofw, const char *dev cell_t nreturns; cell_t device; cell_t instance; - } args = { - (cell_t)"open", - 1, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"open"; + args.nargs = 1; + args.nreturns = 1; ofw_real_start(); @@ -734,10 +739,10 @@ ofw_real_close(ofw_t ofw, ihandle_t inst cell_t nargs; cell_t nreturns; cell_t instance; - } args = { - (cell_t)"close", - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"close"; + args.nargs = 1; args.instance = instance; openfirmware(&args); @@ -755,11 +760,11 @@ ofw_real_read(ofw_t ofw, ihandle_t insta cell_t addr; cell_t len; cell_t actual; - } args = { - (cell_t)"read", - 3, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"read"; + args.nargs = 3; + args.nreturns = 1; ofw_real_start(); @@ -788,11 +793,11 @@ ofw_real_write(ofw_t ofw, ihandle_t inst cell_t addr; cell_t len; cell_t actual; - } args = { - (cell_t)"write", - 3, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"write"; + args.nargs = 3; + args.nreturns = 1; ofw_real_start(); @@ -819,11 +824,11 @@ ofw_real_seek(ofw_t ofw, ihandle_t insta cell_t poshi; cell_t poslo; cell_t status; - } args = { - (cell_t)"seek", - 3, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"seek"; + args.nargs = 3; + args.nreturns = 1; args.instance = instance; args.poshi = pos >> 32; @@ -849,18 +854,18 @@ ofw_real_claim(ofw_t ofw, void *virt, si cell_t size; cell_t align; cell_t baseaddr; - } args = { - (cell_t)"claim", - 3, - 1, - }; + } args; + + args.name = (cell_t)(uintptr_t)"claim"; + args.nargs = 3; + args.nreturns = 1; - args.virt = (cell_t)virt; + args.virt = (cell_t)(uintptr_t)virt; args.size = size; args.align = align; if (openfirmware(&args) == -1) return ((void *)-1); - return ((void *)args.baseaddr); + return ((void *)(uintptr_t)args.baseaddr); } /* Release an area of memory. */ @@ -873,12 +878,12 @@ ofw_real_release(ofw_t ofw, void *virt, cell_t nreturns; cell_t virt; cell_t size; - } args = { - (cell_t)"release", - 2, - }; + } args; - args.virt = (cell_t)virt; + args.name = (cell_t)(uintptr_t)"release"; + args.nargs = 2; + + args.virt = (cell_t)(uintptr_t)virt; args.size = size; openfirmware(&args); } @@ -895,9 +900,9 @@ ofw_real_enter(ofw_t ofw) cell_t name; cell_t nargs; cell_t nreturns; - } args = { - (cell_t)"enter", - }; + } args; + + args.name = (cell_t)(uintptr_t)"enter"; openfirmware(&args); /* We may come back. */ @@ -911,9 +916,9 @@ ofw_real_exit(ofw_t ofw) cell_t name; cell_t nargs; cell_t nreturns; - } args = { - (cell_t)"exit", - }; + } args; + + args.name = (cell_t)(uintptr_t)"exit"; openfirmware(&args); for (;;) /* just in case */ From owner-svn-src-projects@FreeBSD.ORG Mon Jul 27 15:32:18 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DD7671065670; Mon, 27 Jul 2009 15:32:18 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C6C018FC1A; Mon, 27 Jul 2009 15:32:18 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6RFWIHG004594; Mon, 27 Jul 2009 15:32:18 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6RFWI3x004593; Mon, 27 Jul 2009 15:32:18 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907271532.n6RFWI3x004593@svn.freebsd.org> From: Nathan Whitehorn Date: Mon, 27 Jul 2009 15:32:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195910 - projects/ppc64/sys/powerpc/aim X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Jul 2009 15:32:21 -0000 Author: nwhitehorn Date: Mon Jul 27 15:32:18 2009 New Revision: 195910 URL: http://svn.freebsd.org/changeset/base/195910 Log: Fix a missing space. Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/ofw_machdep.c Mon Jul 27 14:52:34 2009 (r195909) +++ projects/ppc64/sys/powerpc/aim/ofw_machdep.c Mon Jul 27 15:32:18 2009 (r195910) @@ -288,7 +288,7 @@ OF_initial_setup(void *fdt_ptr, void *ju */ ofwcall_funcdesc.funcptr = openfirm; ofwcall_funcdesc.toc = 0; - ofwcall_funcdesc.env= 0; + ofwcall_funcdesc.env = 0; ofwcall = (int (*)(void *))(&ofwcall_funcdesc); #else ofwcall = openfirm; From owner-svn-src-projects@FreeBSD.ORG Tue Jul 28 15:57:54 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 35319106566C; Tue, 28 Jul 2009 15:57:54 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 23ADE8FC08; Tue, 28 Jul 2009 15:57:54 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6SFvsls037029; Tue, 28 Jul 2009 15:57:54 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6SFvrtE037024; Tue, 28 Jul 2009 15:57:53 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907281557.n6SFvrtE037024@svn.freebsd.org> From: Nathan Whitehorn Date: Tue, 28 Jul 2009 15:57:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195920 - projects/ppc64/sys/powerpc/aim64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Jul 2009 15:57:54 -0000 Author: nwhitehorn Date: Tue Jul 28 15:57:53 2009 New Revision: 195920 URL: http://svn.freebsd.org/changeset/base/195920 Log: Bring up the system a little more, with some initial SLB management. We now boot into after the PMAP layer is up and the MMU enabled. Modified: projects/ppc64/sys/powerpc/aim64/locore.S projects/ppc64/sys/powerpc/aim64/machdep.c projects/ppc64/sys/powerpc/aim64/mmu_oea64.c projects/ppc64/sys/powerpc/aim64/trap_subr.S Modified: projects/ppc64/sys/powerpc/aim64/locore.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/locore.S Tue Jul 28 15:07:41 2009 (r195919) +++ projects/ppc64/sys/powerpc/aim64/locore.S Tue Jul 28 15:57:53 2009 (r195920) @@ -169,8 +169,8 @@ ASENTRY(__start) addi 4,4,end@l mr 5,4 - lis 3,kernel_text@ha - addi 3,3,kernel_text@l + lis 3,kernbase@ha + addi 3,3,kernbase@l /* Restore the argument pointer and length */ mr 6,20 Modified: projects/ppc64/sys/powerpc/aim64/machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim64/machdep.c Tue Jul 28 15:07:41 2009 (r195919) +++ projects/ppc64/sys/powerpc/aim64/machdep.c Tue Jul 28 15:57:53 2009 (r195920) @@ -104,7 +104,6 @@ __FBSDID("$FreeBSD$"); #include #include -#include #include #include #include @@ -230,8 +229,6 @@ cpu_startup(void *dummy) extern char kernel_text[], _end[]; -extern void *restorebridge, *restorebridgesize; -extern void *rfid_patch, *rfi_patch1, *rfi_patch2; #ifdef SMP extern void *rstcode, *rstsize; #endif @@ -398,8 +395,10 @@ powerpc_init(u_int startkernel, u_int en bcopy(&trapcode, (void *)EXC_BPT, (size_t)&trapsize); #endif bcopy(&dsitrap, (void *)(EXC_DSI), (size_t)&dsisize); + bcopy(&trapcode, (void *)EXC_DSE, (size_t)&trapsize); bcopy(&alitrap, (void *)(EXC_ALI), (size_t)&alisize); bcopy(&trapcode, (void *)EXC_ISI, (size_t)&trapsize); + bcopy(&trapcode, (void *)EXC_ISE, (size_t)&trapsize); bcopy(&trapcode, (void *)EXC_EXI, (size_t)&trapsize); bcopy(&trapcode, (void *)EXC_FPU, (size_t)&trapsize); bcopy(&trapcode, (void *)EXC_DECR, (size_t)&trapsize); Modified: projects/ppc64/sys/powerpc/aim64/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Tue Jul 28 15:07:41 2009 (r195919) +++ projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Tue Jul 28 15:57:53 2009 (r195920) @@ -170,7 +170,12 @@ cntlzd(volatile register_t a) { static __inline uint64_t va_to_vsid(pmap_t pm, vm_offset_t va) { + #ifdef __powerpc64__ + return (((uint64_t)pm->pm_context << 36) | + ((uintptr_t)va >> ADDR_SR_SHFT)); + #else return ((pm->pm_sr[(uintptr_t)va >> ADDR_SR_SHFT]) & SR_VSID_MASK); + #endif } #define TLBSYNC() __asm __volatile("tlbsync; ptesync"); @@ -186,11 +191,13 @@ va_to_vsid(pmap_t pm, vm_offset_t va) static __inline void TLBIE(pmap_t pmap, vm_offset_t va) { +#ifndef __powerpc64__ register_t msr; register_t scratch; + register_t vpn_hi, vpn_lo; +#endif uint64_t vpn; - register_t vpn_hi, vpn_lo; #if 1 /* @@ -205,6 +212,15 @@ TLBIE(pmap_t pmap, vm_offset_t va) { vpn = va; #endif +#ifdef __powerpc64__ + __asm __volatile("\ + ptesync; \ + tlbie %0; \ + eieio; \ + tlbsync; \ + ptesync;" + :: "r"(vpn)); +#else vpn_hi = (uint32_t)(vpn >> 32); vpn_lo = (uint32_t)vpn; @@ -224,13 +240,13 @@ TLBIE(pmap_t pmap, vm_offset_t va) { tlbsync; \ ptesync;" : "=r"(msr), "=r"(scratch) : "r"(vpn_hi), "r"(vpn_lo), "r"(32)); +#endif } #define DISABLE_TRANS(msr) msr = mfmsr(); mtmsr(msr & ~PSL_DR); isync() #define ENABLE_TRANS(msr) mtmsr(msr); isync() #define VSID_MAKE(sr, hash) ((sr) | (((hash) & 0xfffff) << 4)) -#define VSID_TO_SR(vsid) ((vsid) & 0xf) #define VSID_TO_HASH(vsid) (((vsid) >> 4) & 0xfffff) #define PVO_PTEGIDX_MASK 0x007 /* which PTEG slot */ @@ -270,7 +286,7 @@ static struct mem_region *regions; static struct mem_region *pregions; static u_int phys_avail_count; static int regions_sz, pregions_sz; -static int ofw_real_mode; +extern int ofw_real_mode; static struct ofw_map translations[64]; extern struct pmap ofw_pmap; @@ -372,6 +388,7 @@ static void moea64_kremove(mmu_t, vm_of static void moea64_syncicache(pmap_t pmap, vm_offset_t va, vm_offset_t pa); static void tlbia(void); +static void slbia(void); /* * Kernel MMU interface @@ -701,14 +718,45 @@ moea64_bridge_cpu_bootstrap(mmu_t mmup, { int i = 0; + #ifdef __powerpc64__ + register_t slb1, slb2; + #endif + /* * Initialize segment registers and MMU */ mtmsr(mfmsr() & ~PSL_DR & ~PSL_IR); isync(); - for (i = 0; i < 16; i++) { - mtsrin(i << ADDR_SR_SHFT, kernel_pmap->pm_sr[i]); - } + + /* + * Install kernel SLB entries + */ + + #ifdef __powerpc64__ + slbia(); + + for (i = 0; i < NSEGS; i++) { + if (!kernel_pmap->pm_sr[i]) + continue; + + /* The right-most bit is a validity bit */ + slb1 = ((register_t)kernel_pmap->pm_context << 36) | + (kernel_pmap->pm_sr[i] >> 1); + slb1 <<= 12; + slb2 = kernel_pmap->pm_sr[i] << 27 | i; + + __asm __volatile ("slbmte %0, %1" :: "r"(slb1), + "r"(slb2)); + } + #else + for (i = 0; i < NSEGS; i++) + mtsrin(i << ADDR_SR_SHFT, pmap->pm_sr[i]); + #endif + + /* + * Install page table + */ + __asm __volatile ("sync; mtsdr1 %0; isync" :: "r"((uintptr_t)moea64_pteg_table | (64 - cntlzd(moea64_pteg_mask >> 11)))); @@ -844,8 +892,14 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o /* * Initialize the kernel pmap (which is statically allocated). */ + kernel_pmap->pm_context = 0; + #ifdef __powerpc64__ + for (i = 0; i < 16; i++) + kernel_pmap->pm_sr[i] = (i << 1) | 1; + #else for (i = 0; i < 16; i++) kernel_pmap->pm_sr[i] = EMPTY_SEGMENT + i; + #endif kernel_pmap->pmap_phys = kernel_pmap; kernel_pmap->pm_active = ~0; @@ -883,6 +937,7 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o moea64_kenter(mmup, pa, pa); ENABLE_TRANS(msr); + if (!ofw_real_mode) { /* * Set up the Open Firmware pmap and add its mappings. @@ -895,6 +950,7 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o if ((chosen = OF_finddevice("/chosen")) == -1) panic("moea64_bootstrap: can't find /chosen"); OF_getprop(chosen, "mmu", &mmui, 4); + if ((mmu = OF_instance_to_package(mmui)) == -1) panic("moea64_bootstrap: can't get mmu package"); if ((sz = OF_getproplen(mmu, "translations")) == -1) @@ -1748,9 +1804,15 @@ moea64_pinit(mmu_t mmu, pmap_t pmap) hash |= i; } moea64_vsid_bitmap[n] |= mask; - for (i = 0; i < 16; i++) { - pmap->pm_sr[i] = VSID_MAKE(i, hash); - } + + #ifdef __powerpc64__ + pmap->pm_context = hash; + for (i = 0; i < NSEGS; i++) + pmap->pm_sr[i] = 0; + #else + for (i = 0; i < 16; i++) + pmap->pm_sr[i] = VSID_MAKE(i, hash); + #endif return; } @@ -1976,6 +2038,12 @@ tlbia(void) TLBIE(NULL,i); } +static void +slbia(void) +{ + __asm __volatile ("slbia"); +} + static int moea64_pvo_enter(pmap_t pm, uma_zone_t zone, struct pvo_head *pvo_head, vm_offset_t va, vm_offset_t pa, uint64_t pte_lo, int flags, int recurse) Modified: projects/ppc64/sys/powerpc/aim64/trap_subr.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/trap_subr.S Tue Jul 28 15:07:41 2009 (r195919) +++ projects/ppc64/sys/powerpc/aim64/trap_subr.S Tue Jul 28 15:57:53 2009 (r195920) @@ -42,22 +42,9 @@ /* * Save/restore segment registers */ -#define RESTORE_SRS(pmap,sr) mtsr 0,sr; \ - lwz sr,1*4(pmap); mtsr 1,sr; \ - lwz sr,2*4(pmap); mtsr 2,sr; \ - lwz sr,3*4(pmap); mtsr 3,sr; \ - lwz sr,4*4(pmap); mtsr 4,sr; \ - lwz sr,5*4(pmap); mtsr 5,sr; \ - lwz sr,6*4(pmap); mtsr 6,sr; \ - lwz sr,7*4(pmap); mtsr 7,sr; \ - lwz sr,8*4(pmap); mtsr 8,sr; \ - lwz sr,9*4(pmap); mtsr 9,sr; \ - lwz sr,10*4(pmap); mtsr 10,sr; \ - lwz sr,11*4(pmap); mtsr 11,sr; \ - lwz sr,12*4(pmap); mtsr 12,sr; \ - lwz sr,13*4(pmap); mtsr 13,sr; \ - lwz sr,14*4(pmap); mtsr 14,sr; \ - lwz sr,15*4(pmap); mtsr 15,sr; isync; + +#define RESTORE_SRS(pmap, sr) \ + slbia; /* * User SRs are loaded through a pointer to the current pmap. @@ -249,10 +236,13 @@ CNAME(rstcode): addi %r1,%r1,(124-16)@l lis %r3,1@l - bla CNAME(pmap_cpu_bootstrap) - bla CNAME(cpudep_ap_bootstrap) + bla CNAME(.pmap_cpu_bootstrap) + nop + bla CNAME(.cpudep_ap_bootstrap) + nop mr %r1,%r3 - bla CNAME(machdep_ap_bootstrap) + bla CNAME(.machdep_ap_bootstrap) + nop /* Should not be reached */ 9: @@ -441,10 +431,12 @@ k_trap: /* Call C interrupt dispatcher: */ trapagain: addi %r3,%r1,8 - bl CNAME(powerpc_interrupt) - .globl CNAME(trapexit) /* backtrace code sentinel */ -CNAME(trapexit): + bl CNAME(.powerpc_interrupt) + nop + bl CNAME(.trapexit) + nop +ASENTRY(trapexit) /* backtrace code sentinel */ /* Disable interrupts: */ mfmsr %r3 andi. %r3,%r3,~PSL_EE@l @@ -511,7 +503,8 @@ dbtrap: FRAME_SETUP(PC_DBSAVE) /* Call C trap code: */ addi %r3,%r1,8 - bl CNAME(db_trap_glue) + bl CNAME(.db_trap_glue) + nop or. %r3,%r3,%r3 bne dbleave /* This wasn't for KDB, so switch to real trap: */ From owner-svn-src-projects@FreeBSD.ORG Tue Jul 28 21:18:27 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 047D31065674; Tue, 28 Jul 2009 21:18:27 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E62738FC22; Tue, 28 Jul 2009 21:18:26 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6SLIQHW043767; Tue, 28 Jul 2009 21:18:26 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6SLIQQC043762; Tue, 28 Jul 2009 21:18:26 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907282118.n6SLIQQC043762@svn.freebsd.org> From: Stanislav Sedov Date: Tue, 28 Jul 2009 21:18:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195924 - in projects/libprocstat: sys/kern sys/sys usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Jul 2009 21:18:27 -0000 Author: stas Date: Tue Jul 28 21:18:26 2009 New Revision: 195924 URL: http://svn.freebsd.org/changeset/base/195924 Log: - Imeplement mmaped files access via sysctl. Modified: projects/libprocstat/sys/kern/kern_descrip.c projects/libprocstat/sys/kern/kern_proc.c projects/libprocstat/sys/sys/user.h projects/libprocstat/usr.bin/fstat/libprocstat.c Modified: projects/libprocstat/sys/kern/kern_descrip.c ============================================================================== --- projects/libprocstat/sys/kern/kern_descrip.c Tue Jul 28 19:58:07 2009 (r195923) +++ projects/libprocstat/sys/kern/kern_descrip.c Tue Jul 28 21:18:26 2009 (r195924) @@ -3123,8 +3123,8 @@ fail: return (error); } -static int -fill_vnode_info(struct vnode *vp, struct kinfo_file *kif) +int +vntype_to_kinfo(int vtype) { struct { int vtype; @@ -3141,25 +3141,30 @@ fill_vnode_info(struct vnode *vp, struct { VBAD, KF_VTYPE_VBAD } }; #define NVTYPES (sizeof(vtypes_table) / sizeof(*vtypes_table)) - struct vattr va; - char *fullpath, *freepath; - int error, vfslocked; unsigned int i; - if (vp == NULL) - return (1); - /* * Perform vtype translation. */ for (i = 0; i < NVTYPES; i++) - if (vtypes_table[i].vtype == vp->v_type) + if (vtypes_table[i].vtype == vtype) break; if (i < NVTYPES) - kif->kf_vnode_type = vtypes_table[i].kf_vtype; - else - kif->kf_vnode_type = KF_VTYPE_UNKNOWN; + return (vtypes_table[i].kf_vtype); + + return (KF_VTYPE_UNKNOWN); +} +static int +fill_vnode_info(struct vnode *vp, struct kinfo_file *kif) +{ + struct vattr va; + char *fullpath, *freepath; + int error, vfslocked; + + if (vp == NULL) + return (1); + kif->kf_vnode_type = vntype_to_kinfo(vp->v_type); freepath = NULL; fullpath = "-"; error = vn_fullpath(curthread, vp, &fullpath, &freepath); Modified: projects/libprocstat/sys/kern/kern_proc.c ============================================================================== --- projects/libprocstat/sys/kern/kern_proc.c Tue Jul 28 19:58:07 2009 (r195923) +++ projects/libprocstat/sys/kern/kern_proc.c Tue Jul 28 21:18:26 2009 (r195924) @@ -1640,8 +1640,6 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_AR last_timestamp = map->timestamp; vm_map_unlock_read(map); - kve->kve_fileid = 0; - kve->kve_fsid = 0; freepath = NULL; fullpath = ""; if (lobj) { @@ -1683,12 +1681,18 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_AR if (vp != NULL) { vn_fullpath(curthread, vp, &fullpath, &freepath); + kve->kve_vn_type = vntype_to_kinfo(vp->v_type); cred = curthread->td_ucred; vfslocked = VFS_LOCK_GIANT(vp->v_mount); vn_lock(vp, LK_SHARED | LK_RETRY); if (VOP_GETATTR(vp, &va, cred) == 0) { - kve->kve_fileid = va.va_fileid; - kve->kve_fsid = va.va_fsid; + kve->kve_vn_fileid = va.va_fileid; + kve->kve_vn_fsid = va.va_fsid; + kve->kve_vn_mode = + MAKEIMODE(va.va_type, va.va_mode); + kve->kve_vn_size = va.va_size; + kve->kve_vn_rdev = va.va_rdev; + kve->kve_status = KF_ATTR_VALID; } vput(vp); VFS_UNLOCK_GIANT(vfslocked); Modified: projects/libprocstat/sys/sys/user.h ============================================================================== --- projects/libprocstat/sys/sys/user.h Tue Jul 28 19:58:07 2009 (r195923) +++ projects/libprocstat/sys/sys/user.h Tue Jul 28 21:18:26 2009 (r195924) @@ -434,16 +434,21 @@ struct kinfo_vmentry { uint64_t kve_start; /* Starting address. */ uint64_t kve_end; /* Finishing address. */ uint64_t kve_offset; /* Mapping offset in object */ - uint64_t kve_fileid; /* inode number if vnode */ - uint32_t kve_fsid; /* dev_t of vnode location */ + uint64_t kve_vn_fileid; /* inode number if vnode */ + uint32_t kve_vn_fsid; /* dev_t of vnode location */ int kve_flags; /* Flags on map entry. */ int kve_resident; /* Number of resident pages. */ int kve_private_resident; /* Number of private pages. */ int kve_protection; /* Protection bitmask. */ int kve_ref_count; /* VM obj ref count. */ int kve_shadow_count; /* VM obj shadow count. */ + int kve_vn_type; /* Vnode type. */ + off_t kve_vn_size; /* File size. */ + dev_t kve_vn_rdev; /* Device id if device. */ + mode_t kve_vn_mode; /* File mode. */ + uint16_t kve_status; /* Status flags. */ int _kve_pad0; /* 64bit align next field */ - int _kve_ispare[16]; /* Space for more stuff. */ + int _kve_ispare[11]; /* Space for more stuff. */ /* Truncated before copyout in sysctl */ char kve_path[PATH_MAX]; /* Path to VM obj, if any. */ }; @@ -470,4 +475,8 @@ struct kinfo_kstack { int _kkst_ispare[16]; /* Space for more stuff. */ }; +#ifdef _KERNEL +int vntype_to_kinfo(int vtype); +#endif /* !_KERNEL */ + #endif Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Tue Jul 28 19:58:07 2009 (r195923) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Tue Jul 28 21:18:26 2009 (r195924) @@ -528,9 +528,10 @@ kinfo_uflags2fst(int fd) } static struct filestat_list * -procstat_getfiles_sysctl(struct kinfo_proc *kp, int mmapped __unused) +procstat_getfiles_sysctl(struct kinfo_proc *kp, int mmapped) { struct kinfo_file *kif, *files; + struct kinfo_vmentry *kve, *vmentries; struct filestat_list *head; struct filestat *entry; int cnt, fd, fflags; @@ -568,6 +569,26 @@ procstat_getfiles_sysctl(struct kinfo_pr if (entry != NULL) STAILQ_INSERT_TAIL(head, entry, next); } + if (mmapped != 0) { + vmentries = kinfo_getvmmap(kp->ki_pid, &cnt); + if (vmentries == NULL || cnt == 0) + goto fail; + for (i = 0; i < cnt; i++) { + kve = &vmentries[i]; + if (kve->kve_type != KVME_TYPE_VNODE) + continue; + fflags = 0; + if (kve->kve_protection & KVME_PROT_READ) + fflags = PS_FST_FFLAG_READ; + if (kve->kve_protection & KVME_PROT_WRITE) + fflags |= PS_FST_FFLAG_WRITE; + entry = filestat_new_entry(kve, PS_FST_TYPE_VNODE, -1, + fflags, PS_FST_UFLAG_MMAP); + if (entry != NULL) + STAILQ_INSERT_TAIL(head, entry, next); + } + } +fail: return (head); } @@ -835,37 +856,66 @@ procstat_get_vnode_info_sysctl(struct fi { struct statfs stbuf; struct kinfo_file *kif; - char *name; + struct kinfo_vmentry *kve; + int vntype; + dev_t rdev; + off_t size; + mode_t mode; + int status; + uint64_t fileid; + uint32_t fsid; + char *name, *path; assert(fst); assert(vn); - kif = fst->fs_typedep; - if (kif == NULL) - return (1); bzero(vn, sizeof(*vn)); - vn->vn_type = kinfo_vtype2fst(kif->kf_vnode_type); - if (vn->vn_type == PS_FST_VTYPE_VNON || - vn->vn_type == PS_FST_VTYPE_VBAD || - (kif->kf_status & KF_ATTR_VALID) == 0) + if (fst->fs_typedep == NULL) + return (1); + if (fst->fs_uflags & PS_FST_UFLAG_MMAP) { + kve = fst->fs_typedep; + fileid = kve->kve_vn_fileid; + fsid = kve->kve_vn_fsid; + mode = kve->kve_vn_mode; + path = kve->kve_path; + rdev = kve->kve_vn_rdev; + size = kve->kve_vn_size; + vntype = kinfo_vtype2fst(kve->kve_vn_type); + status = kve->kve_status; + } else { + kif = fst->fs_typedep; + fileid = kif->kf_un.file.kf_file_fileid; + fsid = kif->kf_un.file.kf_file_fsid; + mode = kif->kf_un.file.kf_file_mode; + path = kif->kf_path; + rdev = kif->kf_un.file.kf_file_rdev; + size = kif->kf_un.file.kf_file_size; + vntype = kinfo_vtype2fst(kif->kf_vnode_type); + status = kif->kf_status; + } + vn->vn_type = vntype; + if (vntype == PS_FST_VTYPE_VNON || vntype == PS_FST_VTYPE_VBAD || + (status & KF_ATTR_VALID) == 0) return (0); - if (kif->kf_path && *kif->kf_path) { - statfs(kif->kf_path, &stbuf); + if (path && *path) { + statfs(path, &stbuf); vn->mntdir = strdup(stbuf.f_mntonname); } - vn->vn_dev = kif->kf_un.file.kf_file_rdev; - if (kif->kf_vnode_type == KF_VTYPE_VBLK) { - name = devname(vn->vn_dev, S_IFBLK); + vn->vn_dev =rdev; + if (vntype == KF_VTYPE_VBLK) { + name = devname(rdev, S_IFBLK); if (name != NULL) - strlcpy(vn->vn_devname, name, sizeof(vn->vn_devname)); - } else if (kif->kf_vnode_type == KF_VTYPE_VCHR) { + strlcpy(vn->vn_devname, name, + sizeof(vn->vn_devname)); + } else if (vntype == KF_VTYPE_VCHR) { name = devname(vn->vn_dev, S_IFCHR); if (name != NULL) - strlcpy(vn->vn_devname, name, sizeof(vn->vn_devname)); + strlcpy(vn->vn_devname, name, + sizeof(vn->vn_devname)); } - vn->vn_fsid = kif->kf_un.file.kf_file_fsid; - vn->vn_fileid = kif->kf_un.file.kf_file_fileid; - vn->vn_size = kif->kf_un.file.kf_file_size; - vn->vn_mode = kif->kf_un.file.kf_file_mode; + vn->vn_fsid = fsid; + vn->vn_fileid = fileid; + vn->vn_size = size; + vn->vn_mode = mode; return (0); } From owner-svn-src-projects@FreeBSD.ORG Wed Jul 29 19:19:13 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AFED0106566B; Wed, 29 Jul 2009 19:19:13 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9BAFB8FC18; Wed, 29 Jul 2009 19:19:13 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6TJJD6J079999; Wed, 29 Jul 2009 19:19:13 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6TJJDfU079979; Wed, 29 Jul 2009 19:19:13 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907291919.n6TJJDfU079979@svn.freebsd.org> From: Nathan Whitehorn Date: Wed, 29 Jul 2009 19:19:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195948 - in projects/ppc64/sys: conf powerpc/aim powerpc/aim64 powerpc/include powerpc/mambo powerpc/powerpc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jul 2009 19:19:13 -0000 Author: nwhitehorn Date: Wed Jul 29 19:19:13 2009 New Revision: 195948 URL: http://svn.freebsd.org/changeset/base/195948 Log: Virtual memory now really works, and the kernel boots to the point of running through device detection and complaining about not being able to find a PIC. Trap handling (especially for user-space) still has a ways to go. Added: projects/ppc64/sys/powerpc/mambo/ projects/ppc64/sys/powerpc/mambo/mambo_console.c projects/ppc64/sys/powerpc/mambo/mambocall.S projects/ppc64/sys/powerpc/mambo/mambocall.h Modified: projects/ppc64/sys/conf/files.powerpc64 projects/ppc64/sys/conf/options.powerpc64 projects/ppc64/sys/powerpc/aim/ofw_machdep.c projects/ppc64/sys/powerpc/aim/platform_chrp.c projects/ppc64/sys/powerpc/aim64/locore.S projects/ppc64/sys/powerpc/aim64/machdep.c projects/ppc64/sys/powerpc/aim64/trap_subr.S projects/ppc64/sys/powerpc/include/param.h projects/ppc64/sys/powerpc/include/pcpu.h projects/ppc64/sys/powerpc/include/pmap.h projects/ppc64/sys/powerpc/include/spr.h projects/ppc64/sys/powerpc/include/sr.h projects/ppc64/sys/powerpc/include/trap_aim.h projects/ppc64/sys/powerpc/include/vmparam.h projects/ppc64/sys/powerpc/powerpc/cpu.c projects/ppc64/sys/powerpc/powerpc/genassym.c Modified: projects/ppc64/sys/conf/files.powerpc64 ============================================================================== --- projects/ppc64/sys/conf/files.powerpc64 Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/conf/files.powerpc64 Wed Jul 29 19:19:13 2009 (r195948) @@ -34,7 +34,6 @@ dev/ofw/ofw_bus_subr.c optional aim dev/ofw/ofw_console.c optional aim dev/ofw/ofw_disk.c optional ofwd aim dev/ofw/ofw_iicbus.c optional iicbus aim -dev/ofw/ofw_standard.c optional aim dev/powermac_nvram/powermac_nvram.c optional powermac_nvram powermac dev/scc/scc_bfe_macio.c optional scc powermac dev/sound/macio/aoa.c optional snd_davbus | snd_ai2s powermac @@ -71,6 +70,8 @@ powerpc/aim64/mmu_oea64.c optional aim powerpc/aim64/swtch.S optional aim powerpc/cpufreq/dfs.c optional cpufreq powerpc/cpufreq/pcr.c optional cpufreq aim +powerpc/mambo/mambocall.S optional mambo +powerpc/mambo/mambo_console.c optional mambo powerpc/ofw/ofw_cpu.c optional aim powerpc/ofw/ofw_pcibus.c optional pci aim powerpc/ofw/ofw_pcib_pci.c optional pci aim Modified: projects/ppc64/sys/conf/options.powerpc64 ============================================================================== --- projects/ppc64/sys/conf/options.powerpc64 Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/conf/options.powerpc64 Wed Jul 29 19:19:13 2009 (r195948) @@ -3,6 +3,7 @@ AIM opt_global.h E500 opt_global.h +MAMBO GFB_DEBUG opt_gfb.h GFB_NO_FONT_LOADING opt_gfb.h Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/ofw_machdep.c Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/aim/ofw_machdep.c Wed Jul 29 19:19:13 2009 (r195948) @@ -83,7 +83,7 @@ struct { } ofwcall_funcdesc; #endif - +int ofw_real_mode_entry(void *); static int openfirmware(void *args); /* @@ -286,10 +286,14 @@ OF_initial_setup(void *fdt_ptr, void *ju * For PPC64, we need to hack up a function descriptor object * to be able to call a memory address. */ - ofwcall_funcdesc.funcptr = openfirm; - ofwcall_funcdesc.toc = 0; - ofwcall_funcdesc.env = 0; - ofwcall = (int (*)(void *))(&ofwcall_funcdesc); + if (ofw_real_mode) { + ofwcall = ofw_real_mode_entry; + } else { + ofwcall_funcdesc.funcptr = openfirm; + ofwcall_funcdesc.toc = 0; + ofwcall_funcdesc.env = 0; + ofwcall = (int (*)(void *))&ofwcall_funcdesc; + } #else ofwcall = openfirm; #endif @@ -334,15 +338,6 @@ openfirmware(void *args) if (pmap_bootstrapped && ofw_real_mode) args = (void *)pmap_kextract((vm_offset_t)args); - __asm __volatile( "\t" - "sync\n\t" - "mfmsr %0\n\t" - "mtmsr %1\n\t" - "isync\n" - : "=r" (oldmsr) - : "r" (ofmsr[0]) - ); - ofw_sprg_prepare(); if (pmap_bootstrapped && !ofw_real_mode) { @@ -364,8 +359,23 @@ openfirmware(void *args) isync(); } + __asm __volatile( "\t" + "sync\n\t" + "mfmsr %0\n\t" + "mtmsr %1\n\t" + "isync\n" + : "=r" (oldmsr) + : "r" (ofmsr[0]) + ); + result = ofwcall(args); + __asm( "\t" + "mtmsr %0\n\t" + "isync\n" + : : "r" (oldmsr) + ); + if (pmap_bootstrapped && !ofw_real_mode) { /* * Restore the kernel's addr space. The isync() doesn;t @@ -380,12 +390,6 @@ openfirmware(void *args) ofw_sprg_restore(); - __asm( "\t" - "mtmsr %0\n\t" - "isync\n" - : : "r" (oldmsr) - ); - return (result); } Modified: projects/ppc64/sys/powerpc/aim/platform_chrp.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/platform_chrp.c Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/aim/platform_chrp.c Wed Jul 29 19:19:13 2009 (r195948) @@ -85,7 +85,7 @@ PLATFORM_DEF(chrp_platform); static int chrp_probe(platform_t plat) { - if (OF_finddevice("/memory") != -1) + if (OF_finddevice("/memory") != -1 || OF_finddevice("/memory@0") != -1) return (BUS_PROBE_GENERIC); return (ENXIO); Modified: projects/ppc64/sys/powerpc/aim64/locore.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/locore.S Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/aim64/locore.S Wed Jul 29 19:19:13 2009 (r195948) @@ -180,13 +180,43 @@ ASENTRY(__start) nop mr %r1, %r3 li %r3, 0 - stw %r3, 0(%r1) + std %r3, 0(%r1) bl .mi_startup nop b .OF_exit nop /* + * PPC64 ABI TOC base + */ + + .align 3 +tocbase: + .llong .TOC.@tocbase + +/* + * Open Firmware Real-mode Entry Point. This is a huge pain. + */ + +ASENTRY(ofw_real_mode_entry) + mflr 0 + lis 31,openfirmware_entry@ha + ld 31,openfirmware_entry@l(31) /* read client interface handler */ + + mfmsr 30 + mtsprg3 30 + andi. 30, 30, ~(PSL_DR | PSL_IR | PSL_EE)@l + mtmsrd 30 + + mtctr 31 + bctrl + + mfsprg3 30 + mtmsrd 30 + mtlr 0 + blr + +/* * int setfault() * * Similar to setjmp to setup for handling faults on accesses to user memory. Modified: projects/ppc64/sys/powerpc/aim64/machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim64/machdep.c Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/aim64/machdep.c Wed Jul 29 19:19:13 2009 (r195948) @@ -451,7 +451,7 @@ powerpc_init(u_int startkernel, u_int en */ thread0.td_pcb = (struct pcb *) ((thread0.td_kstack + thread0.td_kstack_pages * PAGE_SIZE - - sizeof(struct pcb)) & ~15); + sizeof(struct pcb)) & ~15UL); bzero((void *)thread0.td_pcb, sizeof(struct pcb)); pc->pc_curpcb = thread0.td_pcb; @@ -464,7 +464,7 @@ powerpc_init(u_int startkernel, u_int en "Boot flags requested debugger"); #endif - return (((uintptr_t)thread0.td_pcb - 16) & ~15); + return (((uintptr_t)thread0.td_pcb - 16) & ~15UL); } void Modified: projects/ppc64/sys/powerpc/aim64/trap_subr.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/trap_subr.S Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/aim64/trap_subr.S Wed Jul 29 19:19:13 2009 (r195948) @@ -43,31 +43,62 @@ * Save/restore segment registers */ -#define RESTORE_SRS(pmap, sr) \ - slbia; +/* + * Restore SRs for a pmap + * + * Requires that r27-r31 be scratch, with r27 initialized to the pmap + */ + +restoresrs: + slbia; + li %r29, 0; + mr %r28, %r27 + lwz %r27, PM_CONTEXT(%r27); +instslb: + li %r30, 31; + sld %r30, %r27, %r30; + ld %r31, PM_SR(%r28); + + cmpli 0, %r31, 0; + beq nslb; + + srdi %r31, %r31, 1; + or %r30, %r30, %r31; + sldi %r30, %r30, 12; + ld %r31, PM_SR(%r28); + sldi %r31, %r31, 27; + or %r31, %r31, %r29; + slbmte %r30, %r31; + +nslb: + addi %r28, %r28, 8; + addi %r29, %r29, 1; + cmpli 0, %r29, 63; + blt instslb; + + blr; /* * User SRs are loaded through a pointer to the current pmap. */ -#define RESTORE_USER_SRS(pmap,sr) \ - GET_CPUINFO(pmap); \ - lwz pmap,PC_CURPMAP(pmap); \ - lwzu sr,PM_SR(pmap); \ - RESTORE_SRS(pmap,sr) +#define RESTORE_USER_SRS() \ + GET_CPUINFO(%r27); \ + ld %r27,PC_CURPMAP(%r27); \ + bl restoresrs; /* * Kernel SRs are loaded directly from kernel_pmap_ */ -#define RESTORE_KERN_SRS(pmap,sr) \ - lis pmap,CNAME(kernel_pmap_store)@ha; \ - lwzu sr,CNAME(kernel_pmap_store)+PM_SR@l(pmap); \ - RESTORE_SRS(pmap,sr) +#define RESTORE_KERN_SRS() \ + lis %r27,CNAME(kernel_pmap_store)@ha; \ + addi %r27,%r27,CNAME(kernel_pmap_store)@l; \ + bl restoresrs; /* * FRAME_SETUP assumes: * SPRG1 SP (1) * SPRG3 trap type - * savearea r28-r31,DAR,DSISR (DAR & DSISR only for DSI traps) + * savearea r27-r31,DAR,DSISR (DAR & DSISR only for DSI traps) * r28 LR * r29 CR * r30 scratch @@ -88,45 +119,46 @@ isync; \ mfsprg1 %r31; /* get saved SP */ \ stdu %r31,-FRAMELEN(%r1); /* save it in the callframe */ \ - std %r0, FRAME_0+8(%r1); /* save r0 in the trapframe */ \ - std %r31,FRAME_1+8(%r1); /* save SP " " */ \ - std %r2, FRAME_2+8(%r1); /* save r2 " " */ \ - std %r28,FRAME_LR+8(%r1); /* save LR " " */ \ - stw %r29,FRAME_CR+8(%r1); /* save CR " " */ \ + std %r0, FRAME_0+16(%r1); /* save r0 in the trapframe */ \ + std %r31,FRAME_1+16(%r1); /* save SP " " */ \ + std %r2, FRAME_2+16(%r1); /* save r2 " " */ \ + std %r28,FRAME_LR+16(%r1); /* save LR " " */ \ + stw %r29,FRAME_CR+16(%r1); /* save CR " " */ \ GET_CPUINFO(%r2); \ + ld %r27,(savearea+CPUSAVE_R27)(%r2); /* get saved r27 */ \ ld %r28,(savearea+CPUSAVE_R28)(%r2); /* get saved r28 */ \ ld %r29,(savearea+CPUSAVE_R29)(%r2); /* get saved r29 */ \ ld %r30,(savearea+CPUSAVE_R30)(%r2); /* get saved r30 */ \ ld %r31,(savearea+CPUSAVE_R31)(%r2); /* get saved r31 */ \ - std %r3, FRAME_3+8(%r1); /* save r3-r31 */ \ - std %r4, FRAME_4+8(%r1); \ - std %r5, FRAME_5+8(%r1); \ - std %r6, FRAME_6+8(%r1); \ - std %r7, FRAME_7+8(%r1); \ - std %r8, FRAME_8+8(%r1); \ - std %r9, FRAME_9+8(%r1); \ - std %r10, FRAME_10+8(%r1); \ - std %r11, FRAME_11+8(%r1); \ - std %r12, FRAME_12+8(%r1); \ - std %r13, FRAME_13+8(%r1); \ - std %r14, FRAME_14+8(%r1); \ - std %r15, FRAME_15+8(%r1); \ - std %r16, FRAME_16+8(%r1); \ - std %r17, FRAME_17+8(%r1); \ - std %r18, FRAME_18+8(%r1); \ - std %r19, FRAME_19+8(%r1); \ - std %r20, FRAME_20+8(%r1); \ - std %r21, FRAME_21+8(%r1); \ - std %r22, FRAME_22+8(%r1); \ - std %r23, FRAME_23+8(%r1); \ - std %r24, FRAME_24+8(%r1); \ - std %r25, FRAME_25+8(%r1); \ - std %r26, FRAME_26+8(%r1); \ - std %r27, FRAME_27+8(%r1); \ - std %r28, FRAME_28+8(%r1); \ - std %r29, FRAME_29+8(%r1); \ - std %r30, FRAME_30+8(%r1); \ - std %r31, FRAME_31+8(%r1); \ + std %r3, FRAME_3+16(%r1); /* save r3-r31 */ \ + std %r4, FRAME_4+16(%r1); \ + std %r5, FRAME_5+16(%r1); \ + std %r6, FRAME_6+16(%r1); \ + std %r7, FRAME_7+16(%r1); \ + std %r8, FRAME_8+16(%r1); \ + std %r9, FRAME_9+16(%r1); \ + std %r10, FRAME_10+16(%r1); \ + std %r11, FRAME_11+16(%r1); \ + std %r12, FRAME_12+16(%r1); \ + std %r13, FRAME_13+16(%r1); \ + std %r14, FRAME_14+16(%r1); \ + std %r15, FRAME_15+16(%r1); \ + std %r16, FRAME_16+16(%r1); \ + std %r17, FRAME_17+16(%r1); \ + std %r18, FRAME_18+16(%r1); \ + std %r19, FRAME_19+16(%r1); \ + std %r20, FRAME_20+16(%r1); \ + std %r21, FRAME_21+16(%r1); \ + std %r22, FRAME_22+16(%r1); \ + std %r23, FRAME_23+16(%r1); \ + std %r24, FRAME_24+16(%r1); \ + std %r25, FRAME_25+16(%r1); \ + std %r26, FRAME_26+16(%r1); \ + std %r27, FRAME_27+16(%r1); \ + std %r28, FRAME_28+16(%r1); \ + std %r29, FRAME_29+16(%r1); \ + std %r30, FRAME_30+16(%r1); \ + std %r31, FRAME_31+16(%r1); \ ld %r28,(savearea+CPUSAVE_AIM_DAR)(%r2); /* saved DAR */ \ lwz %r29,(savearea+CPUSAVE_AIM_DSISR)(%r2);/* saved DSISR */\ ld %r30,(savearea+CPUSAVE_SRR0)(%r2); /* saved SRR0 */ \ @@ -134,61 +166,61 @@ mfxer %r3; \ mfctr %r4; \ mfsprg3 %r5; \ - std %r3, FRAME_XER+8(1); /* save xer/ctr/exc */ \ - std %r4, FRAME_CTR+8(1); \ - std %r5, FRAME_EXC+8(1); \ - std %r28,FRAME_AIM_DAR+8(1); \ - stw %r29,FRAME_AIM_DSISR+8(1); /* save dsisr/srr0/srr1 */ \ - std %r30,FRAME_SRR0+8(1); \ - std %r31,FRAME_SRR1+8(1) + mtlr %r6; \ + stw %r3, FRAME_XER+16(1); /* save xer/ctr/exc */ \ + std %r4, FRAME_CTR+16(1); \ + std %r5, FRAME_EXC+16(1); \ + std %r28,FRAME_AIM_DAR+16(1); \ + stw %r29,FRAME_AIM_DSISR+16(1); /* save dsisr/srr0/srr1 */ \ + std %r30,FRAME_SRR0+16(1); \ + std %r31,FRAME_SRR1+16(1) #define FRAME_LEAVE(savearea) \ /* Now restore regs: */ \ - ld %r2,FRAME_SRR0+8(%r1); \ - ld %r3,FRAME_SRR1+8(%r1); \ - ld %r4,FRAME_CTR+8(%r1); \ - ld %r5,FRAME_XER+8(%r1); \ - ld %r6,FRAME_LR+8(%r1); \ + ld %r2,FRAME_SRR0+16(%r1); \ + ld %r3,FRAME_SRR1+16(%r1); \ + ld %r4,FRAME_CTR+16(%r1); \ + lwz %r5,FRAME_XER+16(%r1); \ + ld %r6,FRAME_LR+16(%r1); \ GET_CPUINFO(%r7); \ std %r2,(savearea+CPUSAVE_SRR0)(%r7); /* save SRR0 */ \ std %r3,(savearea+CPUSAVE_SRR1)(%r7); /* save SRR1 */ \ - lwz %r7,FRAME_CR+8(%r1); \ + lwz %r7,FRAME_CR+16(%r1); \ mtctr %r4; \ mtxer %r5; \ - mtlr %r6; \ mtsprg1 %r7; /* save cr */ \ - ld %r31,FRAME_31+8(%r1); /* restore r0-31 */ \ - ld %r30,FRAME_30+8(%r1); \ - ld %r29,FRAME_29+8(%r1); \ - ld %r28,FRAME_28+8(%r1); \ - ld %r27,FRAME_27+8(%r1); \ - ld %r26,FRAME_26+8(%r1); \ - ld %r25,FRAME_25+8(%r1); \ - ld %r24,FRAME_24+8(%r1); \ - ld %r23,FRAME_23+8(%r1); \ - ld %r22,FRAME_22+8(%r1); \ - ld %r21,FRAME_21+8(%r1); \ - ld %r20,FRAME_20+8(%r1); \ - ld %r19,FRAME_19+8(%r1); \ - ld %r18,FRAME_18+8(%r1); \ - ld %r17,FRAME_17+8(%r1); \ - ld %r16,FRAME_16+8(%r1); \ - ld %r15,FRAME_15+8(%r1); \ - ld %r14,FRAME_14+8(%r1); \ - ld %r13,FRAME_13+8(%r1); \ - ld %r12,FRAME_12+8(%r1); \ - ld %r11,FRAME_11+8(%r1); \ - ld %r10,FRAME_10+8(%r1); \ - ld %r9, FRAME_9+8(%r1); \ - ld %r8, FRAME_8+8(%r1); \ - ld %r7, FRAME_7+8(%r1); \ - ld %r6, FRAME_6+8(%r1); \ - ld %r5, FRAME_5+8(%r1); \ - ld %r4, FRAME_4+8(%r1); \ - ld %r3, FRAME_3+8(%r1); \ - ld %r2, FRAME_2+8(%r1); \ - ld %r0, FRAME_0+8(%r1); \ - ld %r1, FRAME_1+8(%r1); \ + ld %r31,FRAME_31+16(%r1); /* restore r0-31 */ \ + ld %r30,FRAME_30+16(%r1); \ + ld %r29,FRAME_29+16(%r1); \ + ld %r28,FRAME_28+16(%r1); \ + ld %r27,FRAME_27+16(%r1); \ + ld %r26,FRAME_26+16(%r1); \ + ld %r25,FRAME_25+16(%r1); \ + ld %r24,FRAME_24+16(%r1); \ + ld %r23,FRAME_23+16(%r1); \ + ld %r22,FRAME_22+16(%r1); \ + ld %r21,FRAME_21+16(%r1); \ + ld %r20,FRAME_20+16(%r1); \ + ld %r19,FRAME_19+16(%r1); \ + ld %r18,FRAME_18+16(%r1); \ + ld %r17,FRAME_17+16(%r1); \ + ld %r16,FRAME_16+16(%r1); \ + ld %r15,FRAME_15+16(%r1); \ + ld %r14,FRAME_14+16(%r1); \ + ld %r13,FRAME_13+16(%r1); \ + ld %r12,FRAME_12+16(%r1); \ + ld %r11,FRAME_11+16(%r1); \ + ld %r10,FRAME_10+16(%r1); \ + ld %r9, FRAME_9+16(%r1); \ + ld %r8, FRAME_8+16(%r1); \ + ld %r7, FRAME_7+16(%r1); \ + ld %r6, FRAME_6+16(%r1); \ + ld %r5, FRAME_5+16(%r1); \ + ld %r4, FRAME_4+16(%r1); \ + ld %r3, FRAME_3+16(%r1); \ + ld %r2, FRAME_2+16(%r1); \ + ld %r0, FRAME_0+16(%r1); \ + ld %r1, FRAME_1+16(%r1); \ /* Can't touch %r1 from here on */ \ mtsprg2 %r2; /* save r2 & r3 */ \ mtsprg3 %r3; \ @@ -203,7 +235,7 @@ mtcr %r3; \ bf 17,1f; /* branch if PSL_PR is false */ \ /* Restore user SRs */ \ - RESTORE_USER_SRS(%r2,%r3); \ + RESTORE_USER_SRS(); /* uses r27-r31 */ \ 1: mfsprg1 %r2; /* restore cr */ \ mtcr %r2; \ GET_CPUINFO(%r2); \ @@ -236,6 +268,8 @@ CNAME(rstcode): addi %r1,%r1,(124-16)@l lis %r3,1@l + lis %r3,tocbase@ha + ld %r2,tocbase@l(%r3) bla CNAME(.pmap_cpu_bootstrap) nop bla CNAME(.cpudep_ap_bootstrap) @@ -271,7 +305,8 @@ CNAME(trapsize) = .-CNAME(trapcode) CNAME(alitrap): mtsprg1 %r1 /* save SP */ GET_CPUINFO(%r1) - std %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) /* free r28-r31 */ + std %r27,(PC_TEMPSAVE+CPUSAVE_R27)(%r1) /* free r27-r31 */ + std %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) std %r29,(PC_TEMPSAVE+CPUSAVE_R29)(%r1) std %r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1) std %r31,(PC_TEMPSAVE+CPUSAVE_R31)(%r1) @@ -302,7 +337,8 @@ CNAME(alisize) = .-CNAME(alitrap) CNAME(dsitrap): mtsprg1 %r1 /* save SP */ GET_CPUINFO(%r1) - std %r28,(PC_DISISAVE+CPUSAVE_R28)(%r1) /* free r28-r31 */ + std %r27,(PC_DISISAVE+CPUSAVE_R27)(%r1) /* free r27-r31 */ + std %r28,(PC_DISISAVE+CPUSAVE_R28)(%r1) std %r29,(PC_DISISAVE+CPUSAVE_R29)(%r1) std %r30,(PC_DISISAVE+CPUSAVE_R30)(%r1) std %r31,(PC_DISISAVE+CPUSAVE_R31)(%r1) @@ -326,6 +362,8 @@ disitrap: mtsprg3 %r1 GET_CPUINFO(%r1) + ld %r31,(PC_DISISAVE+CPUSAVE_R27)(%r1) + std %r31,(PC_TEMPSAVE+CPUSAVE_R27)(%r1) ld %r30,(PC_DISISAVE+CPUSAVE_R28)(%r1) std %r30,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) ld %r31,(PC_DISISAVE+CPUSAVE_R29)(%r1) @@ -357,6 +395,8 @@ disitrap: std %r30,(PC_DBSAVE +CPUSAVE_AIM_DAR)(%r1) /* save DAR */ lwz %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) /* get DSISR */ stw %r30,(PC_DBSAVE +CPUSAVE_AIM_DSISR)(%r1) /* save DSISR */ + ld %r31,(PC_DISISAVE+CPUSAVE_R27)(%r1) /* get r27 */ + std %r31,(PC_DBSAVE +CPUSAVE_R27)(%r1) /* save r27 */ ld %r30,(PC_DISISAVE+CPUSAVE_R28)(%r1) /* get r28 */ std %r30,(PC_DBSAVE +CPUSAVE_R28)(%r1) /* save r28 */ ld %r31,(PC_DISISAVE+CPUSAVE_R29)(%r1) /* get r29 */ @@ -378,7 +418,7 @@ realtrap: bf 17,k_trap /* branch if PSL_PR is false */ GET_CPUINFO(%r1) ld %r1,PC_CURPCB(%r1) - RESTORE_KERN_SRS(%r30,%r31) /* enable kernel mapping */ + RESTORE_KERN_SRS() /* enable kernel mapping */ ba s_trap /* @@ -397,7 +437,8 @@ generictrap: /* Save interesting registers */ GET_CPUINFO(%r1) - std %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) /* free r28-r31 */ + std %r27,(PC_TEMPSAVE+CPUSAVE_R27)(%r1) /* free r27-r31 */ + std %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) std %r29,(PC_TEMPSAVE+CPUSAVE_R29)(%r1) std %r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1) std %r31,(PC_TEMPSAVE+CPUSAVE_R31)(%r1) @@ -421,7 +462,7 @@ s_trap: GET_CPUINFO(%r1) u_trap: ld %r1,PC_CURPCB(%r1) - RESTORE_KERN_SRS(%r30,%r31) /* enable kernel mapping */ + RESTORE_KERN_SRS() /* enable kernel mapping */ /* * Now the common trap catching code. @@ -430,7 +471,9 @@ k_trap: FRAME_SETUP(PC_TEMPSAVE) /* Call C interrupt dispatcher: */ trapagain: - addi %r3,%r1,8 + lis %r3,tocbase@ha + ld %r2,tocbase@l(%r3) + addi %r3,%r1,16 bl CNAME(.powerpc_interrupt) nop bl CNAME(.trapexit) @@ -478,6 +521,7 @@ ASENTRY(breakpoint) mtmsr %r3 /* disable interrupts */ isync GET_CPUINFO(%r3) + std %r27,(PC_DBSAVE+CPUSAVE_R27)(%r3) std %r28,(PC_DBSAVE+CPUSAVE_R28)(%r3) std %r29,(PC_DBSAVE+CPUSAVE_R29)(%r3) std %r30,(PC_DBSAVE+CPUSAVE_R30)(%r3) @@ -502,7 +546,9 @@ dbtrap: FRAME_SETUP(PC_DBSAVE) /* Call C trap code: */ - addi %r3,%r1,8 + lis %r3,tocbase@ha + ld %r2,tocbase@l(%r3) + addi %r3,%r1,16 bl CNAME(.db_trap_glue) nop or. %r3,%r3,%r3 @@ -514,6 +560,7 @@ dbtrap: FRAME_LEAVE(PC_DBSAVE) mtsprg1 %r1 /* prepare for entrance to realtrap */ GET_CPUINFO(%r1) + std %r27,(PC_TEMPSAVE+CPUSAVE_R27)(%r1) std %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) std %r29,(PC_TEMPSAVE+CPUSAVE_R29)(%r1) std %r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1) @@ -551,6 +598,7 @@ CNAME(dblow): 1: /* Privileged, so drop to KDB */ GET_CPUINFO(%r1) + std %r27,(PC_DBSAVE+CPUSAVE_R27)(%r1) /* free r27 */ std %r28,(PC_DBSAVE+CPUSAVE_R28)(%r1) /* free r28 */ mfsprg2 %r28 /* r29 holds cr... */ std %r28,(PC_DBSAVE+CPUSAVE_R29)(%r1) /* free r29 */ Modified: projects/ppc64/sys/powerpc/include/param.h ============================================================================== --- projects/ppc64/sys/powerpc/include/param.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/param.h Wed Jul 29 19:19:13 2009 (r195948) @@ -95,7 +95,7 @@ #define PAGE_SHIFT 12 #define PAGE_SIZE (1 << PAGE_SHIFT) /* Page size */ -#define PAGE_MASK (PAGE_SIZE - 1) +#define PAGE_MASK (vm_offset_t)(PAGE_SIZE - 1) #define NPTEPG (PAGE_SIZE/(sizeof (pt_entry_t))) #ifndef KSTACK_PAGES Modified: projects/ppc64/sys/powerpc/include/pcpu.h ============================================================================== --- projects/ppc64/sys/powerpc/include/pcpu.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/pcpu.h Wed Jul 29 19:19:13 2009 (r195948) @@ -34,7 +34,7 @@ #include struct pmap; -#define CPUSAVE_LEN 8 +#define CPUSAVE_LEN 9 #define PCPU_MD_COMMON_FIELDS \ int pc_inside_intr; \ @@ -66,10 +66,11 @@ struct pmap; int pc_tid_next; /* Definitions for register offsets within the exception tmp save areas */ -#define CPUSAVE_R28 0 /* where r28 gets saved */ -#define CPUSAVE_R29 1 /* where r29 gets saved */ -#define CPUSAVE_R30 2 /* where r30 gets saved */ -#define CPUSAVE_R31 3 /* where r31 gets saved */ +#define CPUSAVE_R27 0 /* where r27 gets saved */ +#define CPUSAVE_R28 1 /* where r28 gets saved */ +#define CPUSAVE_R29 2 /* where r29 gets saved */ +#define CPUSAVE_R30 3 /* where r30 gets saved */ +#define CPUSAVE_R31 4 /* where r31 gets saved */ #define CPUSAVE_AIM_DAR 4 /* where SPR_DAR gets saved */ #define CPUSAVE_AIM_DSISR 5 /* where SPR_DSISR gets saved */ #define CPUSAVE_BOOKE_DEAR 4 /* where SPR_DEAR gets saved */ Modified: projects/ppc64/sys/powerpc/include/pmap.h ============================================================================== --- projects/ppc64/sys/powerpc/include/pmap.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/pmap.h Wed Jul 29 19:19:13 2009 (r195948) @@ -84,9 +84,16 @@ struct pmap_md { #define NPMAPS 32768 #endif /* !defined(NPMAPS) */ +#ifdef __powerpc64__ +#define NSEGS 64 /* Typical SLB size. */ +#else +#define NSEGS 16 +#endif + struct pmap { struct mtx pm_mtx; - u_int pm_sr[16]; + + register_t pm_sr[NSEGS]; u_int pm_active; u_int pm_context; Modified: projects/ppc64/sys/powerpc/include/spr.h ============================================================================== --- projects/ppc64/sys/powerpc/include/spr.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/spr.h Wed Jul 29 19:19:13 2009 (r195948) @@ -161,6 +161,7 @@ #define IBM970MP 0x0044 #define IBM970GX 0x0045 #define MPC860 0x0050 +#define IBMCELLBE 0x0070 #define MPC8240 0x0081 #define IBM405GP 0x4011 #define IBM405L 0x4161 Modified: projects/ppc64/sys/powerpc/include/sr.h ============================================================================== --- projects/ppc64/sys/powerpc/include/sr.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/sr.h Wed Jul 29 19:19:13 2009 (r195948) @@ -49,7 +49,7 @@ #define KERNEL_SEGMENT (0xfffff0 + KERNEL_SR) #define KERNEL2_SEGMENT (0xfffff0 + KERNEL2_SR) #define EMPTY_SEGMENT 0xfffff0 -#define USER_ADDR ((void *)(USER_SR << ADDR_SR_SHFT)) +#define USER_ADDR ((void *)((register_t)USER_SR << ADDR_SR_SHFT)) #define SEGMENT_LENGTH 0x10000000 #define SEGMENT_MASK 0xf0000000 Modified: projects/ppc64/sys/powerpc/include/trap_aim.h ============================================================================== --- projects/ppc64/sys/powerpc/include/trap_aim.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/trap_aim.h Wed Jul 29 19:19:13 2009 (r195948) @@ -39,7 +39,9 @@ #define EXC_RST 0x0100 /* Reset; all but IBM4xx */ #define EXC_MCHK 0x0200 /* Machine Check */ #define EXC_DSI 0x0300 /* Data Storage Interrupt */ +#define EXC_DSE 0x0380 /* Data Segment Interrupt */ #define EXC_ISI 0x0400 /* Instruction Storage Interrupt */ +#define EXC_ISE 0x0480 /* Instruction Segment Interrupt */ #define EXC_EXI 0x0500 /* External Interrupt */ #define EXC_ALI 0x0600 /* Alignment Interrupt */ #define EXC_PGM 0x0700 /* Program Interrupt */ Modified: projects/ppc64/sys/powerpc/include/vmparam.h ============================================================================== --- projects/ppc64/sys/powerpc/include/vmparam.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/vmparam.h Wed Jul 29 19:19:13 2009 (r195948) @@ -95,9 +95,9 @@ #if defined(AIM) /* AIM */ -#define KERNBASE 0x00100000 /* start of kernel virtual */ +#define KERNBASE 0x00100000UL /* start of kernel virtual */ -#define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)(KERNEL_SR << ADDR_SR_SHFT)) +#define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)KERNEL_SR << ADDR_SR_SHFT) #define VM_MAX_KERNEL_ADDRESS (VM_MIN_KERNEL_ADDRESS + 2*SEGMENT_LENGTH - 1) /* Added: projects/ppc64/sys/powerpc/mambo/mambo_console.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/mambo/mambo_console.c Wed Jul 29 19:19:13 2009 (r195948) @@ -0,0 +1,220 @@ +/*- + * Copyright (C) 2001 Benno Rice. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY Benno Rice ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD: head/sys/dev/mambo/mambo_console.c 193018 2009-05-29 06:41:23Z ed $"); + +#include "opt_comconsole.h" +#include "opt_ofw.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include "mambocall.h" + +#ifndef MAMBOCONS_POLL_HZ +#define MAMBOCONS_POLL_HZ 4 +#endif +#define MAMBOBURSTLEN 128 /* max number of bytes to write in one chunk */ + +#define MAMBO_CONSOLE_WRITE 0 +#define MAMBO_CONSOLE_READ 0 + +static tsw_open_t mambotty_open; +static tsw_close_t mambotty_close; +static tsw_outwakeup_t mambotty_outwakeup; + +static struct ttydevsw mambo_ttydevsw = { + .tsw_flags = TF_NOPREFIX, + .tsw_open = mambotty_open, + .tsw_close = mambotty_close, + .tsw_outwakeup = mambotty_outwakeup, +}; + +static int polltime; +static struct callout_handle mambo_timeouthandle + = CALLOUT_HANDLE_INITIALIZER(&mambo_timeouthandle); + +#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER) +static int alt_break_state; +#endif + +static void mambo_timeout(void *); + +static cn_probe_t mambo_cnprobe; +static cn_init_t mambo_cninit; +static cn_term_t mambo_cnterm; +static cn_getc_t mambo_cngetc; +static cn_putc_t mambo_cnputc; + +CONSOLE_DRIVER(mambo); + +static void +cn_drvinit(void *unused) +{ + char output[32]; + struct tty *tp; + + if (mambo_consdev.cn_pri != CN_DEAD && + mambo_consdev.cn_name[0] != '\0') { + if (OF_finddevice("/mambo") == -1) + return; + + tp = tty_alloc(&mambo_ttydevsw, NULL); + tty_makedev(tp, NULL, "%s", output); + tty_makealias(tp, "mambocons"); + } +} + +SYSINIT(cndev, SI_SUB_CONFIGURE, SI_ORDER_MIDDLE, cn_drvinit, NULL); + +static int +mambotty_open(struct tty *tp) +{ + polltime = hz / MAMBOCONS_POLL_HZ; + if (polltime < 1) + polltime = 1; + + mambo_timeouthandle = timeout(mambo_timeout, tp, polltime); + + return (0); +} + +static void +mambotty_close(struct tty *tp) +{ + + /* XXX Should be replaced with callout_stop(9) */ + untimeout(mambo_timeout, tp, mambo_timeouthandle); +} + +static void +mambotty_outwakeup(struct tty *tp) +{ + int len; + u_char buf[MAMBOBURSTLEN]; + + for (;;) { + len = ttydisc_getc(tp, buf, sizeof buf); + if (len == 0) + break; + mambocall(MAMBO_CONSOLE_WRITE, buf, (register_t)len, 1UL); + } +} + +static void +mambo_timeout(void *v) +{ + struct tty *tp; + int c; + + tp = (struct tty *)v; + + tty_lock(tp); + while ((c = mambo_cngetc(NULL)) != -1) + ttydisc_rint(tp, c, 0); + ttydisc_rint_done(tp); + tty_unlock(tp); + + mambo_timeouthandle = timeout(mambo_timeout, tp, polltime); +} + +static void +mambo_cnprobe(struct consdev *cp) +{ + if (OF_finddevice("/mambo") == -1) { + cp->cn_pri = CN_DEAD; + return; + } + + cp->cn_pri = CN_NORMAL; +} + +static void +mambo_cninit(struct consdev *cp) +{ + + /* XXX: This is the alias, but that should be good enough */ + strcpy(cp->cn_name, "mambocons"); +} + +static void +mambo_cnterm(struct consdev *cp) +{ +} + +static int +mambo_cngetc(struct consdev *cp) +{ + unsigned char ch; + + ch = mambocall(MAMBO_CONSOLE_READ); + + if (ch > 0) { +#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER) + int kdb_brk; + + if ((kdb_brk = kdb_alt_break(ch, &alt_break_state)) != 0) { + switch (kdb_brk) { + case KDB_REQ_DEBUGGER: + kdb_enter(KDB_WHY_BREAK, + "Break sequence on console"); + break; + case KDB_REQ_PANIC: + kdb_panic("Panic sequence on console"); + break; + case KDB_REQ_REBOOT: + kdb_reboot(); + break; + + } + } +#endif + return (ch); + } + + return (-1); +} + +static void +mambo_cnputc(struct consdev *cp, int c) +{ + char cbuf; + + cbuf = c; + mambocall(MAMBO_CONSOLE_WRITE, &cbuf, 1UL, 1UL); +} Added: projects/ppc64/sys/powerpc/mambo/mambocall.S ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/mambo/mambocall.S Wed Jul 29 19:19:13 2009 (r195948) @@ -0,0 +1,12 @@ +#include + + .text + +ASENTRY(mambocall) + /* + * Use the special Mambo callout opcode and whatever arguments we + * were passed. Then return whatever Mambo returned. + */ + .long 0x000EAEB0 + blr + Added: projects/ppc64/sys/powerpc/mambo/mambocall.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/mambo/mambocall.h Wed Jul 29 19:19:13 2009 (r195948) @@ -0,0 +1,35 @@ +/*- + * Copyright 2008 by Nathan Whitehorn. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: src/sys/powerpc/powermac/maciovar.h,v 1.8 2008/04/26 18:35:44 marcel Exp $ + */ + +#ifndef _MAMBO_MAMBOCALL_H_ +#define _MAMBO_MAMBOCALL_H_ + +int mambocall(int op, ...); + +#endif /* _MAMBO_MAMBOCALL_H_ */ Modified: projects/ppc64/sys/powerpc/powerpc/cpu.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/cpu.c Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/powerpc/cpu.c Wed Jul 29 19:19:13 2009 (r195948) @@ -96,6 +96,7 @@ static const struct cputab models[] = { { "IBM PowerPC 970FX", IBM970FX, REVFMT_MAJMIN }, { "IBM PowerPC 970GX", IBM970GX, REVFMT_MAJMIN }, { "IBM PowerPC 970MP", IBM970MP, REVFMT_MAJMIN }, + { "IBM Cell Broadband Engine", IBMCELLBE, REVFMT_MAJMIN }, { "Motorola PowerPC 7400", MPC7400, REVFMT_MAJMIN }, { "Motorola PowerPC 7410", MPC7410, REVFMT_MAJMIN }, { "Motorola PowerPC 7450", MPC7450, REVFMT_MAJMIN }, Modified: projects/ppc64/sys/powerpc/powerpc/genassym.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/genassym.c Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/powerpc/genassym.c Wed Jul 29 19:19:13 2009 (r195948) @@ -70,33 +70,34 @@ ASSYM(PC_BOOKE_TLB_LEVEL, offsetof(struc ASSYM(PC_BOOKE_TLB_LOCK, offsetof(struct pcpu, pc_booke_tlb_lock)); #endif -ASSYM(CPUSAVE_R28, CPUSAVE_R28*4); -ASSYM(CPUSAVE_R29, CPUSAVE_R29*4); -ASSYM(CPUSAVE_R30, CPUSAVE_R30*4); -ASSYM(CPUSAVE_R31, CPUSAVE_R31*4); -ASSYM(CPUSAVE_SRR0, CPUSAVE_SRR0*4); -ASSYM(CPUSAVE_SRR1, CPUSAVE_SRR1*4); -ASSYM(CPUSAVE_AIM_DAR, CPUSAVE_AIM_DAR*4); -ASSYM(CPUSAVE_AIM_DSISR, CPUSAVE_AIM_DSISR*4); -ASSYM(CPUSAVE_BOOKE_DEAR, CPUSAVE_BOOKE_DEAR*4); -ASSYM(CPUSAVE_BOOKE_ESR, CPUSAVE_BOOKE_ESR*4); - -ASSYM(TLBSAVE_BOOKE_LR, TLBSAVE_BOOKE_LR*4); -ASSYM(TLBSAVE_BOOKE_CR, TLBSAVE_BOOKE_CR*4); -ASSYM(TLBSAVE_BOOKE_SRR0, TLBSAVE_BOOKE_SRR0*4); -ASSYM(TLBSAVE_BOOKE_SRR1, TLBSAVE_BOOKE_SRR1*4); -ASSYM(TLBSAVE_BOOKE_R20, TLBSAVE_BOOKE_R20*4); -ASSYM(TLBSAVE_BOOKE_R21, TLBSAVE_BOOKE_R21*4); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Wed Jul 29 20:32:28 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6E4241065673; Wed, 29 Jul 2009 20:32:28 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5CE668FC15; Wed, 29 Jul 2009 20:32:28 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6TKWS1H081499; Wed, 29 Jul 2009 20:32:28 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6TKWSOT081497; Wed, 29 Jul 2009 20:32:28 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907292032.n6TKWSOT081497@svn.freebsd.org> From: Nathan Whitehorn Date: Wed, 29 Jul 2009 20:32:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195950 - projects/ppc64/sys/powerpc/mambo X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jul 2009 20:32:28 -0000 Author: nwhitehorn Date: Wed Jul 29 20:32:28 2009 New Revision: 195950 URL: http://svn.freebsd.org/changeset/base/195950 Log: The correct opcode for reading the console is 60, not 0. Modified: projects/ppc64/sys/powerpc/mambo/mambo_console.c Modified: projects/ppc64/sys/powerpc/mambo/mambo_console.c ============================================================================== --- projects/ppc64/sys/powerpc/mambo/mambo_console.c Wed Jul 29 19:38:33 2009 (r195949) +++ projects/ppc64/sys/powerpc/mambo/mambo_console.c Wed Jul 29 20:32:28 2009 (r195950) @@ -52,7 +52,7 @@ __FBSDID("$FreeBSD: head/sys/dev/mambo/m #define MAMBOBURSTLEN 128 /* max number of bytes to write in one chunk */ #define MAMBO_CONSOLE_WRITE 0 -#define MAMBO_CONSOLE_READ 0 +#define MAMBO_CONSOLE_READ 60 static tsw_open_t mambotty_open; static tsw_close_t mambotty_close; From owner-svn-src-projects@FreeBSD.ORG Wed Jul 29 21:09:03 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A3A471065674; Wed, 29 Jul 2009 21:09:03 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 913168FC47; Wed, 29 Jul 2009 21:09:03 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6TL93wn082364; Wed, 29 Jul 2009 21:09:03 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6TL93mg082360; Wed, 29 Jul 2009 21:09:03 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907292109.n6TL93mg082360@svn.freebsd.org> From: Stanislav Sedov Date: Wed, 29 Jul 2009 21:09:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195951 - in projects/libprocstat: sys/kern sys/sys usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jul 2009 21:09:03 -0000 Author: stas Date: Wed Jul 29 21:09:03 2009 New Revision: 195951 URL: http://svn.freebsd.org/changeset/base/195951 Log: - Rearrange kf_un fields to eliminate possible architecture-dependent paddings. Also name fields more consistently. - Pad all kf_un elements explicitly to avoid confusion. Suggested by: rwatson Modified: projects/libprocstat/sys/kern/kern_descrip.c projects/libprocstat/sys/sys/user.h projects/libprocstat/usr.bin/fstat/libprocstat.c Modified: projects/libprocstat/sys/kern/kern_descrip.c ============================================================================== --- projects/libprocstat/sys/kern/kern_descrip.c Wed Jul 29 20:32:28 2009 (r195950) +++ projects/libprocstat/sys/kern/kern_descrip.c Wed Jul 29 21:09:03 2009 (r195951) @@ -3183,11 +3183,11 @@ fill_vnode_info(struct vnode *vp, struct VFS_UNLOCK_GIANT(vfslocked); if (error != 0) return (error); - kif->kf_un.file.kf_file_fsid = va.va_fsid; - kif->kf_un.file.kf_file_fileid = va.va_fileid; - kif->kf_un.file.kf_file_mode = MAKEIMODE(va.va_type, va.va_mode); - kif->kf_un.file.kf_file_size = va.va_size; - kif->kf_un.file.kf_file_rdev = va.va_rdev; + kif->kf_un.kf_file.kf_file_fsid = va.va_fsid; + kif->kf_un.kf_file.kf_file_fileid = va.va_fileid; + kif->kf_un.kf_file.kf_file_mode = MAKEIMODE(va.va_type, va.va_mode); + kif->kf_un.kf_file.kf_file_size = va.va_size; + kif->kf_un.kf_file.kf_file_rdev = va.va_rdev; return (0); } @@ -3204,14 +3204,14 @@ fill_socket_info(struct socket *so, stru kif->kf_sock_domain = so->so_proto->pr_domain->dom_family; kif->kf_sock_type = so->so_type; kif->kf_sock_protocol = so->so_proto->pr_protocol; - kif->kf_un.sock.kf_sock_pcb = (uintptr_t)so->so_pcb; + kif->kf_un.kf_sock.kf_sock_pcb = (uintptr_t)so->so_pcb; switch(kif->kf_sock_domain) { case AF_INET: case AF_INET6: if (kif->kf_sock_protocol == IPPROTO_TCP) { if (so->so_pcb != NULL) { inpcb = (struct inpcb *)(so->so_pcb); - kif->kf_un.sock.kf_sock_inpcb = + kif->kf_un.kf_sock.kf_sock_inpcb = (uintptr_t)inpcb->inp_ppcb; } } @@ -3220,11 +3220,11 @@ fill_socket_info(struct socket *so, stru if (so->so_pcb != NULL) { unpcb = (struct unpcb *)(so->so_pcb); if (unpcb->unp_conn) { - kif->kf_un.sock.kf_sock_unpconn = + kif->kf_un.kf_sock.kf_sock_unpconn = (uintptr_t)unpcb->unp_conn; - kif->kf_un.sock.kf_sock_rcv_sb_state = + kif->kf_un.kf_sock.kf_sock_rcv_sb_state = so->so_rcv.sb_state; - kif->kf_un.sock.kf_sock_snd_sb_state = + kif->kf_un.kf_sock.kf_sock_snd_sb_state = so->so_snd.sb_state; } } @@ -3251,7 +3251,7 @@ fill_pts_info(struct tty *tp, struct kin if (tp == NULL) return (1); - kif->kf_un.pts.pts_dev = tty_udev(tp); + kif->kf_un.kf_pts.kf_pts_dev = tty_udev(tp); strlcpy(kif->kf_path, tty_devname(tp), sizeof(kif->kf_path)); return (0); } @@ -3262,9 +3262,9 @@ fill_pipe_info(struct pipe *pi, struct k if (pi == NULL) return (1); - kif->kf_un.pipe.pipe_addr = (uintptr_t)pi; - kif->kf_un.pipe.pipe_peer = (uintptr_t)pi->pipe_peer; - kif->kf_un.pipe.pipe_buffer_cnt = pi->pipe_buffer.cnt; + kif->kf_un.kf_pipe.kf_pipe_addr = (uintptr_t)pi; + kif->kf_un.kf_pipe.kf_pipe_peer = (uintptr_t)pi->pipe_peer; + kif->kf_un.kf_pipe.kf_pipe_buffer_cnt = pi->pipe_buffer.cnt; return (0); } Modified: projects/libprocstat/sys/sys/user.h ============================================================================== --- projects/libprocstat/sys/sys/user.h Wed Jul 29 20:32:28 2009 (r195950) +++ projects/libprocstat/sys/sys/user.h Wed Jul 29 21:09:03 2009 (r195951) @@ -336,39 +336,46 @@ struct kinfo_file { struct sockaddr_storage kf_sa_peer; /* Peer address. */ union { struct { - /* Send buffer state. */ - uint16_t kf_sock_snd_sb_state; - /* Receive buffer state. */ - uint16_t kf_sock_rcv_sb_state; /* Address of so_pcb. */ uint64_t kf_sock_pcb; /* Address of inp_ppcb. */ uint64_t kf_sock_inpcb; /* Address of unp_conn. */ uint64_t kf_sock_unpconn; - /* Round to 64-bit alignment. */ - int kf_sock_pad; - } sock; + /* Send buffer state. */ + uint16_t kf_sock_snd_sb_state; + /* Receive buffer state. */ + uint16_t kf_sock_rcv_sb_state; + /* Round to 64 bit alignment. */ + uint32_t kf_sock_pad0; + } kf_sock; struct { - /* Vnode filesystem id. */ - dev_t kf_file_fsid; - /* File device. */ - dev_t kf_file_rdev; /* Global file id. */ uint64_t kf_file_fileid; /* File size. */ off_t kf_file_size; + /* Vnode filesystem id. */ + dev_t kf_file_fsid; + /* File device. */ + dev_t kf_file_rdev; /* File mode. */ mode_t kf_file_mode; - } file; + /* Round to 64 bit alignment. */ + uint16_t kf_file_pad0; + uint32_t kf_file_pad1; + } kf_file; struct { - uint32_t pipe_buffer_cnt; - uint64_t pipe_addr; - uint64_t pipe_peer; - } pipe; + uint64_t kf_pipe_addr; + uint64_t kf_pipe_peer; + uint32_t kf_pipe_buffer_cnt; + /* Round to 64 bit alignment. */ + uint32_t kf_pipe_pad0[3]; + } kf_pipe; struct { - dev_t pts_dev; - } pts; + dev_t kf_pts_dev; + /* Round to 64 bit alignment. */ + uint32_t kf_pts_pad0[7]; + } kf_pts; } kf_un; uint16_t kf_status; /* Status flags. */ uint16_t kf_pad1; /* Round to 32 bit alignment. */ Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Wed Jul 29 20:32:28 2009 (r195950) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Wed Jul 29 21:09:03 2009 (r195951) @@ -650,9 +650,9 @@ procstat_get_pipe_info_sysctl(struct fil kif = fst->fs_typedep; if (kif == NULL) return (1); - ps->addr = kif->kf_un.pipe.pipe_addr; - ps->peer = kif->kf_un.pipe.pipe_peer; - ps->buffer_cnt = kif->kf_un.pipe.pipe_buffer_cnt; + ps->addr = kif->kf_un.kf_pipe.kf_pipe_addr; + ps->peer = kif->kf_un.kf_pipe.kf_pipe_peer; + ps->buffer_cnt = kif->kf_un.kf_pipe.kf_pipe_buffer_cnt; return (0); } @@ -713,7 +713,7 @@ procstat_get_pts_info_sysctl(struct file kif = fst->fs_typedep; if (kif == NULL) return (0); - pts->dev = kif->kf_un.pts.pts_dev; + pts->dev = kif->kf_un.kf_pts.kf_pts_dev; strlcpy(pts->devname, kif->kf_path, sizeof(pts->devname)); return (0); } @@ -883,12 +883,12 @@ procstat_get_vnode_info_sysctl(struct fi status = kve->kve_status; } else { kif = fst->fs_typedep; - fileid = kif->kf_un.file.kf_file_fileid; - fsid = kif->kf_un.file.kf_file_fsid; - mode = kif->kf_un.file.kf_file_mode; + fileid = kif->kf_un.kf_file.kf_file_fileid; + fsid = kif->kf_un.kf_file.kf_file_fsid; + mode = kif->kf_un.kf_file.kf_file_mode; path = kif->kf_path; - rdev = kif->kf_un.file.kf_file_rdev; - size = kif->kf_un.file.kf_file_size; + rdev = kif->kf_un.kf_file.kf_file_rdev; + size = kif->kf_un.kf_file.kf_file_size; vntype = kinfo_vtype2fst(kif->kf_vnode_type); status = kif->kf_status; } @@ -1053,7 +1053,7 @@ procstat_get_socket_info_sysctl(struct f sock->type = kif->kf_sock_type; sock->proto = kif->kf_sock_protocol; sock->dom_family = kif->kf_sock_domain; - sock->so_pcb = kif->kf_un.sock.kf_sock_pcb; + sock->so_pcb = kif->kf_un.kf_sock.kf_sock_pcb; strlcpy(sock->dname, kif->kf_path, sizeof(sock->dname)); /* @@ -1063,16 +1063,16 @@ procstat_get_socket_info_sysctl(struct f case AF_INET: case AF_INET6: if (sock->proto == IPPROTO_TCP) - sock->inp_ppcb = kif->kf_un.sock.kf_sock_inpcb; + sock->inp_ppcb = kif->kf_un.kf_sock.kf_sock_inpcb; break; case AF_UNIX: - if (kif->kf_un.sock.kf_sock_unpconn != 0) { + if (kif->kf_un.kf_sock.kf_sock_unpconn != 0) { sock->so_rcv_sb_state = - kif->kf_un.sock.kf_sock_rcv_sb_state; + kif->kf_un.kf_sock.kf_sock_rcv_sb_state; sock->so_snd_sb_state = - kif->kf_un.sock.kf_sock_snd_sb_state; + kif->kf_un.kf_sock.kf_sock_snd_sb_state; sock->unp_conn = - kif->kf_un.sock.kf_sock_unpconn; + kif->kf_un.kf_sock.kf_sock_unpconn; } break; default: From owner-svn-src-projects@FreeBSD.ORG Wed Jul 29 21:36:40 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8F8C1106570E; Wed, 29 Jul 2009 21:36:40 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7CF7F8FC1C; Wed, 29 Jul 2009 21:36:40 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6TLaeVE082976; Wed, 29 Jul 2009 21:36:40 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6TLae2B082973; Wed, 29 Jul 2009 21:36:40 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907292136.n6TLae2B082973@svn.freebsd.org> From: Nathan Whitehorn Date: Wed, 29 Jul 2009 21:36:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195952 - in projects/ppc64/sys/powerpc: aim aim64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jul 2009 21:36:40 -0000 Author: nwhitehorn Date: Wed Jul 29 21:36:40 2009 New Revision: 195952 URL: http://svn.freebsd.org/changeset/base/195952 Log: Fix physical memory map detection on IBM-style machines like the Cell simulator. Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/ofw_machdep.c Wed Jul 29 21:09:03 2009 (r195951) +++ projects/ppc64/sys/powerpc/aim/ofw_machdep.c Wed Jul 29 21:36:40 2009 (r195952) @@ -62,12 +62,6 @@ __FBSDID("$FreeBSD$"); static struct mem_region OFmem[OFMEM_REGIONS + 1], OFavail[OFMEM_REGIONS + 3]; static struct mem_region OFfree[OFMEM_REGIONS + 3]; -struct mem_region64 { - vm_offset_t mr_start_hi; - vm_offset_t mr_start_lo; - vm_size_t mr_size; -}; - extern register_t ofmsr[5]; extern struct pmap ofw_pmap; static int (*ofwcall)(void *); @@ -146,24 +140,13 @@ memr_merge(struct mem_region *from, stru to->mr_size = end - to->mr_start; } -/* - * This is called during powerpc_init, before the system is really initialized. - * It shall provide the total and the available regions of RAM. - * Both lists must have a zero-size entry as terminator. - * The available regions need not take the kernel into account, but needs - * to provide space for two additional entry beyond the terminating one. - */ -void -ofw_mem_regions(struct mem_region **memp, int *memsz, - struct mem_region **availp, int *availsz) +static int +parse_ofw_memory(phandle_t node, const char *prop, struct mem_region *output) { + cell_t address_cells, size_cells; + int sz, i, j; phandle_t phandle; - int asz, msz, fsz; - int i, j; - int still_merging; - cell_t address_cells; - - asz = msz = 0; + sz = 0; /* * Get #address-cells from root node, defaulting to 1 if it cannot @@ -173,71 +156,97 @@ ofw_mem_regions(struct mem_region **memp if (OF_getprop(phandle, "#address-cells", &address_cells, sizeof(address_cells)) < sizeof(address_cells)) address_cells = 1; + if (OF_getprop(phandle, "#size-cells", &size_cells, + sizeof(size_cells)) < sizeof(size_cells)) + size_cells = 1; /* * Get memory. */ - if ((phandle = OF_finddevice("/memory")) == -1 - || (asz = OF_getprop(phandle, "available", - OFavail, sizeof OFavail[0] * OFMEM_REGIONS)) <= 0) - { - if (ofw_real_mode) { - /* XXX MAMBO */ - printf("Physical memory unknown -- guessing 128 MB\n"); - - /* Leave the first 0xA000000 bytes for the kernel */ - OFavail[0].mr_start = 0xA00000; - OFavail[0].mr_size = 0x75FFFFF; - asz = sizeof(OFavail[0]); - } else { - panic("no memory?"); - } - } - - if (address_cells == 2) { - struct mem_region64 OFmem64[OFMEM_REGIONS + 1]; - if ((phandle == -1) || (msz = OF_getprop(phandle, "reg", - OFmem64, sizeof OFmem64[0] * OFMEM_REGIONS)) <= 0) { - if (ofw_real_mode) { - /* XXX MAMBO */ - OFmem64[0].mr_start_hi = 0; - OFmem64[0].mr_start_lo = 0x0; - OFmem64[0].mr_size = 0x7FFFFFF; - msz = sizeof(OFmem64[0]); - } else { + if (address_cells > 1 || size_cells > 1) { + cell_t OFmem[4*(OFMEM_REGIONS + 1)]; + if ((node == -1) || (sz = OF_getprop(node, prop, + OFmem, sizeof(OFmem[0]) * 4 * OFMEM_REGIONS)) <= 0) panic("Physical memory map not found"); + + i = 0; + j = 0; + while (i < sz/sizeof(cell_t)) { + #ifndef __powerpc64__ + /* On 32-bit PPC, ignore regions starting above 4 GB */ + if (OFmem[i] > 0) { + i += address_cells + size_cells; + continue; + } + #endif + + output[j].mr_start = OFmem[i++]; + if (address_cells == 2) { + output[j].mr_start <<= 32; + output[j].mr_start += OFmem[i++]; + } + + output[j].mr_size = OFmem[i++]; + if (size_cells == 2) { + output[j].mr_size <<= 32; + output[j].mr_size += OFmem[i++]; } - } - for (i = 0, j = 0; i < msz/sizeof(OFmem64[0]); i++) { - if (OFmem64[i].mr_start_hi == 0) { - OFmem[i].mr_start = OFmem64[i].mr_start_lo; - OFmem[i].mr_size = OFmem64[i].mr_size; - - /* - * Check for memory regions extending above 32-bit - * memory space, and restrict them to stay there. - */ - if (((uint64_t)OFmem[i].mr_start + - (uint64_t)OFmem[i].mr_size) > - BUS_SPACE_MAXADDR_32BIT) { - OFmem[i].mr_size = BUS_SPACE_MAXADDR_32BIT - - OFmem[i].mr_start; - } - j++; + #ifndef __powerpc64__ + /* + * Check for memory regions extending above 32-bit + * memory space, and restrict them to stay there. + */ + if (((uint64_t)output[j].mr_start + + (uint64_t)output[j].mr_size) > + BUS_SPACE_MAXADDR_32BIT) { + ouptut[j].mr_size = BUS_SPACE_MAXADDR_32BIT - + output[j].mr_start; } + #endif + j++; } - msz = j*sizeof(OFmem[0]); + sz = j*sizeof(output[0]); } else { - if ((msz = OF_getprop(phandle, "reg", - OFmem, sizeof OFmem[0] * OFMEM_REGIONS)) <= 0) + if ((sz = OF_getprop(node, prop, + output, sizeof(output[0]) * OFMEM_REGIONS)) <= 0) panic("Physical memory map not found"); } + return (sz); +} + +/* + * This is called during powerpc_init, before the system is really initialized. + * It shall provide the total and the available regions of RAM. + * Both lists must have a zero-size entry as terminator. + * The available regions need not take the kernel into account, but needs + * to provide space for two additional entry beyond the terminating one. + */ +void +ofw_mem_regions(struct mem_region **memp, int *memsz, + struct mem_region **availp, int *availsz) +{ + phandle_t phandle; + int asz, msz, fsz; + int i, j; + int still_merging; + + asz = msz = 0; + + /* + * Get memory. + */ + phandle = OF_finddevice("/memory"); + if (phandle == -1) + phandle = OF_finddevice("/memory@0"); + + msz = parse_ofw_memory(phandle, "reg", OFmem); + asz = parse_ofw_memory(phandle, "available", OFavail); + *memp = OFmem; *memsz = msz / sizeof(struct mem_region); - /* * OFavail may have overlapping regions - collapse these * and copy out remaining regions to OFfree Modified: projects/ppc64/sys/powerpc/aim64/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Wed Jul 29 21:09:03 2009 (r195951) +++ projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Wed Jul 29 21:36:40 2009 (r195952) @@ -820,6 +820,38 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o phys_avail_count++; physsz += regions[i].mr_size; } + + /* Check for overlap with the kernel and exception vectors */ + for (j = 0; j < 2*phys_avail_count; j+=2) { + if (phys_avail[j] < EXC_LAST) + phys_avail[j] += EXC_LAST; + + if (kernelstart >= phys_avail[j] && + kernelstart < phys_avail[j+1]) { + if (kernelend < phys_avail[j+1]) { + phys_avail[2*phys_avail_count] = + (kernelend & ~PAGE_MASK) + PAGE_SIZE; + phys_avail[2*phys_avail_count + 1] = + phys_avail[j+1]; + phys_avail_count++; + } + + phys_avail[j+1] = kernelstart & ~PAGE_MASK; + } + + if (kernelend >= phys_avail[j] && + kernelend < phys_avail[j+1]) { + if (kernelstart > phys_avail[j]) { + phys_avail[2*phys_avail_count] = phys_avail[j]; + phys_avail[2*phys_avail_count + 1] = + kernelstart & ~PAGE_MASK; + phys_avail_count++; + } + + phys_avail[j] = (kernelend & ~PAGE_MASK) + PAGE_SIZE; + } + } + physmem = btoc(physsz); /* From owner-svn-src-projects@FreeBSD.ORG Wed Jul 29 21:47:39 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 67BB3106564A; Wed, 29 Jul 2009 21:47:39 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3BA4E8FC0A; Wed, 29 Jul 2009 21:47:39 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6TLldpR083253; Wed, 29 Jul 2009 21:47:39 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6TLld7B083250; Wed, 29 Jul 2009 21:47:39 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907292147.n6TLld7B083250@svn.freebsd.org> From: Nathan Whitehorn Date: Wed, 29 Jul 2009 21:47:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195953 - in projects/ppc64/sys/powerpc: aim aim64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jul 2009 21:47:39 -0000 Author: nwhitehorn Date: Wed Jul 29 21:47:38 2009 New Revision: 195953 URL: http://svn.freebsd.org/changeset/base/195953 Log: Fix 32-bit build. Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/ofw_machdep.c Wed Jul 29 21:36:40 2009 (r195952) +++ projects/ppc64/sys/powerpc/aim/ofw_machdep.c Wed Jul 29 21:47:38 2009 (r195953) @@ -182,13 +182,17 @@ parse_ofw_memory(phandle_t node, const c output[j].mr_start = OFmem[i++]; if (address_cells == 2) { + #ifdef __powerpc64__ output[j].mr_start <<= 32; + #endif output[j].mr_start += OFmem[i++]; } output[j].mr_size = OFmem[i++]; if (size_cells == 2) { + #ifdef __powerpc64__ output[j].mr_size <<= 32; + #endif output[j].mr_size += OFmem[i++]; } @@ -200,7 +204,7 @@ parse_ofw_memory(phandle_t node, const c if (((uint64_t)output[j].mr_start + (uint64_t)output[j].mr_size) > BUS_SPACE_MAXADDR_32BIT) { - ouptut[j].mr_size = BUS_SPACE_MAXADDR_32BIT - + output[j].mr_size = BUS_SPACE_MAXADDR_32BIT - output[j].mr_start; } #endif Modified: projects/ppc64/sys/powerpc/aim64/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Wed Jul 29 21:36:40 2009 (r195952) +++ projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Wed Jul 29 21:47:38 2009 (r195953) @@ -388,7 +388,9 @@ static void moea64_kremove(mmu_t, vm_of static void moea64_syncicache(pmap_t pmap, vm_offset_t va, vm_offset_t pa); static void tlbia(void); +#ifdef __powerpc64__ static void slbia(void); +#endif /* * Kernel MMU interface @@ -750,7 +752,7 @@ moea64_bridge_cpu_bootstrap(mmu_t mmup, } #else for (i = 0; i < NSEGS; i++) - mtsrin(i << ADDR_SR_SHFT, pmap->pm_sr[i]); + mtsrin(i << ADDR_SR_SHFT, kernel_pmap->pm_sr[i]); #endif /* @@ -2070,11 +2072,13 @@ tlbia(void) TLBIE(NULL,i); } +#ifdef __powerpc64__ static void slbia(void) { __asm __volatile ("slbia"); } +#endif static int moea64_pvo_enter(pmap_t pm, uma_zone_t zone, struct pvo_head *pvo_head, From owner-svn-src-projects@FreeBSD.ORG Wed Jul 29 22:19:52 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6DD8B106566B; Wed, 29 Jul 2009 22:19:52 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5BEEE8FC12; Wed, 29 Jul 2009 22:19:52 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6TMJqdt083994; Wed, 29 Jul 2009 22:19:52 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6TMJq0J083991; Wed, 29 Jul 2009 22:19:52 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907292219.n6TMJq0J083991@svn.freebsd.org> From: Nathan Whitehorn Date: Wed, 29 Jul 2009 22:19:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195956 - in projects/ppc64/sys/powerpc: aim include X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jul 2009 22:19:52 -0000 Author: nwhitehorn Date: Wed Jul 29 22:19:52 2009 New Revision: 195956 URL: http://svn.freebsd.org/changeset/base/195956 Log: Make 32-bit kernels operational again by not storing DAR and R31 in the same part of the register cache for traps, and by dealing with some stupidity in the way Apple stores the available physical memory list in firmware. Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c projects/ppc64/sys/powerpc/include/pcpu.h Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/ofw_machdep.c Wed Jul 29 22:02:13 2009 (r195955) +++ projects/ppc64/sys/powerpc/aim/ofw_machdep.c Wed Jul 29 22:19:52 2009 (r195956) @@ -145,8 +145,11 @@ parse_ofw_memory(phandle_t node, const c { cell_t address_cells, size_cells; int sz, i, j; + int apple_hack_mode; phandle_t phandle; + sz = 0; + apple_hack_mode = 0; /* * Get #address-cells from root node, defaulting to 1 if it cannot @@ -159,7 +162,20 @@ parse_ofw_memory(phandle_t node, const c if (OF_getprop(phandle, "#size-cells", &size_cells, sizeof(size_cells)) < sizeof(size_cells)) size_cells = 1; + + /* + * On Apple hardware, address_cells is always 1 for "available", + * even when it is explicitly set to 2. Then all memory above 4 GB + * should be added by hand to the available list. Detect Apple hardware + * by seeing if ofw_real_mode is set -- only Apple seems to use + * virtual-mode OF. + */ + if (strcmp(prop, "available") == 0 && !ofw_real_mode) + apple_hack_mode = 1; + if (apple_hack_mode) + address_cells = 1; + /* * Get memory. */ @@ -217,6 +233,25 @@ parse_ofw_memory(phandle_t node, const c panic("Physical memory map not found"); } + #ifdef __powerpc64__ + if (apple_hack_mode) { + /* Add in regions above 4 GB to the available list */ + struct mem_region himem[OFMEM_REGIONS]; + int hisz; + + hisz = parse_ofw_memory(node, "reg", himem); + j = sz/sizeof(output[0]); + for (i = 0; i < hisz/sizeof(himem[0]); i++) { + if (himem[i].mr_start > BUS_SPACE_MAXADDR_32BIT) { + output[j].mr_start = himem[i].mr_start; + output[j].mr_size = himem[i].mr_size; + j++; + } + } + sz = j*sizeof(output[0]); + } + #endif + return (sz); } Modified: projects/ppc64/sys/powerpc/include/pcpu.h ============================================================================== --- projects/ppc64/sys/powerpc/include/pcpu.h Wed Jul 29 22:02:13 2009 (r195955) +++ projects/ppc64/sys/powerpc/include/pcpu.h Wed Jul 29 22:19:52 2009 (r195956) @@ -71,12 +71,12 @@ struct pmap; #define CPUSAVE_R29 2 /* where r29 gets saved */ #define CPUSAVE_R30 3 /* where r30 gets saved */ #define CPUSAVE_R31 4 /* where r31 gets saved */ -#define CPUSAVE_AIM_DAR 4 /* where SPR_DAR gets saved */ -#define CPUSAVE_AIM_DSISR 5 /* where SPR_DSISR gets saved */ -#define CPUSAVE_BOOKE_DEAR 4 /* where SPR_DEAR gets saved */ -#define CPUSAVE_BOOKE_ESR 5 /* where SPR_ESR gets saved */ -#define CPUSAVE_SRR0 6 /* where SRR0 gets saved */ -#define CPUSAVE_SRR1 7 /* where SRR1 gets saved */ +#define CPUSAVE_AIM_DAR 5 /* where SPR_DAR gets saved */ +#define CPUSAVE_AIM_DSISR 6 /* where SPR_DSISR gets saved */ +#define CPUSAVE_BOOKE_DEAR 5 /* where SPR_DEAR gets saved */ +#define CPUSAVE_BOOKE_ESR 6 /* where SPR_ESR gets saved */ +#define CPUSAVE_SRR0 7 /* where SRR0 gets saved */ +#define CPUSAVE_SRR1 8 /* where SRR1 gets saved */ /* Book-E TLBSAVE is more elaborate */ #define TLBSAVE_BOOKE_LR 0 From owner-svn-src-projects@FreeBSD.ORG Thu Jul 30 17:36:13 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DA6D61065672; Thu, 30 Jul 2009 17:36:13 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C60F48FC1B; Thu, 30 Jul 2009 17:36:13 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6UHaDAw028707; Thu, 30 Jul 2009 17:36:13 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6UHaDCs028691; Thu, 30 Jul 2009 17:36:13 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907301736.n6UHaDCs028691@svn.freebsd.org> From: Nathan Whitehorn Date: Thu, 30 Jul 2009 17:36:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195975 - in projects/ppc64/sys: conf dev/ofw powerpc/aim powerpc/aim64 powerpc/cell powerpc/include powerpc/mambo powerpc/ofw powerpc/powerpc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jul 2009 17:36:14 -0000 Author: nwhitehorn Date: Thu Jul 30 17:36:13 2009 New Revision: 195975 URL: http://svn.freebsd.org/changeset/base/195975 Log: Bring up PPC64 threading and DDB tracing, as well as fleshing out Mambo support with some bits from P4. Also fix a typo in aim/swtch.S that should be merged to head. We now boot until a WITNESS panic in the vm. Added: projects/ppc64/sys/powerpc/cell/ projects/ppc64/sys/powerpc/cell/celliic.c projects/ppc64/sys/powerpc/mambo/mambo.c projects/ppc64/sys/powerpc/mambo/mambo_disk.c projects/ppc64/sys/powerpc/mambo/mambo_openpic.c Modified: projects/ppc64/sys/conf/files.powerpc64 projects/ppc64/sys/conf/options.powerpc64 projects/ppc64/sys/dev/ofw/openfirm.h projects/ppc64/sys/powerpc/aim/ofw_machdep.c projects/ppc64/sys/powerpc/aim/swtch.S projects/ppc64/sys/powerpc/aim/vm_machdep.c projects/ppc64/sys/powerpc/aim64/mmu_oea64.c projects/ppc64/sys/powerpc/aim64/swtch.S projects/ppc64/sys/powerpc/include/db_machdep.h projects/ppc64/sys/powerpc/include/pcb.h projects/ppc64/sys/powerpc/ofw/ofw_real.c projects/ppc64/sys/powerpc/powerpc/db_trace.c projects/ppc64/sys/powerpc/powerpc/genassym.c Modified: projects/ppc64/sys/conf/files.powerpc64 ============================================================================== --- projects/ppc64/sys/conf/files.powerpc64 Thu Jul 30 14:28:56 2009 (r195974) +++ projects/ppc64/sys/conf/files.powerpc64 Thu Jul 30 17:36:13 2009 (r195975) @@ -68,10 +68,14 @@ powerpc/aim64/locore.S optional aim no- powerpc/aim64/machdep.c optional aim powerpc/aim64/mmu_oea64.c optional aim powerpc/aim64/swtch.S optional aim +powerpc/cell/celliic.c optional cell powerpc/cpufreq/dfs.c optional cpufreq powerpc/cpufreq/pcr.c optional cpufreq aim powerpc/mambo/mambocall.S optional mambo +powerpc/mambo/mambo.c optional mambo powerpc/mambo/mambo_console.c optional mambo +powerpc/mambo/mambo_disk.c optional mambo +powerpc/mambo/mambo_openpic.c optional mambo powerpc/ofw/ofw_cpu.c optional aim powerpc/ofw/ofw_pcibus.c optional pci aim powerpc/ofw/ofw_pcib_pci.c optional pci aim Modified: projects/ppc64/sys/conf/options.powerpc64 ============================================================================== --- projects/ppc64/sys/conf/options.powerpc64 Thu Jul 30 14:28:56 2009 (r195974) +++ projects/ppc64/sys/conf/options.powerpc64 Thu Jul 30 17:36:13 2009 (r195975) @@ -3,6 +3,7 @@ AIM opt_global.h E500 opt_global.h +CELL MAMBO GFB_DEBUG opt_gfb.h Modified: projects/ppc64/sys/dev/ofw/openfirm.h ============================================================================== --- projects/ppc64/sys/dev/ofw/openfirm.h Thu Jul 30 14:28:56 2009 (r195974) +++ projects/ppc64/sys/dev/ofw/openfirm.h Thu Jul 30 17:36:13 2009 (r195975) @@ -91,6 +91,7 @@ void OF_init(void *cookie); #define OFW_STD_DIRECT "ofw_std" /* Standard OF interface */ #define OFW_STD_REAL "ofw_real" /* Real-mode OF interface */ +#define OFW_STD_32BIT "ofw_32bit" /* 32-bit OF interface */ #define OFW_FDT "ofw_fdt" /* Flattened Device Tree */ /* Generic functions */ Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/ofw_machdep.c Thu Jul 30 14:28:56 2009 (r195974) +++ projects/ppc64/sys/powerpc/aim/ofw_machdep.c Thu Jul 30 17:36:13 2009 (r195975) @@ -354,10 +354,15 @@ OF_bootstrap() boolean_t status = FALSE; if (ofwcall != NULL) { - if (ofw_real_mode) + if (ofw_real_mode) { status = OF_install(OFW_STD_REAL, 0); - else + } else { + #ifdef __powerpc64__ + status = OF_install(OFW_STD_32BIT, 0); + #else status = OF_install(OFW_STD_DIRECT, 0); + #endif + } if (status != TRUE) return status; Modified: projects/ppc64/sys/powerpc/aim/swtch.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/swtch.S Thu Jul 30 14:28:56 2009 (r195974) +++ projects/ppc64/sys/powerpc/aim/swtch.S Thu Jul 30 17:36:13 2009 (r195975) @@ -95,7 +95,7 @@ ENTRY(cpu_switch) stw %r16,PCB_LR(%r5) mfsr %r16,USER_SR /* Save USER_SR for copyin/out */ isync - stw %r16,PCB_AIM_USR(%r5) + stw %r16,PCB_AIM_USR_VSID(%r5) stw %r1,PCB_SP(%r5) /* Save the stack pointer */ mr %r14,%r3 /* Copy the old thread ptr... */ @@ -151,7 +151,7 @@ cpu_switchin: mtcr %r5 lwz %r5,PCB_LR(%r3) /* Load the link register */ mtlr %r5 - lwz %r5,PCB_AIM_USR(%r3) /* Load the USER_SR segment reg */ + lwz %r5,PCB_AIM_USR_VSID(%r3) /* Load the USER_SR segment reg */ mtsr USER_SR,%r5 isync lwz %r1,PCB_SP(%r3) /* Load the stack pointer */ @@ -171,7 +171,7 @@ ENTRY(savectx) mr %r12,%r2 stmw %r12,PCB_CONTEXT(%r3) /* Save the non-volatile GP regs */ mfcr %r4 /* Save the condition register */ - stw %r4,PCB_CONTEXT(%r3) + stw %r4,PCB_CR(%r3) blr /* Modified: projects/ppc64/sys/powerpc/aim/vm_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/vm_machdep.c Thu Jul 30 14:28:56 2009 (r195974) +++ projects/ppc64/sys/powerpc/aim/vm_machdep.c Thu Jul 30 17:36:13 2009 (r195975) @@ -182,8 +182,13 @@ cpu_fork(struct thread *td1, struct proc cf->cf_arg1 = (register_t)tf; pcb->pcb_sp = (register_t)cf; + #ifdef __powerpc64__ + pcb->pcb_lr = *(register_t *)fork_trampoline; + #else pcb->pcb_lr = (register_t)fork_trampoline; - pcb->pcb_cpu.aim.usr = kernel_pmap->pm_sr[USER_SR]; + #endif + pcb->pcb_cpu.aim.usr_vsid = 0; + pcb->pcb_cpu.aim.usr_esid = 0; /* Setup to release spin count in fork_exit(). */ td2->td_md.md_spinlock_count = 1; @@ -450,7 +455,8 @@ cpu_set_upcall(struct thread *td, struct pcb2->pcb_sp = (register_t)cf; pcb2->pcb_lr = (register_t)fork_trampoline; - pcb2->pcb_cpu.aim.usr = kernel_pmap->pm_sr[USER_SR]; + pcb2->pcb_cpu.aim.usr_vsid = 0; + pcb2->pcb_cpu.aim.usr_esid = 0; /* Setup to release spin count in fork_exit(). */ td->td_md.md_spinlock_count = 1; Modified: projects/ppc64/sys/powerpc/aim64/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Thu Jul 30 14:28:56 2009 (r195974) +++ projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Thu Jul 30 17:36:13 2009 (r195975) @@ -930,6 +930,7 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o #ifdef __powerpc64__ for (i = 0; i < 16; i++) kernel_pmap->pm_sr[i] = (i << 1) | 1; + kernel_pmap->pm_sr[USER_SR] = 0; #else for (i = 0; i < 16; i++) kernel_pmap->pm_sr[i] = EMPTY_SEGMENT + i; Modified: projects/ppc64/sys/powerpc/aim64/swtch.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/swtch.S Thu Jul 30 14:28:56 2009 (r195974) +++ projects/ppc64/sys/powerpc/aim64/swtch.S Thu Jul 30 17:36:13 2009 (r195975) @@ -81,22 +81,47 @@ ENTRY(cpu_throw) * Switch to a new thread saving the current state in the old thread. */ ENTRY(cpu_switch) - stw %r5,TD_LOCK(%r3) /* ULE: update old thread's lock */ + std %r5,TD_LOCK(%r3) /* ULE: update old thread's lock */ /* XXX needs to change for MP */ - lwz %r5,TD_PCB(%r3) /* Get the old thread's PCB ptr */ + ld %r5,TD_PCB(%r3) /* Get the old thread's PCB ptr */ mr %r12,%r2 - stmw %r12,PCB_CONTEXT(%r5) /* Save the non-volatile GP regs. + std %r12,PCB_CONTEXT(%r5) /* Save the non-volatile GP regs. These can now be used for scratch */ + std %r13,PCB_CONTEXT+1*8(%r5) + std %r14,PCB_CONTEXT+2*8(%r5) + std %r15,PCB_CONTEXT+3*8(%r5) + std %r16,PCB_CONTEXT+4*8(%r5) + std %r17,PCB_CONTEXT+5*8(%r5) + std %r18,PCB_CONTEXT+6*8(%r5) + std %r19,PCB_CONTEXT+7*8(%r5) + std %r20,PCB_CONTEXT+8*8(%r5) + std %r21,PCB_CONTEXT+9*8(%r5) + std %r22,PCB_CONTEXT+10*8(%r5) + std %r23,PCB_CONTEXT+11*8(%r5) + std %r24,PCB_CONTEXT+12*8(%r5) + std %r25,PCB_CONTEXT+13*8(%r5) + std %r26,PCB_CONTEXT+14*8(%r5) + std %r27,PCB_CONTEXT+15*8(%r5) + std %r28,PCB_CONTEXT+16*8(%r5) + std %r29,PCB_CONTEXT+17*8(%r5) + std %r30,PCB_CONTEXT+18*8(%r5) + std %r31,PCB_CONTEXT+19*8(%r5) mfcr %r16 /* Save the condition register */ stw %r16,PCB_CR(%r5) mflr %r16 /* Save the link register */ - stw %r16,PCB_LR(%r5) - mfsr %r16,USER_SR /* Save USER_SR for copyin/out */ + std %r16,PCB_LR(%r5) + + li %r14,0 /* Save USER_SR for copyin/out */ + li %r15,0 + li %r16,USER_SR + slbmfee %r14, %r16 + slbmfev %r15, %r16 isync - stw %r16,PCB_AIM_USR(%r5) - stw %r1,PCB_SP(%r5) /* Save the stack pointer */ + std %r14,PCB_AIM_USR_ESID(%r5) + std %r15,PCB_AIM_USR_VSID(%r5) + std %r1,PCB_SP(%r5) /* Save the stack pointer */ mr %r14,%r3 /* Copy the old thread ptr... */ mr %r15,%r4 /* and the new thread ptr in scratch */ @@ -105,34 +130,39 @@ ENTRY(cpu_switch) /* Save FPU context if needed */ andi. %r6, %r6, PCB_FPU beq .L1 - bl save_fpu + bl .save_fpu + nop .L1: lwz %r6,PCB_FLAGS(%r5) /* Save Altivec context if needed */ andi. %r6, %r6, PCB_VEC beq .L2 - bl save_vec + bl .save_vec + nop .L2: mr %r3,%r14 /* restore old thread ptr */ - bl pmap_deactivate /* Deactivate the current pmap */ + bl .pmap_deactivate /* Deactivate the current pmap */ + nop cpu_switchin: mfsprg %r7,0 /* Get the pcpu pointer */ - stw %r15,PC_CURTHREAD(%r7) /* Store new current thread */ - lwz %r17,TD_PCB(%r15) /* Store new current PCB */ - stw %r17,PC_CURPCB(%r7) + std %r15,PC_CURTHREAD(%r7) /* Store new current thread */ + ld %r17,TD_PCB(%r15) /* Store new current PCB */ + std %r17,PC_CURPCB(%r7) mr %r3,%r15 /* Get new thread ptr */ - bl pmap_activate /* Activate the new address space */ + bl .pmap_activate /* Activate the new address space */ + nop lwz %r6, PCB_FLAGS(%r17) /* Restore FPU context if needed */ andi. %r6, %r6, PCB_FPU beq .L3 mr %r3,%r15 /* Pass curthread to enable_fpu */ - bl enable_fpu + bl .enable_fpu + nop .L3: lwz %r6, PCB_FLAGS(%r17) @@ -140,27 +170,49 @@ cpu_switchin: andi. %r6, %r6, PCB_VEC beq .L4 mr %r3,%r15 /* Pass curthread to enable_vec */ - bl enable_vec + bl .enable_vec + nop /* thread to restore is in r3 */ .L4: mr %r3,%r17 /* Recover PCB ptr */ - lmw %r12,PCB_CONTEXT(%r3) /* Load the non-volatile GP regs */ + ld %r12,PCB_CONTEXT(%r3) /* Load the non-volatile GP regs. */ + ld %r13,PCB_CONTEXT+1*8(%r3) + ld %r14,PCB_CONTEXT+2*8(%r3) + ld %r15,PCB_CONTEXT+3*8(%r3) + ld %r16,PCB_CONTEXT+4*8(%r3) + ld %r17,PCB_CONTEXT+5*8(%r3) + ld %r18,PCB_CONTEXT+6*8(%r3) + ld %r19,PCB_CONTEXT+7*8(%r3) + ld %r20,PCB_CONTEXT+8*8(%r3) + ld %r21,PCB_CONTEXT+9*8(%r3) + ld %r22,PCB_CONTEXT+10*8(%r3) + ld %r23,PCB_CONTEXT+11*8(%r3) + ld %r24,PCB_CONTEXT+12*8(%r3) + ld %r25,PCB_CONTEXT+13*8(%r3) + ld %r26,PCB_CONTEXT+14*8(%r3) + ld %r27,PCB_CONTEXT+15*8(%r3) + ld %r28,PCB_CONTEXT+16*8(%r3) + ld %r29,PCB_CONTEXT+17*8(%r3) + ld %r30,PCB_CONTEXT+18*8(%r3) + ld %r31,PCB_CONTEXT+19*8(%r3) mr %r2,%r12 lwz %r5,PCB_CR(%r3) /* Load the condition register */ mtcr %r5 - lwz %r5,PCB_LR(%r3) /* Load the link register */ + ld %r5,PCB_LR(%r3) /* Load the link register */ mtlr %r5 - lwz %r5,PCB_AIM_USR(%r3) /* Load the USER_SR segment reg */ - mtsr USER_SR,%r5 + ld %r5,PCB_AIM_USR_VSID(%r3) /* Load the USER_SR segment reg */ + ld %r6,PCB_AIM_USR_ESID(%r3) + ori %r6,%r6,USER_SR + slbmte %r5,%r6 isync - lwz %r1,PCB_SP(%r3) /* Load the stack pointer */ + ld %r1,PCB_SP(%r3) /* Load the stack pointer */ /* * Perform a dummy stwcx. to clear any reservations we may have * inherited from the previous thread. It doesn't matter if the * stwcx succeeds or not. pcb_context[0] can be clobbered. */ - stwcx. %r1, 0, %r3 + stdcx. %r1, 0, %r3 blr /* @@ -169,9 +221,29 @@ cpu_switchin: */ ENTRY(savectx) mr %r12,%r2 - stmw %r12,PCB_CONTEXT(%r3) /* Save the non-volatile GP regs */ + std %r12,PCB_CONTEXT(%r3) /* Save the non-volatile GP regs. */ + std %r13,PCB_CONTEXT+1*8(%r3) + std %r14,PCB_CONTEXT+2*8(%r3) + std %r15,PCB_CONTEXT+3*8(%r3) + std %r16,PCB_CONTEXT+4*8(%r3) + std %r17,PCB_CONTEXT+5*8(%r3) + std %r18,PCB_CONTEXT+6*8(%r3) + std %r19,PCB_CONTEXT+7*8(%r3) + std %r20,PCB_CONTEXT+8*8(%r3) + std %r21,PCB_CONTEXT+9*8(%r3) + std %r22,PCB_CONTEXT+10*8(%r3) + std %r23,PCB_CONTEXT+11*8(%r3) + std %r24,PCB_CONTEXT+12*8(%r3) + std %r25,PCB_CONTEXT+13*8(%r3) + std %r26,PCB_CONTEXT+14*8(%r3) + std %r27,PCB_CONTEXT+15*8(%r3) + std %r28,PCB_CONTEXT+16*8(%r3) + std %r29,PCB_CONTEXT+17*8(%r3) + std %r30,PCB_CONTEXT+18*8(%r3) + std %r31,PCB_CONTEXT+19*8(%r3) + mfcr %r4 /* Save the condition register */ - stw %r4,PCB_CONTEXT(%r3) + stw %r4,PCB_CR(%r3) blr /* @@ -179,10 +251,11 @@ ENTRY(savectx) * Set up the return from cpu_fork() */ ENTRY(fork_trampoline) - lwz %r3,CF_FUNC(%r1) - lwz %r4,CF_ARG0(%r1) - lwz %r5,CF_ARG1(%r1) - bl fork_exit + ld %r3,CF_FUNC(%r1) + ld %r4,CF_ARG0(%r1) + ld %r5,CF_ARG1(%r1) + bl .fork_exit + nop addi %r1,%r1,CF_SIZE-FSP /* Allow 8 bytes in front of trapframe to simulate FRAME_SETUP does when allocating space for Added: projects/ppc64/sys/powerpc/cell/celliic.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/cell/celliic.c Thu Jul 30 17:36:13 2009 (r195975) @@ -0,0 +1,145 @@ +/*- + * Copyright 2009 by Nathan Whitehorn. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: projects/ppc64/sys/powerpc/powermac/celliic.c 183882 2008-10-14 14:54:14Z nwhitehorn $ + */ + +/* + * A driver for the Integrated Interrupt Controller found on all Cell + * processors. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "pic_if.h" + +static int celliic_probe(device_t); +static int celliic_attach(device_t); + +static void celliic_dispatch(device_t, struct trapframe *); +static void celliic_enable(device_t, u_int, u_int); +static void celliic_eoi(device_t, u_int); +static void celliic_ipi(device_t, u_int); +static void celliic_mask(device_t, u_int); +static void celliic_unmask(device_t, u_int); + +static device_method_t celliic_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, celliic_probe), + DEVMETHOD(device_attach, celliic_attach), + + /* PIC interface */ + DEVMETHOD(pic_dispatch, celliic_dispatch), + DEVMETHOD(pic_enable, celliic_enable), + DEVMETHOD(pic_eoi, celliic_eoi), + DEVMETHOD(pic_ipi, celliic_ipi), + DEVMETHOD(pic_mask, celliic_mask), + DEVMETHOD(pic_unmask, celliic_unmask), + + { 0, 0 }, +}; + +static driver_t celliic_driver = { + "celliic", + celliic_methods, + 0 +}; + +static devclass_t celliic_devclass; + +DRIVER_MODULE(celliic, nexus, celliic_driver, celliic_devclass, 0, 0); + +static int +celliic_probe(device_t dev) +{ + const char *type = ofw_bus_get_type(dev); + + if (strcmp(type, "stidc-iic") != 0) + return (ENXIO); + + device_set_desc(dev, "Cell Integrated Interrupt Controller"); + return (0); +} + +static int +celliic_attach(device_t dev) +{ + powerpc_register_pic(dev, 64); + return (0); +} + +/* + * PIC I/F methods. + */ + +static void +celliic_dispatch(device_t dev, struct trapframe *tf) +{ +} + +static void +celliic_enable(device_t dev, u_int irq, u_int vector) +{ +} + +static void +celliic_eoi(device_t dev __unused, u_int irq __unused) +{ +} + +static void +celliic_ipi(device_t dev, u_int irq) +{ +} + +static void +celliic_mask(device_t dev, u_int irq) +{ +} + +static void +celliic_unmask(device_t dev, u_int irq) +{ +} Modified: projects/ppc64/sys/powerpc/include/db_machdep.h ============================================================================== --- projects/ppc64/sys/powerpc/include/db_machdep.h Thu Jul 30 14:28:56 2009 (r195974) +++ projects/ppc64/sys/powerpc/include/db_machdep.h Thu Jul 30 17:36:13 2009 (r195975) @@ -35,9 +35,10 @@ #define _POWERPC_DB_MACHDEP_H_ #include +#include #define DB_ELF_SYMBOLS -#define DB_ELFSIZE 32 +#define DB_ELFSIZE __ELF_WORD_SIZE #define BYTE_MSF (1) Modified: projects/ppc64/sys/powerpc/include/pcb.h ============================================================================== --- projects/ppc64/sys/powerpc/include/pcb.h Thu Jul 30 14:28:56 2009 (r195974) +++ projects/ppc64/sys/powerpc/include/pcb.h Thu Jul 30 17:36:13 2009 (r195975) @@ -65,7 +65,8 @@ struct pcb { union { struct { - register_t usr; /* USER_SR segment */ + register_t usr_esid; /* USER_SR segment */ + register_t usr_vsid; /* USER_SR segment */ } aim; struct { register_t ctr; Added: projects/ppc64/sys/powerpc/mambo/mambo.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/mambo/mambo.c Thu Jul 30 17:36:13 2009 (r195975) @@ -0,0 +1,103 @@ +/*- + * Copyright 2008 by Nathan Whitehorn. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include +__FBSDID("$FreeBSD: src/sys/powerpc/powermac/openpic_macio.c,v 1.13 2008/10/14 14:54:14 nwhitehorn Exp $"); + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include + +#include + +/* + * Mambo interface + */ +static int mambobus_probe(device_t); +static int mambobus_attach(device_t); + +static device_method_t mambobus_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mambobus_probe), + DEVMETHOD(device_attach, mambobus_attach), + + /* Bus interface */ + DEVMETHOD(bus_driver_added, bus_generic_driver_added), + DEVMETHOD(bus_add_child, bus_generic_add_child), + DEVMETHOD(bus_print_child, bus_generic_print_child), + DEVMETHOD(bus_read_ivar, bus_generic_read_ivar), + DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), + DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), + DEVMETHOD(bus_alloc_resource, bus_generic_alloc_resource), + DEVMETHOD(bus_release_resource, bus_generic_release_resource), + DEVMETHOD(bus_activate_resource,bus_generic_activate_resource), + + {0,0} +}; + +static driver_t mambobus_driver = { + "mambo", + mambobus_methods, + 0 +}; + +static devclass_t mambobus_devclass; + +DRIVER_MODULE(mambo, nexus, mambobus_driver, mambobus_devclass, 0, 0); + +static int +mambobus_probe(device_t dev) +{ + const char *name = ofw_bus_get_name(dev); + + if (name && !strcmp(name, "mambo")) { + device_set_desc(dev, "Mambo Simulator"); + return (0); + } + + return (ENXIO); +} + +static int +mambobus_attach(device_t dev) +{ + bus_generic_probe(dev); + return (bus_generic_attach(dev)); +} + Added: projects/ppc64/sys/powerpc/mambo/mambo_disk.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/mambo/mambo_disk.c Thu Jul 30 17:36:13 2009 (r195975) @@ -0,0 +1,278 @@ +/*- + * Copyright (c) 2006 Bernd Walter. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +__FBSDID("$FreeBSD: head/sys/dev/mmc/mambodisk.c 183805 2008-10-12 19:19:26Z mav $"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +struct mambodisk_softc { + device_t dev; + struct mtx sc_mtx; + struct disk *disk; + struct proc *p; + struct bio_queue_head bio_queue; + int running; + int maxblocks; +}; + +#define MAMBO_DISK_READ 116 +#define MAMBO_DISK_WRITE 117 +#define MAMBO_DISK_INFO 118 + +#define MAMBO_INFO_STATUS 1 +#define MAMBO_INFO_BLKSZ 2 +#define MAMBO_INFO_DEVSZ 3 + +/* bus entry points */ +static void mambodisk_identify(driver_t *driver, device_t parent); +static int mambodisk_probe(device_t dev); +static int mambodisk_attach(device_t dev); + +/* disk routines */ +static int mambodisk_open(struct disk *dp); +static int mambodisk_close(struct disk *dp); +static void mambodisk_strategy(struct bio *bp); +static void mambodisk_task(void *arg); + +#define MBODISK_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx) +#define MBODISK_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_mtx) +#define MBODISK_LOCK_INIT(_sc) \ + mtx_init(&_sc->sc_mtx, device_get_nameunit(_sc->dev), \ + "mambodisk", MTX_DEF) +#define MBODISK_LOCK_DESTROY(_sc) mtx_destroy(&_sc->sc_mtx); +#define MBODISK_ASSERT_LOCKED(_sc) mtx_assert(&_sc->sc_mtx, MA_OWNED); +#define MBODISK_ASSERT_UNLOCKED(_sc) mtx_assert(&_sc->sc_mtx, MA_NOTOWNED); + +static void +mambodisk_identify(driver_t *driver, device_t parent) +{ + int i = 0; + + for (i = 0; mambocall(MAMBO_DISK_INFO,MAMBO_INFO_DEVSZ,i) > 0; i++) + BUS_ADD_CHILD(parent,0,"mambodisk",i); +} + +static int +mambodisk_probe(device_t dev) +{ + device_set_desc(dev, "Mambo Simulated Block Device"); + return (0); +} + +static int +mambodisk_attach(device_t dev) +{ + struct mambodisk_softc *sc; + struct disk *d; + intmax_t mb; + char unit; + + sc = device_get_softc(dev); + sc->dev = dev; + MBODISK_LOCK_INIT(sc); + + d = sc->disk = disk_alloc(); + d->d_open = mambodisk_open; + d->d_close = mambodisk_close; + d->d_strategy = mambodisk_strategy; + // d->d_dump = mambodisk_dump; Need polling mmc layer + d->d_name = "mambodisk"; + d->d_drv1 = sc; + d->d_maxsize = MAXPHYS; /* Maybe ask bridge? */ + + d->d_sectorsize = 512; + sc->maxblocks = mambocall(MAMBO_DISK_INFO,MAMBO_INFO_BLKSZ,d->d_unit) + / 512; + + d->d_unit = device_get_unit(dev); + d->d_mediasize = mambocall(MAMBO_DISK_INFO,MAMBO_INFO_DEVSZ,d->d_unit) + * 1024; /* Mambo gives size in KB */ + + mb = d->d_mediasize >> 20; /* 1MiB == 1 << 20 */ + unit = 'M'; + if (mb >= 10240) { /* 1GiB = 1024 MiB */ + unit = 'G'; + mb /= 1024; + } + device_printf(dev, "%ju%cB, %d byte sectors\n", mb, unit, + d->d_sectorsize); + disk_create(d, DISK_VERSION); + bioq_init(&sc->bio_queue); + + sc->running = 1; + kproc_create(&mambodisk_task, sc, &sc->p, 0, 0, "task: mambo hd"); + + return (0); +} + +static int +mambodisk_detach(device_t dev) +{ + struct mambodisk_softc *sc = device_get_softc(dev); + + /* kill thread */ + MBODISK_LOCK(sc); + sc->running = 0; + wakeup(sc); + MBODISK_UNLOCK(sc); + + /* wait for thread to finish. XXX probably want timeout. -sorbo */ + MBODISK_LOCK(sc); + while (sc->running != -1) + msleep(sc, &sc->sc_mtx, PRIBIO, "detach", 0); + MBODISK_UNLOCK(sc); + + /* kill disk */ + disk_destroy(sc->disk); + /* XXX destroy anything in queue */ + + MBODISK_LOCK_DESTROY(sc); + + return (0); +} + +static int +mambodisk_open(struct disk *dp) +{ + return (0); +} + +static int +mambodisk_close(struct disk *dp) +{ + return (0); +} + +static void +mambodisk_strategy(struct bio *bp) +{ + struct mambodisk_softc *sc; + + sc = (struct mambodisk_softc *)bp->bio_disk->d_drv1; + MBODISK_LOCK(sc); + bioq_disksort(&sc->bio_queue, bp); + wakeup(sc); + MBODISK_UNLOCK(sc); +} + +static void +mambodisk_task(void *arg) +{ + struct mambodisk_softc *sc = (struct mambodisk_softc*)arg; + struct bio *bp; + int sz, result; + daddr_t block, end; + device_t dev; + uint32_t unit; + + dev = sc->dev; + unit = device_get_unit(dev); + + while (sc->running) { + MBODISK_LOCK(sc); + do { + bp = bioq_first(&sc->bio_queue); + if (bp == NULL) + msleep(sc, &sc->sc_mtx, PRIBIO, "jobqueue", 0); + } while (bp == NULL && sc->running); + if (bp) + bioq_remove(&sc->bio_queue, bp); + MBODISK_UNLOCK(sc); + if (!sc->running) + break; + sz = sc->disk->d_sectorsize; + end = bp->bio_pblkno + (bp->bio_bcount / sz); + for (block = bp->bio_pblkno; block < end;) { + uint32_t numblocks; + char *vaddr = bp->bio_data + + (block - bp->bio_pblkno) * sz; + + numblocks = end - block; + if (numblocks > sc->maxblocks) + numblocks = sc->maxblocks; + + if (bp->bio_cmd == BIO_READ) { + result = mambocall(MAMBO_DISK_READ, vaddr, + (uint32_t)block, (numblocks << 16) | unit); + } else if (bp->bio_cmd == BIO_WRITE) { + result = mambocall(MAMBO_DISK_WRITE, vaddr, + (uint32_t)block, (numblocks << 16) | unit); + } else { + result = 1; + } + + if (result) + break; + + block += numblocks; + } + if (block < end) { + bp->bio_error = EIO; + bp->bio_resid = (end - block) * sz; + bp->bio_flags |= BIO_ERROR; + } + biodone(bp); + } + + /* tell parent we're done */ + MBODISK_LOCK(sc); + sc->running = -1; + wakeup(sc); + MBODISK_UNLOCK(sc); + + kproc_exit(0); +} + +static device_method_t mambodisk_methods[] = { + DEVMETHOD(device_identify, mambodisk_identify), + DEVMETHOD(device_probe, mambodisk_probe), + DEVMETHOD(device_attach, mambodisk_attach), + DEVMETHOD(device_detach, mambodisk_detach), + {0, 0}, +}; + +static driver_t mambodisk_driver = { + "mambodisk", + mambodisk_methods, + sizeof(struct mambodisk_softc), +}; +static devclass_t mambodisk_devclass; + +DRIVER_MODULE(mambodisk, mambo, mambodisk_driver, mambodisk_devclass, 0, 0); Added: projects/ppc64/sys/powerpc/mambo/mambo_openpic.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/mambo/mambo_openpic.c Thu Jul 30 17:36:13 2009 (r195975) @@ -0,0 +1,175 @@ +/*- + * Copyright 2003 by Peter Grehan. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include +__FBSDID("$FreeBSD: src/sys/powerpc/powermac/openpic_macio.c,v 1.13 2008/10/14 14:54:14 nwhitehorn Exp $"); + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include + +#include "pic_if.h" + +/* + * Mambo interface + */ +static int openpic_mambo_probe(device_t); +static int openpicbus_mambo_probe(device_t dev); +static int openpicbus_mambo_attach(device_t dev); +static struct resource *openpicbus_alloc_resource(device_t bus, device_t dev, + int type, int *rid, u_long start, u_long end, u_long count, + u_int flags); + +static device_method_t openpicbus_mambo_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, openpicbus_mambo_probe), + DEVMETHOD(device_attach, openpicbus_mambo_attach), + + /* Bus interface */ + DEVMETHOD(bus_alloc_resource, openpicbus_alloc_resource), + + {0,0} +}; + +struct openpicbus_softc { + vm_offset_t picaddr; +}; + +static driver_t openpicbus_mambo_driver = { + "openpicbus", + openpicbus_mambo_methods, + sizeof(struct openpicbus_softc), +}; + +static device_method_t openpic_mambo_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, openpic_mambo_probe), + DEVMETHOD(device_attach, openpic_attach), + + /* PIC interface */ + DEVMETHOD(pic_config, openpic_config), + DEVMETHOD(pic_dispatch, openpic_dispatch), + DEVMETHOD(pic_enable, openpic_enable), + DEVMETHOD(pic_eoi, openpic_eoi), + DEVMETHOD(pic_ipi, openpic_ipi), + DEVMETHOD(pic_mask, openpic_mask), + DEVMETHOD(pic_unmask, openpic_unmask), + + { 0, 0 }, *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Thu Jul 30 18:28:00 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 86CFF1065670; Thu, 30 Jul 2009 18:28:00 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 73D278FC14; Thu, 30 Jul 2009 18:28:00 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6UIS01r033521; Thu, 30 Jul 2009 18:28:00 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6UIS0cM033511; Thu, 30 Jul 2009 18:28:00 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907301828.n6UIS0cM033511@svn.freebsd.org> From: Nathan Whitehorn Date: Thu, 30 Jul 2009 18:28:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195977 - in projects/ppc64/sys/powerpc: aim aim64 include powerpc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jul 2009 18:28:00 -0000 Author: nwhitehorn Date: Thu Jul 30 18:28:00 2009 New Revision: 195977 URL: http://svn.freebsd.org/changeset/base/195977 Log: Make sure to set the TOC pointer appropriately when starting a new thread, adjust all members to the trapframe to be of the same size to pacify DDB, which doesn't like some registers to be different sizes than others, and make our atomic functions have the correct return types. This (mostly the first item) gets us to a mount root prompt. Time to worry about userland. Modified: projects/ppc64/sys/powerpc/aim/swtch.S projects/ppc64/sys/powerpc/aim/vm_machdep.c projects/ppc64/sys/powerpc/aim64/swtch.S projects/ppc64/sys/powerpc/aim64/trap_subr.S projects/ppc64/sys/powerpc/include/atomic.h projects/ppc64/sys/powerpc/include/frame.h projects/ppc64/sys/powerpc/include/pcb.h projects/ppc64/sys/powerpc/powerpc/db_trace.c projects/ppc64/sys/powerpc/powerpc/genassym.c Modified: projects/ppc64/sys/powerpc/aim/swtch.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/swtch.S Thu Jul 30 17:40:47 2009 (r195976) +++ projects/ppc64/sys/powerpc/aim/swtch.S Thu Jul 30 18:28:00 2009 (r195977) @@ -85,7 +85,6 @@ ENTRY(cpu_switch) /* XXX needs to change for MP */ lwz %r5,TD_PCB(%r3) /* Get the old thread's PCB ptr */ - mr %r12,%r2 stmw %r12,PCB_CONTEXT(%r5) /* Save the non-volatile GP regs. These can now be used for scratch */ @@ -97,6 +96,7 @@ ENTRY(cpu_switch) isync stw %r16,PCB_AIM_USR_VSID(%r5) stw %r1,PCB_SP(%r5) /* Save the stack pointer */ + stw %r2,PCB_TOC(%r5) /* Save the TOC pointer */ mr %r14,%r3 /* Copy the old thread ptr... */ mr %r15,%r4 /* and the new thread ptr in scratch */ @@ -146,7 +146,6 @@ cpu_switchin: .L4: mr %r3,%r17 /* Recover PCB ptr */ lmw %r12,PCB_CONTEXT(%r3) /* Load the non-volatile GP regs */ - mr %r2,%r12 lwz %r5,PCB_CR(%r3) /* Load the condition register */ mtcr %r5 lwz %r5,PCB_LR(%r3) /* Load the link register */ @@ -155,6 +154,7 @@ cpu_switchin: mtsr USER_SR,%r5 isync lwz %r1,PCB_SP(%r3) /* Load the stack pointer */ + lwz %r2,PCB_TOC(%r3) /* Load the TOC pointer */ /* * Perform a dummy stwcx. to clear any reservations we may have * inherited from the previous thread. It doesn't matter if the @@ -168,7 +168,6 @@ cpu_switchin: * Update pcb, saving current processor state */ ENTRY(savectx) - mr %r12,%r2 stmw %r12,PCB_CONTEXT(%r3) /* Save the non-volatile GP regs */ mfcr %r4 /* Save the condition register */ stw %r4,PCB_CR(%r3) Modified: projects/ppc64/sys/powerpc/aim/vm_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/vm_machdep.c Thu Jul 30 17:40:47 2009 (r195976) +++ projects/ppc64/sys/powerpc/aim/vm_machdep.c Thu Jul 30 18:28:00 2009 (r195977) @@ -154,7 +154,7 @@ cpu_fork(struct thread *td1, struct proc p1 = td1->td_proc; pcb = (struct pcb *)((td2->td_kstack + - td2->td_kstack_pages * PAGE_SIZE - sizeof(struct pcb)) & ~0x2fU); + td2->td_kstack_pages * PAGE_SIZE - sizeof(struct pcb)) & ~0x2fUL); td2->td_pcb = pcb; /* Copy the pcb */ @@ -183,7 +183,8 @@ cpu_fork(struct thread *td1, struct proc pcb->pcb_sp = (register_t)cf; #ifdef __powerpc64__ - pcb->pcb_lr = *(register_t *)fork_trampoline; + pcb->pcb_lr = ((register_t *)fork_trampoline)[0]; + pcb->pcb_toc = ((register_t *)fork_trampoline)[1]; #else pcb->pcb_lr = (register_t)fork_trampoline; #endif Modified: projects/ppc64/sys/powerpc/aim64/swtch.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/swtch.S Thu Jul 30 17:40:47 2009 (r195976) +++ projects/ppc64/sys/powerpc/aim64/swtch.S Thu Jul 30 18:28:00 2009 (r195977) @@ -85,7 +85,6 @@ ENTRY(cpu_switch) /* XXX needs to change for MP */ ld %r5,TD_PCB(%r3) /* Get the old thread's PCB ptr */ - mr %r12,%r2 std %r12,PCB_CONTEXT(%r5) /* Save the non-volatile GP regs. These can now be used for scratch */ std %r13,PCB_CONTEXT+1*8(%r5) @@ -109,7 +108,7 @@ ENTRY(cpu_switch) std %r31,PCB_CONTEXT+19*8(%r5) mfcr %r16 /* Save the condition register */ - stw %r16,PCB_CR(%r5) + std %r16,PCB_CR(%r5) mflr %r16 /* Save the link register */ std %r16,PCB_LR(%r5) @@ -122,6 +121,7 @@ ENTRY(cpu_switch) std %r14,PCB_AIM_USR_ESID(%r5) std %r15,PCB_AIM_USR_VSID(%r5) std %r1,PCB_SP(%r5) /* Save the stack pointer */ + std %r2,PCB_TOC(%r5) /* Save the TOC pointer */ mr %r14,%r3 /* Copy the old thread ptr... */ mr %r15,%r4 /* and the new thread ptr in scratch */ @@ -196,8 +196,7 @@ cpu_switchin: ld %r29,PCB_CONTEXT+17*8(%r3) ld %r30,PCB_CONTEXT+18*8(%r3) ld %r31,PCB_CONTEXT+19*8(%r3) - mr %r2,%r12 - lwz %r5,PCB_CR(%r3) /* Load the condition register */ + ld %r5,PCB_CR(%r3) /* Load the condition register */ mtcr %r5 ld %r5,PCB_LR(%r3) /* Load the link register */ mtlr %r5 @@ -207,6 +206,7 @@ cpu_switchin: slbmte %r5,%r6 isync ld %r1,PCB_SP(%r3) /* Load the stack pointer */ + ld %r2,PCB_TOC(%r3) /* Load the TOC pointer */ /* * Perform a dummy stwcx. to clear any reservations we may have * inherited from the previous thread. It doesn't matter if the @@ -220,7 +220,6 @@ cpu_switchin: * Update pcb, saving current processor state */ ENTRY(savectx) - mr %r12,%r2 std %r12,PCB_CONTEXT(%r3) /* Save the non-volatile GP regs. */ std %r13,PCB_CONTEXT+1*8(%r3) std %r14,PCB_CONTEXT+2*8(%r3) @@ -243,7 +242,7 @@ ENTRY(savectx) std %r31,PCB_CONTEXT+19*8(%r3) mfcr %r4 /* Save the condition register */ - stw %r4,PCB_CR(%r3) + std %r4,PCB_CR(%r3) blr /* Modified: projects/ppc64/sys/powerpc/aim64/trap_subr.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/trap_subr.S Thu Jul 30 17:40:47 2009 (r195976) +++ projects/ppc64/sys/powerpc/aim64/trap_subr.S Thu Jul 30 18:28:00 2009 (r195977) @@ -123,7 +123,7 @@ nslb: std %r31,FRAME_1+16(%r1); /* save SP " " */ \ std %r2, FRAME_2+16(%r1); /* save r2 " " */ \ std %r28,FRAME_LR+16(%r1); /* save LR " " */ \ - stw %r29,FRAME_CR+16(%r1); /* save CR " " */ \ + std %r29,FRAME_CR+16(%r1); /* save CR " " */ \ GET_CPUINFO(%r2); \ ld %r27,(savearea+CPUSAVE_R27)(%r2); /* get saved r27 */ \ ld %r28,(savearea+CPUSAVE_R28)(%r2); /* get saved r28 */ \ @@ -160,18 +160,18 @@ nslb: std %r30, FRAME_30+16(%r1); \ std %r31, FRAME_31+16(%r1); \ ld %r28,(savearea+CPUSAVE_AIM_DAR)(%r2); /* saved DAR */ \ - lwz %r29,(savearea+CPUSAVE_AIM_DSISR)(%r2);/* saved DSISR */\ + ld %r29,(savearea+CPUSAVE_AIM_DSISR)(%r2);/* saved DSISR */\ ld %r30,(savearea+CPUSAVE_SRR0)(%r2); /* saved SRR0 */ \ ld %r31,(savearea+CPUSAVE_SRR1)(%r2); /* saved SRR1 */ \ mfxer %r3; \ mfctr %r4; \ mfsprg3 %r5; \ mtlr %r6; \ - stw %r3, FRAME_XER+16(1); /* save xer/ctr/exc */ \ + std %r3, FRAME_XER+16(1); /* save xer/ctr/exc */ \ std %r4, FRAME_CTR+16(1); \ std %r5, FRAME_EXC+16(1); \ std %r28,FRAME_AIM_DAR+16(1); \ - stw %r29,FRAME_AIM_DSISR+16(1); /* save dsisr/srr0/srr1 */ \ + std %r29,FRAME_AIM_DSISR+16(1); /* save dsisr/srr0/srr1 */ \ std %r30,FRAME_SRR0+16(1); \ std %r31,FRAME_SRR1+16(1) @@ -180,12 +180,12 @@ nslb: ld %r2,FRAME_SRR0+16(%r1); \ ld %r3,FRAME_SRR1+16(%r1); \ ld %r4,FRAME_CTR+16(%r1); \ - lwz %r5,FRAME_XER+16(%r1); \ + ld %r5,FRAME_XER+16(%r1); \ ld %r6,FRAME_LR+16(%r1); \ GET_CPUINFO(%r7); \ std %r2,(savearea+CPUSAVE_SRR0)(%r7); /* save SRR0 */ \ std %r3,(savearea+CPUSAVE_SRR1)(%r7); /* save SRR1 */ \ - lwz %r7,FRAME_CR+16(%r1); \ + ld %r7,FRAME_CR+16(%r1); \ mtctr %r4; \ mtxer %r5; \ mtsprg1 %r7; /* save cr */ \ @@ -313,7 +313,7 @@ CNAME(alitrap): mfdar %r30 mfdsisr %r31 std %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DAR)(%r1) - stw %r31,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) + std %r31,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) mfsprg1 %r1 /* restore SP, in case of branch */ mflr %r28 /* save LR */ mfcr %r29 /* save CR */ @@ -375,7 +375,7 @@ disitrap: mfdar %r30 mfdsisr %r31 std %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DAR)(%r1) - stw %r31,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) + std %r31,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) #ifdef KDB /* Try and detect a kernel stack overflow */ @@ -393,8 +393,8 @@ disitrap: GET_CPUINFO(%r1) ld %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DAR)(%r1) /* get DAR */ std %r30,(PC_DBSAVE +CPUSAVE_AIM_DAR)(%r1) /* save DAR */ - lwz %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) /* get DSISR */ - stw %r30,(PC_DBSAVE +CPUSAVE_AIM_DSISR)(%r1) /* save DSISR */ + ld %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) /* get DSISR */ + std %r30,(PC_DBSAVE +CPUSAVE_AIM_DSISR)(%r1) /* save DSISR */ ld %r31,(PC_DISISAVE+CPUSAVE_R27)(%r1) /* get r27 */ std %r31,(PC_DBSAVE +CPUSAVE_R27)(%r1) /* save r27 */ ld %r30,(PC_DISISAVE+CPUSAVE_R28)(%r1) /* get r28 */ Modified: projects/ppc64/sys/powerpc/include/atomic.h ============================================================================== --- projects/ppc64/sys/powerpc/include/atomic.h Thu Jul 30 17:40:47 2009 (r195976) +++ projects/ppc64/sys/powerpc/include/atomic.h Thu Jul 30 18:28:00 2009 (r195977) @@ -515,10 +515,10 @@ ATOMIC_STORE_LOAD(long, 64) * two values are equal, update the value of *p with newval. Returns * zero if the compare failed, nonzero otherwise. */ -static __inline uint32_t +static __inline int atomic_cmpset_32(volatile uint32_t* p, uint32_t cmpval, uint32_t newval) { - uint32_t ret; + int ret; #ifdef __GNUCLIKE_ASM __asm __volatile ( @@ -541,10 +541,10 @@ atomic_cmpset_32(volatile uint32_t* p, u return (ret); } -static __inline u_long +static __inline int atomic_cmpset_long(volatile u_long* p, u_long cmpval, u_long newval) { - u_long ret; + int ret; #ifdef __GNUCLIKE_ASM __asm __volatile ( @@ -588,7 +588,7 @@ atomic_cmpset_long(volatile u_long* p, u atomic_cmpset_32((volatile u_int *)(dst), (u_int)(old), (u_int)(new)) #endif -static __inline uint32_t +static __inline int atomic_cmpset_acq_32(volatile uint32_t *p, uint32_t cmpval, uint32_t newval) { int retval; @@ -598,24 +598,24 @@ atomic_cmpset_acq_32(volatile uint32_t * return (retval); } -static __inline uint32_t +static __inline int atomic_cmpset_rel_32(volatile uint32_t *p, uint32_t cmpval, uint32_t newval) { __ATOMIC_BARRIER; return (atomic_cmpset_32(p, cmpval, newval)); } -static __inline u_long +static __inline int atomic_cmpset_acq_long(volatile u_long *p, u_long cmpval, u_long newval) { - int retval; + u_long retval; retval = atomic_cmpset_long(p, cmpval, newval); __ATOMIC_BARRIER; return (retval); } -static __inline uint32_t +static __inline int atomic_cmpset_rel_long(volatile u_long *p, u_long cmpval, u_long newval) { __ATOMIC_BARRIER; Modified: projects/ppc64/sys/powerpc/include/frame.h ============================================================================== --- projects/ppc64/sys/powerpc/include/frame.h Thu Jul 30 17:40:47 2009 (r195976) +++ projects/ppc64/sys/powerpc/include/frame.h Thu Jul 30 18:28:00 2009 (r195977) @@ -50,8 +50,8 @@ struct trapframe { register_t fixreg[32]; register_t lr; - int cr; - int xer; + register_t cr; + register_t xer; register_t ctr; register_t srr0; register_t srr1; @@ -60,7 +60,7 @@ struct trapframe { struct { /* dar & dsisr are only filled on a DSI trap */ register_t dar; - int dsisr; + register_t dsisr; } aim; struct { register_t dear; Modified: projects/ppc64/sys/powerpc/include/pcb.h ============================================================================== --- projects/ppc64/sys/powerpc/include/pcb.h Thu Jul 30 17:40:47 2009 (r195976) +++ projects/ppc64/sys/powerpc/include/pcb.h Thu Jul 30 18:28:00 2009 (r195977) @@ -41,6 +41,7 @@ struct pcb { register_t pcb_context[20]; /* non-volatile r14-r31 */ register_t pcb_cr; /* Condition register */ register_t pcb_sp; /* stack pointer */ + register_t pcb_toc; /* toc pointer */ register_t pcb_lr; /* link register */ struct pmap *pcb_pm; /* pmap of our vmspace */ faultbuf *pcb_onfault; /* For use during Modified: projects/ppc64/sys/powerpc/powerpc/db_trace.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/db_trace.c Thu Jul 30 17:40:47 2009 (r195976) +++ projects/ppc64/sys/powerpc/powerpc/db_trace.c Thu Jul 30 18:28:00 2009 (r195977) @@ -221,7 +221,8 @@ db_backtrace(struct thread *td, db_addr_ case EXC_ALI: /* XXX take advantage of the union. */ db_printf("ALI trap @ %#zx (xSR %#x) ", - tf->cpu.aim.dar, tf->cpu.aim.dsisr); + tf->cpu.aim.dar, + (uint32_t)tf->cpu.aim.dsisr); goto print_trap; case EXC_ISI: trapstr = "ISI"; break; case EXC_PGM: trapstr = "PGM"; break; @@ -261,9 +262,11 @@ db_backtrace(struct thread *td, db_addr_ tf->srr1); } db_printf("%-10s r1=%#zx cr=%#x xer=%#x ctr=%#zx", - "", tf->fixreg[1], tf->cr, tf->xer, tf->ctr); + "", tf->fixreg[1], (uint32_t)tf->cr, + (uint32_t)tf->xer, tf->ctr); if (tf->exc == EXC_DSI) - db_printf(" sr=%#x", tf->cpu.aim.dsisr); + db_printf(" sr=%#x", + (uint32_t)tf->cpu.aim.dsisr); db_printf("\n"); stackframe = (db_addr_t) tf->fixreg[1]; if (kernel_only && (tf->srr1 & PSL_PR)) Modified: projects/ppc64/sys/powerpc/powerpc/genassym.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/genassym.c Thu Jul 30 17:40:47 2009 (r195976) +++ projects/ppc64/sys/powerpc/powerpc/genassym.c Thu Jul 30 18:28:00 2009 (r195977) @@ -171,6 +171,7 @@ ASSYM(CF_SIZE, sizeof(struct callframe)) ASSYM(PCB_CONTEXT, offsetof(struct pcb, pcb_context)); ASSYM(PCB_CR, offsetof(struct pcb, pcb_cr)); ASSYM(PCB_SP, offsetof(struct pcb, pcb_sp)); +ASSYM(PCB_TOC, offsetof(struct pcb, pcb_toc)); ASSYM(PCB_LR, offsetof(struct pcb, pcb_lr)); ASSYM(PCB_ONFAULT, offsetof(struct pcb, pcb_onfault)); ASSYM(PCB_FLAGS, offsetof(struct pcb, pcb_flags)); From owner-svn-src-projects@FreeBSD.ORG Thu Jul 30 20:16:35 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 409721065689; Thu, 30 Jul 2009 20:16:35 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 254B38FC1A; Thu, 30 Jul 2009 20:16:35 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6UKGZ9d043112; Thu, 30 Jul 2009 20:16:35 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6UKGY5V043107; Thu, 30 Jul 2009 20:16:34 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907302016.n6UKGY5V043107@svn.freebsd.org> From: Stanislav Sedov Date: Thu, 30 Jul 2009 20:16:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195979 - in projects/libprocstat: sys/kern sys/sys usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jul 2009 20:16:35 -0000 Author: stas Date: Thu Jul 30 20:16:34 2009 New Revision: 195979 URL: http://svn.freebsd.org/changeset/base/195979 Log: - Return additional file descriptor flags to be more feature complete with the KVM-based version. Modified: projects/libprocstat/sys/kern/kern_descrip.c projects/libprocstat/sys/sys/user.h projects/libprocstat/usr.bin/fstat/libprocstat.c projects/libprocstat/usr.bin/fstat/libprocstat.h Modified: projects/libprocstat/sys/kern/kern_descrip.c ============================================================================== --- projects/libprocstat/sys/kern/kern_descrip.c Thu Jul 30 18:53:06 2009 (r195978) +++ projects/libprocstat/sys/kern/kern_descrip.c Thu Jul 30 20:16:34 2009 (r195979) @@ -2902,13 +2902,20 @@ export_fd_for_sysctl(void *data, int typ int kf_fflag; } fflags_table[] = { { FREAD, KF_FLAG_READ }, - { FWRITE , KF_FLAG_WRITE }, - { FAPPEND , KF_FLAG_APPEND }, - { FASYNC , KF_FLAG_ASYNC }, - { FFSYNC , KF_FLAG_FSYNC }, - { FNONBLOCK , KF_FLAG_NONBLOCK }, - { O_DIRECT , KF_FLAG_DIRECT }, - { FHASLOCK , KF_FLAG_HASLOCK } + { FWRITE, KF_FLAG_WRITE }, + { FAPPEND, KF_FLAG_APPEND }, + { FASYNC, KF_FLAG_ASYNC }, + { FFSYNC, KF_FLAG_FSYNC }, + { FNONBLOCK, KF_FLAG_NONBLOCK }, + { O_DIRECT, KF_FLAG_DIRECT }, + { FHASLOCK, KF_FLAG_HASLOCK }, + { O_SHLOCK, KF_FLAG_SHLOCK }, + { O_EXLOCK, KF_FLAG_EXLOCK }, + { O_NOFOLLOW, KF_FLAG_NOFOLLOW }, + { O_CREAT, KF_FLAG_CREAT }, + { O_TRUNC, KF_FLAG_TRUNC }, + { O_EXCL, KF_FLAG_EXCL }, + { O_EXEC, KF_FLAG_EXEC } }; #define NFFLAGS (sizeof(fflags_table) / sizeof(*fflags_table)) struct vnode *vp; Modified: projects/libprocstat/sys/sys/user.h ============================================================================== --- projects/libprocstat/sys/sys/user.h Thu Jul 30 18:53:06 2009 (r195978) +++ projects/libprocstat/sys/sys/user.h Thu Jul 30 20:16:34 2009 (r195979) @@ -287,6 +287,13 @@ struct user { #define KF_FLAG_NONBLOCK 0x00000020 #define KF_FLAG_DIRECT 0x00000040 #define KF_FLAG_HASLOCK 0x00000080 +#define KF_FLAG_SHLOCK 0x00000100 +#define KF_FLAG_EXLOCK 0x00000200 +#define KF_FLAG_NOFOLLOW 0x00000400 +#define KF_FLAG_CREAT 0x00000800 +#define KF_FLAG_TRUNC 0x00001000 +#define KF_FLAG_EXCL 0x00002000 +#define KF_FLAG_EXEC 0x00004000 /* * Old format. Has variable hidden padding due to alignment. Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Thu Jul 30 18:53:06 2009 (r195978) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Thu Jul 30 20:16:34 2009 (r195979) @@ -491,11 +491,17 @@ kinfo_fflags2fst(int kfflags) { KF_FLAG_WRITE, PS_FST_FFLAG_WRITE }, { KF_FLAG_NONBLOCK, PS_FST_FFLAG_NONBLOCK }, { KF_FLAG_APPEND, PS_FST_FFLAG_APPEND }, - { KF_FLAG_HASLOCK, PS_FST_FFLAG_SHLOCK }, /* XXX: which lock? */ + { KF_FLAG_HASLOCK, PS_FST_FFLAG_HASLOCK }, { KF_FLAG_ASYNC, PS_FST_FFLAG_ASYNC }, { KF_FLAG_FSYNC, PS_FST_FFLAG_SYNC }, { KF_FLAG_DIRECT, PS_FST_FFLAG_DIRECT }, - /* XXX: other types? */ + { KF_FLAG_SHLOCK, PS_FST_FFLAG_SHLOCK }, + { KF_FLAG_EXLOCK, PS_FST_FFLAG_EXLOCK }, + { KF_FLAG_NOFOLLOW, PS_FST_FFLAG_NOFOLLOW }, + { KF_FLAG_CREAT, PS_FST_FFLAG_CREAT }, + { KF_FLAG_TRUNC, PS_FST_FFLAG_TRUNC }, + { KF_FLAG_EXCL, PS_FST_FFLAG_EXCL }, + { KF_FLAG_EXEC, PS_FST_FFLAG_EXEC } }; #define NKFFLAGS (sizeof(kfflags2fst) / sizeof(*kfflags2fst)) unsigned int i; Modified: projects/libprocstat/usr.bin/fstat/libprocstat.h ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.h Thu Jul 30 18:53:06 2009 (r195978) +++ projects/libprocstat/usr.bin/fstat/libprocstat.h Thu Jul 30 20:16:34 2009 (r195979) @@ -86,6 +86,7 @@ #define PS_FST_FFLAG_EXCL 0x0800 #define PS_FST_FFLAG_DIRECT 0x1000 #define PS_FST_FFLAG_EXEC 0x2000 +#define PS_FST_FFLAG_HASLOCK 0x4000 struct procstat { int type; From owner-svn-src-projects@FreeBSD.ORG Thu Jul 30 21:00:21 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 25400106564A; Thu, 30 Jul 2009 21:00:21 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 135758FC0C; Thu, 30 Jul 2009 21:00:21 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6UL0Kcc045820; Thu, 30 Jul 2009 21:00:20 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6UL0Kvt045815; Thu, 30 Jul 2009 21:00:20 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907302100.n6UL0Kvt045815@svn.freebsd.org> From: Stanislav Sedov Date: Thu, 30 Jul 2009 21:00:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195981 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jul 2009 21:00:21 -0000 Author: stas Date: Thu Jul 30 21:00:20 2009 New Revision: 195981 URL: http://svn.freebsd.org/changeset/base/195981 Log: - Add functions to free procstat-returned memory after usage. - Use these functions to free resources in fstat/fuser. Modified: projects/libprocstat/usr.bin/fstat/fstat.c projects/libprocstat/usr.bin/fstat/fuser.c projects/libprocstat/usr.bin/fstat/libprocstat.c projects/libprocstat/usr.bin/fstat/libprocstat.h Modified: projects/libprocstat/usr.bin/fstat/fstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fstat.c Thu Jul 30 20:50:56 2009 (r195980) +++ projects/libprocstat/usr.bin/fstat/fstat.c Thu Jul 30 21:00:20 2009 (r195981) @@ -202,6 +202,7 @@ do_fstat(int argc, char **argv) dofiles(procstat, &p[i]); } free(p); + procstat_freeprocs(procstat, p); procstat_close(procstat); return (0); } @@ -224,6 +225,7 @@ dofiles(struct procstat *procstat, struc return; STAILQ_FOREACH(fst, head, next) print_file_info(procstat, fst, uname, cmd, pid); + procstat_freefiles(procstat, head); } Modified: projects/libprocstat/usr.bin/fstat/fuser.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fuser.c Thu Jul 30 20:50:56 2009 (r195980) +++ projects/libprocstat/usr.bin/fstat/fuser.c Thu Jul 30 21:00:20 2009 (r195981) @@ -156,7 +156,6 @@ addfile(const char *path, struct reqfile reqfile->name = path; STAILQ_INIT(&reqfile->consumers); return (0); -/* XXX: devs? */ } int @@ -279,8 +278,9 @@ do_fuser(int argc, char *argv[]) } (void)fprintf(stderr, "\n"); } + procstat_freeprocs(procstat, p); procstat_close(procstat); - /* XXX: free resoucres .*/ + free(reqfiles); return (0); } @@ -350,7 +350,7 @@ dofiles(struct procstat *procstat, struc STAILQ_INSERT_TAIL(&reqfiles[i].consumers, cons, next); } } - /* XXX: free head */ + procstat_freefiles(procstat, head); } /* Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Thu Jul 30 20:50:56 2009 (r195980) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Thu Jul 30 21:00:20 2009 (r195981) @@ -226,6 +226,14 @@ fail: return (NULL); } +void +procstat_freeprocs(struct procstat *procstat __unused, struct kinfo_proc *p) +{ + + if (p != NULL) + free(p); +} + struct filestat_list * procstat_getfiles(struct procstat *procstat, struct kinfo_proc *kp, int mmapped) { @@ -238,6 +246,20 @@ procstat_getfiles(struct procstat *procs return (NULL); } +void +procstat_freefiles(struct procstat *procstat, struct filestat_list *head) +{ + struct filestat *fst, *tmp; + + STAILQ_FOREACH_SAFE(fst, head, next, tmp) { + if (procstat->type == PROCSTAT_SYSCTL && + fst->fs_typedep != NULL) + free(fst->fs_typedep); + free(fst); + } + free(head); +} + static struct filestat * filestat_new_entry(void *typedep, int type, int fd, int fflags, int uflags) { Modified: projects/libprocstat/usr.bin/fstat/libprocstat.h ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.h Thu Jul 30 20:50:56 2009 (r195980) +++ projects/libprocstat/usr.bin/fstat/libprocstat.h Thu Jul 30 21:00:20 2009 (r195981) @@ -138,6 +138,9 @@ struct sockstat { STAILQ_HEAD(filestat_list, filestat); void procstat_close(struct procstat *procstat); +void procstat_freeprocs(struct procstat *procstat, struct kinfo_proc *p); +void procstat_freefiles(struct procstat *procstat, + struct filestat_list *head); struct filestat_list *procstat_getfiles(struct procstat *procstat, struct kinfo_proc *kp, int mmapped); struct kinfo_proc *procstat_getprocs(struct procstat *procstat, From owner-svn-src-projects@FreeBSD.ORG Thu Jul 30 21:51:07 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A30D3106566C; Thu, 30 Jul 2009 21:51:07 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8F2B28FC12; Thu, 30 Jul 2009 21:51:07 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6ULp7AW046970; Thu, 30 Jul 2009 21:51:07 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6ULp7QX046959; Thu, 30 Jul 2009 21:51:07 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907302151.n6ULp7QX046959@svn.freebsd.org> From: Nathan Whitehorn Date: Thu, 30 Jul 2009 21:51:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195982 - in projects/ppc64/sys: conf powerpc/aim powerpc/aim64 powerpc/include X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jul 2009 21:51:07 -0000 Author: nwhitehorn Date: Thu Jul 30 21:51:07 2009 New Revision: 195982 URL: http://svn.freebsd.org/changeset/base/195982 Log: The kernel now tries (and fails, since there isn't one) to start init after some more hacking with TOC pointers and with setfault(). More irritatingly, to deal with certain broken implementations of this architecture (I'm looking at you, Cell) that only implement a 65-bit virtual address space, I've had to reduce the accessible effective address range to 45 bits. This needs a lot of reexamination, and fixing it properly will probably involve some kind of global VSID hash table. Deleted: projects/ppc64/sys/powerpc/aim64/copyinout.c Modified: projects/ppc64/sys/conf/files.powerpc64 projects/ppc64/sys/powerpc/aim/copyinout.c projects/ppc64/sys/powerpc/aim/trap.c projects/ppc64/sys/powerpc/aim/vm_machdep.c projects/ppc64/sys/powerpc/aim64/locore.S projects/ppc64/sys/powerpc/aim64/machdep.c projects/ppc64/sys/powerpc/aim64/mmu_oea64.c projects/ppc64/sys/powerpc/aim64/trap_subr.S projects/ppc64/sys/powerpc/include/frame.h projects/ppc64/sys/powerpc/include/pcb.h Modified: projects/ppc64/sys/conf/files.powerpc64 ============================================================================== --- projects/ppc64/sys/conf/files.powerpc64 Thu Jul 30 21:00:20 2009 (r195981) +++ projects/ppc64/sys/conf/files.powerpc64 Thu Jul 30 21:51:07 2009 (r195982) @@ -54,6 +54,7 @@ libkern/flsl.c standard libkern/memmove.c standard libkern/memset.c standard powerpc/aim/clock.c optional aim +powerpc/aim/copyinout.c optional aim powerpc/aim/interrupt.c optional aim powerpc/aim/mp_cpudep.c optional aim smp powerpc/aim/nexus.c optional aim @@ -63,7 +64,6 @@ powerpc/aim/platform_chrp.c optional aim powerpc/aim/trap.c optional aim powerpc/aim/uma_machdep.c optional aim powerpc/aim/vm_machdep.c optional aim -powerpc/aim64/copyinout.c optional aim powerpc/aim64/locore.S optional aim no-obj powerpc/aim64/machdep.c optional aim powerpc/aim64/mmu_oea64.c optional aim Modified: projects/ppc64/sys/powerpc/aim/copyinout.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/copyinout.c Thu Jul 30 21:00:20 2009 (r195981) +++ projects/ppc64/sys/powerpc/aim/copyinout.c Thu Jul 30 21:51:07 2009 (r195982) @@ -72,6 +72,33 @@ int setfault(faultbuf); /* defined in lo /* * Makes sure that the right segment of userspace is mapped in. */ +static __inline register_t +va_to_vsid(pmap_t pm, const volatile void *va) +{ + #ifdef __powerpc64__ + return (((uint64_t)pm->pm_context << 17) | + ((uintptr_t)va >> ADDR_SR_SHFT)); + #else + return ((pm->pm_sr[(uintptr_t)va >> ADDR_SR_SHFT]) & SR_VSID_MASK); + #endif +} + +#ifdef __powerpc64__ +static __inline void +set_user_sr(register_t vsid) +{ + register_t esid, slb1, slb2; + + esid = USER_SR; + + slb1 = vsid << 12; + slb2 = (((esid << 1) | 1UL) << 27) | USER_SR; + + __asm __volatile ("slbie %0; slbmte %1, %2" :: "r"(esid << 28), + "r"(slb1), "r"(slb2)); + isync(); +} +#else static __inline void set_user_sr(register_t vsid) { @@ -80,6 +107,7 @@ set_user_sr(register_t vsid) __asm __volatile ("mtsr %0,%1" :: "n"(USER_SR), "r"(vsid)); isync(); } +#endif int copyout(const void *kaddr, void *udaddr, size_t len) @@ -103,13 +131,13 @@ copyout(const void *kaddr, void *udaddr, up = udaddr; while (len > 0) { - p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); + p = (char *)USER_ADDR + ((uintptr_t)up & ~SEGMENT_MASK); l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; if (l > len) l = len; - set_user_sr(pm->pm_sr[(u_int)up >> ADDR_SR_SHFT]); + set_user_sr(va_to_vsid(pm,up)); bcopy(kp, p, l); @@ -144,13 +172,13 @@ copyin(const void *udaddr, void *kaddr, up = udaddr; while (len > 0) { - p = (char *)USER_ADDR + ((u_int)up & ~SEGMENT_MASK); + p = (char *)USER_ADDR + ((uintptr_t)up & ~SEGMENT_MASK); l = ((char *)USER_ADDR + SEGMENT_LENGTH) - p; if (l > len) l = len; - set_user_sr(pm->pm_sr[(u_int)up >> ADDR_SR_SHFT]); + set_user_sr(va_to_vsid(pm,up)); bcopy(p, kp, l); @@ -218,14 +246,14 @@ subyte(void *addr, int byte) td = PCPU_GET(curthread); pm = &td->td_proc->p_vmspace->vm_pmap; - p = (char *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + p = (char *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK)); if (setfault(env)) { td->td_pcb->pcb_onfault = NULL; return (-1); } - set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + set_user_sr(va_to_vsid(pm,addr)); *p = (char)byte; @@ -233,6 +261,33 @@ subyte(void *addr, int byte) return (0); } +#ifdef __powerpc64__ +int +suword32(void *addr, int word) +{ + struct thread *td; + pmap_t pm; + faultbuf env; + int *p; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + p = (int *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK)); + + if (setfault(env)) { + td->td_pcb->pcb_onfault = NULL; + return (-1); + } + + set_user_sr(pm->pm_sr[(uintptr_t)addr >> ADDR_SR_SHFT]); + + *p = word; + + td->td_pcb->pcb_onfault = NULL; + return (0); +} +#endif + int suword(void *addr, long word) { @@ -243,14 +298,14 @@ suword(void *addr, long word) td = PCPU_GET(curthread); pm = &td->td_proc->p_vmspace->vm_pmap; - p = (long *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + p = (long *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK)); if (setfault(env)) { td->td_pcb->pcb_onfault = NULL; return (-1); } - set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + set_user_sr(va_to_vsid(pm,addr)); *p = word; @@ -258,12 +313,19 @@ suword(void *addr, long word) return (0); } +#ifdef __powerpc64__ +int +suword64(void *addr, int64_t word) +{ + return (suword(addr, (long)word)); +} +#else int suword32(void *addr, int32_t word) { return (suword(addr, (long)word)); } - +#endif int fubyte(const void *addr) @@ -276,14 +338,15 @@ fubyte(const void *addr) td = PCPU_GET(curthread); pm = &td->td_proc->p_vmspace->vm_pmap; - p = (u_char *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + p = (u_char *)((uintptr_t)USER_ADDR + + ((uintptr_t)addr & ~SEGMENT_MASK)); if (setfault(env)) { td->td_pcb->pcb_onfault = NULL; return (-1); } - set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + set_user_sr(va_to_vsid(pm,addr)); val = *p; @@ -301,14 +364,14 @@ fuword(const void *addr) td = PCPU_GET(curthread); pm = &td->td_proc->p_vmspace->vm_pmap; - p = (long *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + p = (long *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK)); if (setfault(env)) { td->td_pcb->pcb_onfault = NULL; return (-1); } - set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + set_user_sr(va_to_vsid(pm,addr)); val = *p; @@ -338,9 +401,10 @@ casuword(volatile u_long *addr, u_long o td = PCPU_GET(curthread); pm = &td->td_proc->p_vmspace->vm_pmap; - p = (u_long *)((u_int)USER_ADDR + ((u_int)addr & ~SEGMENT_MASK)); + p = (u_long *)((uintptr_t)USER_ADDR + + ((uintptr_t)addr & ~SEGMENT_MASK)); - set_user_sr(pm->pm_sr[(u_int)addr >> ADDR_SR_SHFT]); + set_user_sr(va_to_vsid(pm,addr)); if (setfault(env)) { td->td_pcb->pcb_onfault = NULL; Modified: projects/ppc64/sys/powerpc/aim/trap.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap.c Thu Jul 30 21:00:20 2009 (r195981) +++ projects/ppc64/sys/powerpc/aim/trap.c Thu Jul 30 21:51:07 2009 (r195982) @@ -105,7 +105,9 @@ static struct powerpc_exception powerpc_ { 0x0100, "system reset" }, { 0x0200, "machine check" }, { 0x0300, "data storage interrupt" }, + { 0x0380, "data segment exception" }, { 0x0400, "instruction storage interrupt" }, + { 0x0480, "instruction segment exception" }, { 0x0500, "external interrupt" }, { 0x0600, "alignment" }, { 0x0700, "program" }, @@ -493,7 +495,7 @@ trap_pfault(struct trapframe *frame, int vm_map_t map; vm_prot_t ftype; int rv; - u_int user_sr; + register_t user_sr; td = curthread; p = td->td_proc; @@ -515,9 +517,16 @@ trap_pfault(struct trapframe *frame, int if (p->p_vmspace == NULL) return (SIGSEGV); + #ifdef __powerpc64__ + user_sr = 0; + __asm ("slbmfev %0, %1" + : "=r"(user_sr) + : "r"(USER_SR)); + #else __asm ("mfsr %0, %1" : "=r"(user_sr) : "K"(USER_SR)); + #endif eva &= ADDR_PIDX | ADDR_POFF; eva |= user_sr << ADDR_SR_SHFT; map = &p->p_vmspace->vm_map; Modified: projects/ppc64/sys/powerpc/aim/vm_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/vm_machdep.c Thu Jul 30 21:00:20 2009 (r195981) +++ projects/ppc64/sys/powerpc/aim/vm_machdep.c Thu Jul 30 21:51:07 2009 (r195982) @@ -129,6 +129,10 @@ static u_int sf_buf_alloc_want; */ static struct mtx sf_buf_lock; +#ifdef __powerpc64__ +extern uintptr_t tocbase; +#endif + /* * Finish a fork operation, with process p2 nearly set up. @@ -177,6 +181,9 @@ cpu_fork(struct thread *td1, struct proc cf = (struct callframe *)tf - 1; memset(cf, 0, sizeof(struct callframe)); + #ifdef __powerpc64__ + cf->cf_toc = tocbase; + #endif cf->cf_func = (register_t)fork_return; cf->cf_arg0 = (register_t)td2; cf->cf_arg1 = (register_t)tf; @@ -455,7 +462,12 @@ cpu_set_upcall(struct thread *td, struct cf->cf_arg1 = (register_t)tf; pcb2->pcb_sp = (register_t)cf; + #ifdef __powerpc64__ + pcb2->pcb_lr = ((register_t *)fork_trampoline)[0]; + pcb2->pcb_toc = ((register_t *)fork_trampoline)[1]; + #else pcb2->pcb_lr = (register_t)fork_trampoline; + #endif pcb2->pcb_cpu.aim.usr_vsid = 0; pcb2->pcb_cpu.aim.usr_esid = 0; Modified: projects/ppc64/sys/powerpc/aim64/locore.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/locore.S Thu Jul 30 21:00:20 2009 (r195981) +++ projects/ppc64/sys/powerpc/aim64/locore.S Thu Jul 30 21:51:07 2009 (r195982) @@ -191,6 +191,7 @@ ASENTRY(__start) */ .align 3 + .globl tocbase tocbase: .llong .TOC.@tocbase @@ -200,19 +201,19 @@ tocbase: ASENTRY(ofw_real_mode_entry) mflr 0 - lis 31,openfirmware_entry@ha - ld 31,openfirmware_entry@l(31) /* read client interface handler */ + lis 4,openfirmware_entry@ha + ld 4,openfirmware_entry@l(4) /* read client interface handler */ - mfmsr 30 - mtsprg3 30 - andi. 30, 30, ~(PSL_DR | PSL_IR | PSL_EE)@l - mtmsrd 30 + mfmsr 5 + mtsprg3 5 + andi. 5, 5, ~(PSL_DR | PSL_IR | PSL_EE)@l + mtmsrd 5 - mtctr 31 + mtctr 4 bctrl - mfsprg3 30 - mtmsrd 30 + mfsprg3 5 + mtmsrd 5 mtlr 0 blr @@ -228,13 +229,34 @@ ASENTRY(setfault) mflr 0 mfcr 12 mfsprg 4,0 - lwz 4,PC_CURTHREAD(4) - lwz 4,TD_PCB(4) - stw 3,PCB_ONFAULT(4) - stw 0,0(3) - stw 1,4(3) - stw 2,8(3) - stmw 12,12(3) + ld 4,PC_CURTHREAD(4) + ld 4,TD_PCB(4) + std 3,PCB_ONFAULT(4) + std 0,0(3) + std 1,8(3) + std 2,16(3) + + std %r12,24(%r3) /* Save the non-volatile GP regs. */ + std %r13,24+1*8(%r3) + std %r14,24+2*8(%r3) + std %r15,24+3*8(%r3) + std %r16,24+4*8(%r3) + std %r17,24+5*8(%r3) + std %r18,24+6*8(%r3) + std %r19,24+7*8(%r3) + std %r20,24+8*8(%r3) + std %r21,24+9*8(%r3) + std %r22,24+10*8(%r3) + std %r23,24+11*8(%r3) + std %r24,24+12*8(%r3) + std %r25,24+13*8(%r3) + std %r26,24+14*8(%r3) + std %r27,24+15*8(%r3) + std %r28,24+16*8(%r3) + std %r29,24+17*8(%r3) + std %r30,24+18*8(%r3) + std %r31,24+19*8(%r3) + xor 3,3,3 blr Modified: projects/ppc64/sys/powerpc/aim64/machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim64/machdep.c Thu Jul 30 21:00:20 2009 (r195981) +++ projects/ppc64/sys/powerpc/aim64/machdep.c Thu Jul 30 21:51:07 2009 (r195982) @@ -394,9 +394,9 @@ powerpc_init(u_int startkernel, u_int en bcopy(&trapcode, (void *)EXC_TRC, (size_t)&trapsize); bcopy(&trapcode, (void *)EXC_BPT, (size_t)&trapsize); #endif - bcopy(&dsitrap, (void *)(EXC_DSI), (size_t)&dsisize); + bcopy(&dsitrap, (void *)EXC_DSI, (size_t)&dsisize); bcopy(&trapcode, (void *)EXC_DSE, (size_t)&trapsize); - bcopy(&alitrap, (void *)(EXC_ALI), (size_t)&alisize); + bcopy(&alitrap, (void *)EXC_ALI, (size_t)&alisize); bcopy(&trapcode, (void *)EXC_ISI, (size_t)&trapsize); bcopy(&trapcode, (void *)EXC_ISE, (size_t)&trapsize); bcopy(&trapcode, (void *)EXC_EXI, (size_t)&trapsize); Modified: projects/ppc64/sys/powerpc/aim64/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Thu Jul 30 21:00:20 2009 (r195981) +++ projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Thu Jul 30 21:51:07 2009 (r195982) @@ -171,7 +171,7 @@ static __inline uint64_t va_to_vsid(pmap_t pm, vm_offset_t va) { #ifdef __powerpc64__ - return (((uint64_t)pm->pm_context << 36) | + return (((uint64_t)pm->pm_context << 17) | ((uintptr_t)va >> ADDR_SR_SHFT)); #else return ((pm->pm_sr[(uintptr_t)va >> ADDR_SR_SHFT]) & SR_VSID_MASK); @@ -742,7 +742,7 @@ moea64_bridge_cpu_bootstrap(mmu_t mmup, continue; /* The right-most bit is a validity bit */ - slb1 = ((register_t)kernel_pmap->pm_context << 36) | + slb1 = ((register_t)kernel_pmap->pm_context << 17) | (kernel_pmap->pm_sr[i] >> 1); slb1 <<= 12; slb2 = kernel_pmap->pm_sr[i] << 27 | i; @@ -926,7 +926,7 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o /* * Initialize the kernel pmap (which is statically allocated). */ - kernel_pmap->pm_context = 0; + kernel_pmap->pm_context = 0xfffff; #ifdef __powerpc64__ for (i = 0; i < 16; i++) kernel_pmap->pm_sr[i] = (i << 1) | 1; @@ -979,8 +979,6 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o */ moea64_pinit(mmup, &ofw_pmap); - ofw_pmap.pm_sr[KERNEL_SR] = kernel_pmap->pm_sr[KERNEL_SR]; - ofw_pmap.pm_sr[KERNEL2_SR] = kernel_pmap->pm_sr[KERNEL2_SR]; if ((chosen = OF_finddevice("/chosen")) == -1) panic("moea64_bootstrap: can't find /chosen"); @@ -1841,6 +1839,7 @@ moea64_pinit(mmu_t mmu, pmap_t pmap) moea64_vsid_bitmap[n] |= mask; #ifdef __powerpc64__ +printf("Assigning new context: %#x, hash %#x\n",moea64_vsidcontext,hash); pmap->pm_context = hash; for (i = 0; i < NSEGS; i++) pmap->pm_sr[i] = 0; Modified: projects/ppc64/sys/powerpc/aim64/trap_subr.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/trap_subr.S Thu Jul 30 21:00:20 2009 (r195981) +++ projects/ppc64/sys/powerpc/aim64/trap_subr.S Thu Jul 30 21:51:07 2009 (r195982) @@ -55,7 +55,7 @@ restoresrs: mr %r28, %r27 lwz %r27, PM_CONTEXT(%r27); instslb: - li %r30, 31; + li %r30, 12; sld %r30, %r27, %r30; ld %r31, PM_SR(%r28); @@ -554,7 +554,7 @@ dbtrap: or. %r3,%r3,%r3 bne dbleave /* This wasn't for KDB, so switch to real trap: */ - ld %r3,FRAME_EXC+8(%r1) /* save exception */ + ld %r3,FRAME_EXC+16(%r1) /* save exception */ GET_CPUINFO(%r4) std %r3,(PC_DBSAVE+CPUSAVE_R31)(%r4) FRAME_LEAVE(PC_DBSAVE) Modified: projects/ppc64/sys/powerpc/include/frame.h ============================================================================== --- projects/ppc64/sys/powerpc/include/frame.h Thu Jul 30 21:00:20 2009 (r195981) +++ projects/ppc64/sys/powerpc/include/frame.h Thu Jul 30 21:51:07 2009 (r195982) @@ -79,6 +79,19 @@ struct trapframe { /* * Call frame for PowerPC used during fork. */ +#ifdef __powerpc64__ +struct callframe { + register_t cf_dummy_fp; /* dummy frame pointer */ + register_t cf_cr; + register_t cf_lr; + register_t cf_compiler; + register_t cf_linkeditor; + register_t cf_toc; + register_t cf_func; + register_t cf_arg0; + register_t cf_arg1; +}; +#else struct callframe { register_t cf_dummy_fp; /* dummy frame pointer */ register_t cf_lr; /* space for link register save */ @@ -86,6 +99,10 @@ struct callframe { register_t cf_arg0; register_t cf_arg1; }; +#endif + +/* Definitions for syscalls */ +#define FIRSTARG 3 /* first arg in reg 3 */ /* Definitions for syscalls */ #define FIRSTARG 3 /* first arg in reg 3 */ Modified: projects/ppc64/sys/powerpc/include/pcb.h ============================================================================== --- projects/ppc64/sys/powerpc/include/pcb.h Thu Jul 30 21:00:20 2009 (r195981) +++ projects/ppc64/sys/powerpc/include/pcb.h Thu Jul 30 21:51:07 2009 (r195982) @@ -35,7 +35,7 @@ #ifndef _MACHINE_PCB_H_ #define _MACHINE_PCB_H_ -typedef int faultbuf[25]; +typedef register_t faultbuf[25]; struct pcb { register_t pcb_context[20]; /* non-volatile r14-r31 */ From owner-svn-src-projects@FreeBSD.ORG Thu Jul 30 23:29:59 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C2388106566C; Thu, 30 Jul 2009 23:29:59 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 969D58FC0C; Thu, 30 Jul 2009 23:29:59 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6UNTxUs049065; Thu, 30 Jul 2009 23:29:59 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6UNTxCi049063; Thu, 30 Jul 2009 23:29:59 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200907302329.n6UNTxCi049063@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Thu, 30 Jul 2009 23:29:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195983 - projects/mips/sys/mips/mips X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jul 2009 23:30:00 -0000 Author: gonzo Date: Thu Jul 30 23:29:59 2009 New Revision: 195983 URL: http://svn.freebsd.org/changeset/base/195983 Log: - mark map as coherent if requested by flags - explicitly set memory allocation method in map flags instead of duplicating conditions for malloc/contigalloc Modified: projects/mips/sys/mips/mips/busdma_machdep.c Modified: projects/mips/sys/mips/mips/busdma_machdep.c ============================================================================== --- projects/mips/sys/mips/mips/busdma_machdep.c Thu Jul 30 21:51:07 2009 (r195982) +++ projects/mips/sys/mips/mips/busdma_machdep.c Thu Jul 30 23:29:59 2009 (r195983) @@ -123,9 +123,11 @@ SYSCTL_INT(_hw_busdma, OID_AUTO, total_b #define DMAMAP_LINEAR 0x1 #define DMAMAP_MBUF 0x2 #define DMAMAP_UIO 0x4 -#define DMAMAP_ALLOCATED 0x10 #define DMAMAP_TYPE_MASK (DMAMAP_LINEAR|DMAMAP_MBUF|DMAMAP_UIO) #define DMAMAP_COHERENT 0x8 +#define DMAMAP_ALLOCATED 0x10 +#define DMAMAP_MALLOCUSED 0x20 + struct bus_dmamap { struct bp_list bpages; int pagesneeded; @@ -514,6 +516,10 @@ bus_dmamap_create(bus_dma_tag_t dmat, in } bz->map_count++; } + + if (flags & BUS_DMA_COHERENT) + newmap->flags |= DMAMAP_COHERENT; + CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", __func__, dmat, dmat->flags, error); @@ -570,12 +576,16 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi dmat->map_count++; *mapp = newmap; newmap->dmat = dmat; + + if (flags & BUS_DMA_COHERENT) + newmap->flags |= DMAMAP_COHERENT; if (dmat->maxsize <= PAGE_SIZE && (dmat->alignment < dmat->maxsize) && !_bus_dma_can_bounce(dmat->lowaddr, dmat->highaddr) && !(flags & BUS_DMA_COHERENT)) { *vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags); + newmap->flags |= DMAMAP_MALLOCUSED; } else { /* * XXX Use Contigmalloc until it is merged into this facility @@ -639,13 +649,12 @@ bus_dmamem_free(bus_dma_tag_t dmat, void ("Trying to freeing the wrong DMA buffer")); vaddr = map->origbuffer; } - if (dmat->maxsize <= PAGE_SIZE && - dmat->alignment < dmat->maxsize && - !_bus_dma_can_bounce(dmat->lowaddr, dmat->highaddr)) + + if (map->flags & DMAMAP_MALLOCUSED) free(vaddr, M_DEVBUF); - else { + else contigfree(vaddr, dmat->maxsize, M_DEVBUF); - } + dmat->map_count--; _busdma_free_dmamap(map); CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags); From owner-svn-src-projects@FreeBSD.ORG Thu Jul 30 23:48:30 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 13181106564A; Thu, 30 Jul 2009 23:48:30 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DB50A8FC1A; Thu, 30 Jul 2009 23:48:29 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6UNmTfG049538; Thu, 30 Jul 2009 23:48:29 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6UNmTWi049536; Thu, 30 Jul 2009 23:48:29 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200907302348.n6UNmTWi049536@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Thu, 30 Jul 2009 23:48:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195984 - projects/mips/sys/mips/mips X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jul 2009 23:48:30 -0000 Author: gonzo Date: Thu Jul 30 23:48:29 2009 New Revision: 195984 URL: http://svn.freebsd.org/changeset/base/195984 Log: - Properly unwind stack for functions with __noreturn__ attribute Submitted by: Neelkanth Natu Modified: projects/mips/sys/mips/mips/trap.c Modified: projects/mips/sys/mips/mips/trap.c ============================================================================== --- projects/mips/sys/mips/mips/trap.c Thu Jul 30 23:29:59 2009 (r195983) +++ projects/mips/sys/mips/mips/trap.c Thu Jul 30 23:48:29 2009 (r195984) @@ -1229,8 +1229,25 @@ MipsEmulateBranch(struct trapframe *fram #if defined(DDB) || defined(DEBUG) -#define MIPS_JR_RA 0x03e00008 /* instruction code for jr ra */ +/* + * A function using a stack frame has the following instruction as the first + * one: addiu sp,sp,- + * + * We make use of this to detect starting address of a function. This works + * better than using 'j ra' instruction to signify end of the previous + * function (for e.g. functions like boot() or panic() do not actually + * emit a 'j ra' instruction). + * + * XXX the abi does not require that the addiu instruction be the first one. + */ +#define MIPS_START_OF_FUNCTION(ins) (((ins) & 0xffff8000) == 0x27bd8000) +/* + * MIPS ABI 3.0 requires that all functions return using the 'j ra' instruction + * + * XXX gcc doesn't do this true for functions with __noreturn__ attribute. + */ +#define MIPS_END_OF_FUNCTION(ins) ((ins) == 0x03e00008) /* forward */ char *fn_name(unsigned addr); @@ -1326,9 +1343,21 @@ loop: */ if (!subr) { va = pc - sizeof(int); - while ((instr = kdbpeek((int *)va)) != MIPS_JR_RA) - va -= sizeof(int); - va += 2 * sizeof(int); /* skip back over branch & delay slot */ + while (1) { + instr = kdbpeek((int *)va); + + if (MIPS_START_OF_FUNCTION(instr)) + break; + + if (MIPS_END_OF_FUNCTION(instr)) { + /* skip over branch-delay slot instruction */ + va += 2 * sizeof(int); + break; + } + + va -= sizeof(int); + } + /* skip over nulls which might separate .o files */ while ((instr = kdbpeek((int *)va)) == 0) va += sizeof(int); From owner-svn-src-projects@FreeBSD.ORG Thu Jul 30 23:54:01 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2041E1065678; Thu, 30 Jul 2009 23:54:01 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E80558FC16; Thu, 30 Jul 2009 23:54:00 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6UNs05j049670; Thu, 30 Jul 2009 23:54:00 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6UNs0oN049667; Thu, 30 Jul 2009 23:54:00 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200907302354.n6UNs0oN049667@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Thu, 30 Jul 2009 23:54:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195985 - projects/mips/sys/mips/atheros X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jul 2009 23:54:01 -0000 Author: gonzo Date: Thu Jul 30 23:54:00 2009 New Revision: 195985 URL: http://svn.freebsd.org/changeset/base/195985 Log: - Make USB part of AR71XX kernel buildable again Modified: projects/mips/sys/mips/atheros/ar71xx_ehci.c projects/mips/sys/mips/atheros/ar71xx_ohci.c Modified: projects/mips/sys/mips/atheros/ar71xx_ehci.c ============================================================================== --- projects/mips/sys/mips/atheros/ar71xx_ehci.c Thu Jul 30 23:48:29 2009 (r195984) +++ projects/mips/sys/mips/atheros/ar71xx_ehci.c Thu Jul 30 23:54:00 2009 (r195985) @@ -35,11 +35,14 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include +#include #include -#include #include +#include #include #include @@ -129,7 +132,7 @@ ar71xx_ehci_attach(device_t self) sc->sc_bus.devices_max = EHCI_MAX_DEVICES; /* get all DMA memory */ - if (usb2_bus_mem_alloc_all(&sc->sc_bus, + if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc)) { return (ENOMEM); } @@ -257,7 +260,7 @@ ar71xx_ehci_detach(device_t self) sc->sc_io_res); sc->sc_io_res = NULL; } - usb2_bus_mem_free_all(&sc->sc_bus, &ehci_iterate_hw_softc); + usb_bus_mem_free_all(&sc->sc_bus, &ehci_iterate_hw_softc); return (0); } Modified: projects/mips/sys/mips/atheros/ar71xx_ohci.c ============================================================================== --- projects/mips/sys/mips/atheros/ar71xx_ohci.c Thu Jul 30 23:48:29 2009 (r195984) +++ projects/mips/sys/mips/atheros/ar71xx_ohci.c Thu Jul 30 23:54:00 2009 (r195985) @@ -28,8 +28,16 @@ #include __FBSDID("$FreeBSD$"); -#include +#include +#include +#include +#include +#include +#include +#include + #include +#include #include #include @@ -71,7 +79,7 @@ ar71xx_ohci_attach(device_t dev) sc->sc_ohci.sc_bus.devices_max = OHCI_MAX_DEVICES; /* get all DMA memory */ - if (usb2_bus_mem_alloc_all(&sc->sc_ohci.sc_bus, + if (usb_bus_mem_alloc_all(&sc->sc_ohci.sc_bus, USB_GET_DMA_TAG(dev), &ohci_iterate_hw_softc)) { return (ENOMEM); } @@ -177,7 +185,7 @@ ar71xx_ohci_detach(device_t dev) sc->sc_ohci.sc_io_tag = 0; sc->sc_ohci.sc_io_hdl = 0; } - usb2_bus_mem_free_all(&sc->sc_ohci.sc_bus, &ohci_iterate_hw_softc); + usb_bus_mem_free_all(&sc->sc_ohci.sc_bus, &ohci_iterate_hw_softc); return (0); } From owner-svn-src-projects@FreeBSD.ORG Fri Jul 31 01:04:35 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BADB3106567A; Fri, 31 Jul 2009 01:04:35 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A97C68FC13; Fri, 31 Jul 2009 01:04:35 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6V14Z0s051199; Fri, 31 Jul 2009 01:04:35 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6V14ZW6051197; Fri, 31 Jul 2009 01:04:35 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907310104.n6V14ZW6051197@svn.freebsd.org> From: Nathan Whitehorn Date: Fri, 31 Jul 2009 01:04:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195986 - projects/ppc64/sys/powerpc/aim64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jul 2009 01:04:36 -0000 Author: nwhitehorn Date: Fri Jul 31 01:04:35 2009 New Revision: 195986 URL: http://svn.freebsd.org/changeset/base/195986 Log: Remove a debugging printf that crept in. Modified: projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Modified: projects/ppc64/sys/powerpc/aim64/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Thu Jul 30 23:54:00 2009 (r195985) +++ projects/ppc64/sys/powerpc/aim64/mmu_oea64.c Fri Jul 31 01:04:35 2009 (r195986) @@ -1839,7 +1839,6 @@ moea64_pinit(mmu_t mmu, pmap_t pmap) moea64_vsid_bitmap[n] |= mask; #ifdef __powerpc64__ -printf("Assigning new context: %#x, hash %#x\n",moea64_vsidcontext,hash); pmap->pm_context = hash; for (i = 0; i < NSEGS; i++) pmap->pm_sr[i] = 0; From owner-svn-src-projects@FreeBSD.ORG Fri Jul 31 11:32:33 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2E1C9106566C; Fri, 31 Jul 2009 11:32:33 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 117DC8FC0A; Fri, 31 Jul 2009 11:32:33 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6VBWWDa067766; Fri, 31 Jul 2009 11:32:32 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6VBWWbI067760; Fri, 31 Jul 2009 11:32:32 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907311132.n6VBWWbI067760@svn.freebsd.org> From: Stanislav Sedov Date: Fri, 31 Jul 2009 11:32:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195990 - in projects/libprocstat: sys/kern sys/sys usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jul 2009 11:32:33 -0000 Author: stas Date: Fri Jul 31 11:32:32 2009 New Revision: 195990 URL: http://svn.freebsd.org/changeset/base/195990 Log: - Return information about the controlling terminal vnode in procstat_getfiles. This is required for fuser support. Modified: projects/libprocstat/sys/kern/kern_descrip.c projects/libprocstat/sys/sys/user.h projects/libprocstat/usr.bin/fstat/fuser.c projects/libprocstat/usr.bin/fstat/libprocstat.c projects/libprocstat/usr.bin/fstat/libprocstat.h Modified: projects/libprocstat/sys/kern/kern_descrip.c ============================================================================== --- projects/libprocstat/sys/kern/kern_descrip.c Fri Jul 31 09:57:42 2009 (r195989) +++ projects/libprocstat/sys/kern/kern_descrip.c Fri Jul 31 11:32:32 2009 (r195990) @@ -2975,7 +2975,7 @@ sysctl_kern_proc_filedesc(SYSCTL_HANDLER struct filedesc *fdp; struct kinfo_file *kif; struct proc *p; - struct vnode *tracevp, *textvp; + struct vnode *cttyvp, *textvp, *tracevp; size_t oldidx; int64_t offset; void *data; @@ -2997,6 +2997,12 @@ sysctl_kern_proc_filedesc(SYSCTL_HANDLER textvp = p->p_textvp; if (textvp != NULL) vref(textvp); + /* Controlling tty. */ + cttyvp = NULL; + if (p->p_pgrp != NULL && p->p_pgrp->pg_session != NULL) { + cttyvp = p->p_pgrp->pg_session.s_ttyvp; + vref(cttyvp); + } fdp = fdhold(p); PROC_UNLOCK(p); kif = malloc(sizeof(*kif), M_TEMP, M_WAITOK); @@ -3006,6 +3012,9 @@ sysctl_kern_proc_filedesc(SYSCTL_HANDLER if (textvp != NULL) export_fd_for_sysctl(textvp, KF_TYPE_VNODE, KF_FD_TYPE_TEXT, FREAD, -1, -1, kif, req); + if (cttyvp != NULL) + export_fd_for_sysctl(cttyvp, KF_TYPE_VNODE, KF_FD_TYPE_CTTY, + FREAD | FWRITE, -1, -1, kif, req); if (fdp == NULL) goto fail; FILEDESC_SLOCK(fdp); Modified: projects/libprocstat/sys/sys/user.h ============================================================================== --- projects/libprocstat/sys/sys/user.h Fri Jul 31 09:57:42 2009 (r195989) +++ projects/libprocstat/sys/sys/user.h Fri Jul 31 11:32:32 2009 (r195990) @@ -278,6 +278,7 @@ struct user { #define KF_FD_TYPE_JAIL -3 /* Jail directory */ #define KF_FD_TYPE_TRACE -4 /* ptrace vnode */ #define KF_FD_TYPE_TEXT -5 /* Text vnode */ +#define KF_FD_TYPE_CTTY -6 /* Controlling terminal */ #define KF_FLAG_READ 0x00000001 #define KF_FLAG_WRITE 0x00000002 Modified: projects/libprocstat/usr.bin/fstat/fuser.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fuser.c Fri Jul 31 09:57:42 2009 (r195989) +++ projects/libprocstat/usr.bin/fstat/fuser.c Fri Jul 31 11:32:32 2009 (r195990) @@ -77,7 +77,8 @@ struct { {PS_FST_UFLAG_JAIL, 'j'}, {PS_FST_UFLAG_TRACE, 't'}, {PS_FST_UFLAG_TEXT, 'x'}, - {PS_FST_UFLAG_MMAP, 'm'} + {PS_FST_UFLAG_MMAP, 'm'}, + {PS_FST_UFLAG_CTTY, 'y'} }; #define NUFLAGS (sizeof(uflags) / sizeof(*uflags)) @@ -135,7 +136,6 @@ printflags(struct consumer *cons) for (i = 0; i < NFFLAGS; i++) if ((cons->flags & fflags[i].flag) != 0) fputc(fflags[i].ch, stderr); - /* XXX: add controlling tty support. */ } /* Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Fri Jul 31 09:57:42 2009 (r195989) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Fri Jul 31 11:32:32 2009 (r195990) @@ -278,6 +278,41 @@ filestat_new_entry(void *typedep, int ty return (entry); } +static struct vnode * +getctty(kvm_t *kd, struct kinfo_proc *kp) +{ + struct pgrp pgrp; + struct proc proc; + struct session sess; + int error; + + assert(kp); + error = kvm_read_all(kd, (unsigned long)kp->ki_paddr, &proc, + sizeof(proc)); + if (error == 0) { + warnx("can't read proc struct at %p for pid %d", + kp->ki_paddr, kp->ki_pid); + return (NULL); + } + if (proc.p_pgrp == NULL) + return (NULL); + error = kvm_read_all(kd, (unsigned long)proc.p_pgrp, &pgrp, + sizeof(pgrp)); + if (error == 0) { + warnx("can't read pgrp struct at %p for pid %d", + proc.p_pgrp, kp->ki_pid); + return (NULL); + } + error = kvm_read_all(kd, (unsigned long)pgrp.pg_session, &sess, + sizeof(sess)); + if (error == 0) { + warnx("can't read session struct at %p for pid %d", + pgrp.pg_session, kp->ki_pid); + return (NULL); + } + return (sess.s_ttyvp); +} + static struct filestat_list * procstat_getfiles_kvm(kvm_t *kd, struct kinfo_proc *kp, int mmapped) { @@ -286,6 +321,7 @@ procstat_getfiles_kvm(kvm_t *kd, struct struct vm_map_entry vmentry; struct vm_object object; struct vmspace vmspace; + struct vnode *vp; vm_map_entry_t entryp; vm_map_t map; vm_object_t objp; @@ -349,6 +385,13 @@ procstat_getfiles_kvm(kvm_t *kd, struct if (entry != NULL) STAILQ_INSERT_TAIL(head, entry, next); } + /* Controlling terminal. */ + if ((vp = getctty(kd, kp)) != NULL) { + entry = filestat_new_entry(vp, PS_FST_TYPE_VNODE, -1, + PS_FST_FFLAG_READ | PS_FST_FFLAG_WRITE, PS_FST_UFLAG_CTTY); + if (entry != NULL) + STAILQ_INSERT_TAIL(head, entry, next); + } nfiles = filed.fd_lastfile + 1; ofiles = malloc(nfiles * sizeof(struct file *)); @@ -541,16 +584,18 @@ kinfo_uflags2fst(int fd) { switch (fd) { + case KF_FD_TYPE_CTTY: + return (PS_FST_UFLAG_CTTY); case KF_FD_TYPE_CWD: return (PS_FST_UFLAG_CDIR); - case KF_FD_TYPE_ROOT: - return (PS_FST_UFLAG_RDIR); case KF_FD_TYPE_JAIL: return (PS_FST_UFLAG_JAIL); - case KF_FD_TYPE_TRACE: - return (PS_FST_UFLAG_TRACE); case KF_FD_TYPE_TEXT: return (PS_FST_UFLAG_TEXT); + case KF_FD_TYPE_TRACE: + return (PS_FST_UFLAG_TRACE); + case KF_FD_TYPE_ROOT: + return (PS_FST_UFLAG_RDIR); } return (0); } Modified: projects/libprocstat/usr.bin/fstat/libprocstat.h ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.h Fri Jul 31 09:57:42 2009 (r195989) +++ projects/libprocstat/usr.bin/fstat/libprocstat.h Fri Jul 31 11:32:32 2009 (r195990) @@ -68,6 +68,7 @@ #define PS_FST_UFLAG_TRACE 0x0008 #define PS_FST_UFLAG_TEXT 0x0010 #define PS_FST_UFLAG_MMAP 0x0020 +#define PS_FST_UFLAG_CTTY 0x0040 /* * Descriptor flags. From owner-svn-src-projects@FreeBSD.ORG Fri Jul 31 11:49:27 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F3319106566C; Fri, 31 Jul 2009 11:49:26 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E097D8FC29; Fri, 31 Jul 2009 11:49:26 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6VBnQsT068104; Fri, 31 Jul 2009 11:49:26 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6VBnQQ5068101; Fri, 31 Jul 2009 11:49:26 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907311149.n6VBnQQ5068101@svn.freebsd.org> From: Stanislav Sedov Date: Fri, 31 Jul 2009 11:49:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195991 - in projects/libprocstat: sys/kern usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jul 2009 11:49:27 -0000 Author: stas Date: Fri Jul 31 11:49:26 2009 New Revision: 195991 URL: http://svn.freebsd.org/changeset/base/195991 Log: - Minor style fixes. Modified: projects/libprocstat/sys/kern/kern_descrip.c projects/libprocstat/usr.bin/fstat/libprocstat.c Modified: projects/libprocstat/sys/kern/kern_descrip.c ============================================================================== --- projects/libprocstat/sys/kern/kern_descrip.c Fri Jul 31 11:32:32 2009 (r195990) +++ projects/libprocstat/sys/kern/kern_descrip.c Fri Jul 31 11:49:26 2009 (r195991) @@ -2901,21 +2901,21 @@ export_fd_for_sysctl(void *data, int typ int fflag; int kf_fflag; } fflags_table[] = { - { FREAD, KF_FLAG_READ }, - { FWRITE, KF_FLAG_WRITE }, { FAPPEND, KF_FLAG_APPEND }, { FASYNC, KF_FLAG_ASYNC }, { FFSYNC, KF_FLAG_FSYNC }, + { FHASLOCK, KF_FLAG_HASLOCK }, { FNONBLOCK, KF_FLAG_NONBLOCK }, + { FREAD, KF_FLAG_READ }, + { FWRITE, KF_FLAG_WRITE }, + { O_CREAT, KF_FLAG_CREAT }, { O_DIRECT, KF_FLAG_DIRECT }, - { FHASLOCK, KF_FLAG_HASLOCK }, - { O_SHLOCK, KF_FLAG_SHLOCK }, + { O_EXCL, KF_FLAG_EXCL }, + { O_EXEC, KF_FLAG_EXEC }, { O_EXLOCK, KF_FLAG_EXLOCK }, { O_NOFOLLOW, KF_FLAG_NOFOLLOW }, - { O_CREAT, KF_FLAG_CREAT }, - { O_TRUNC, KF_FLAG_TRUNC }, - { O_EXCL, KF_FLAG_EXCL }, - { O_EXEC, KF_FLAG_EXEC } + { O_SHLOCK, KF_FLAG_SHLOCK }, + { O_TRUNC, KF_FLAG_TRUNC } }; #define NFFLAGS (sizeof(fflags_table) / sizeof(*fflags_table)) struct vnode *vp; @@ -3146,15 +3146,15 @@ vntype_to_kinfo(int vtype) int vtype; int kf_vtype; } vtypes_table[] = { - { VNON, KF_VTYPE_VNON }, - { VREG, KF_VTYPE_VREG }, - { VDIR, KF_VTYPE_VDIR }, + { VBAD, KF_VTYPE_VBAD }, { VBLK, KF_VTYPE_VBLK }, { VCHR, KF_VTYPE_VCHR }, - { VLNK, KF_VTYPE_VLNK }, - { VSOCK, KF_VTYPE_VSOCK }, + { VDIR, KF_VTYPE_VDIR }, { VFIFO, KF_VTYPE_VFIFO }, - { VBAD, KF_VTYPE_VBAD } + { VLNK, KF_VTYPE_VLNK }, + { VNON, KF_VTYPE_VNON }, + { VREG, KF_VTYPE_VREG }, + { VSOCK, KF_VTYPE_VSOCK } }; #define NVTYPES (sizeof(vtypes_table) / sizeof(*vtypes_table)) unsigned int i; Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Fri Jul 31 11:32:32 2009 (r195990) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Fri Jul 31 11:49:26 2009 (r195991) @@ -518,17 +518,17 @@ kinfo_type2fst(int kftype) int kf_type; int fst_type; } kftypes2fst[] = { - { KF_TYPE_NONE, PS_FST_TYPE_NONE }, - { KF_TYPE_VNODE, PS_FST_TYPE_VNODE }, - { KF_TYPE_SOCKET, PS_FST_TYPE_SOCKET }, - { KF_TYPE_PIPE, PS_FST_TYPE_PIPE }, + { KF_TYPE_CRYPTO, PS_FST_TYPE_CRYPTO }, { KF_TYPE_FIFO, PS_FST_TYPE_FIFO }, { KF_TYPE_KQUEUE, PS_FST_TYPE_KQUEUE }, - { KF_TYPE_CRYPTO, PS_FST_TYPE_CRYPTO }, { KF_TYPE_MQUEUE, PS_FST_TYPE_MQUEUE }, - { KF_TYPE_SHM, PS_FST_TYPE_SHM }, - { KF_TYPE_SEM, PS_FST_TYPE_SEM }, + { KF_TYPE_NONE, PS_FST_TYPE_NONE }, + { KF_TYPE_PIPE, PS_FST_TYPE_PIPE }, { KF_TYPE_PTS, PS_FST_TYPE_PTS }, + { KF_TYPE_SEM, PS_FST_TYPE_SEM }, + { KF_TYPE_SHM, PS_FST_TYPE_SHM }, + { KF_TYPE_SOCKET, PS_FST_TYPE_SOCKET }, + { KF_TYPE_VNODE, PS_FST_TYPE_VNODE }, { KF_TYPE_UNKNOWN, PS_FST_TYPE_UNKNOWN } }; #define NKFTYPES (sizeof(kftypes2fst) / sizeof(*kftypes2fst)) @@ -552,21 +552,21 @@ kinfo_fflags2fst(int kfflags) int kf_flag; int fst_flag; } kfflags2fst[] = { - { KF_FLAG_READ, PS_FST_FFLAG_READ }, - { KF_FLAG_WRITE, PS_FST_FFLAG_WRITE }, - { KF_FLAG_NONBLOCK, PS_FST_FFLAG_NONBLOCK }, { KF_FLAG_APPEND, PS_FST_FFLAG_APPEND }, - { KF_FLAG_HASLOCK, PS_FST_FFLAG_HASLOCK }, { KF_FLAG_ASYNC, PS_FST_FFLAG_ASYNC }, - { KF_FLAG_FSYNC, PS_FST_FFLAG_SYNC }, + { KF_FLAG_CREAT, PS_FST_FFLAG_CREAT }, { KF_FLAG_DIRECT, PS_FST_FFLAG_DIRECT }, - { KF_FLAG_SHLOCK, PS_FST_FFLAG_SHLOCK }, + { KF_FLAG_EXCL, PS_FST_FFLAG_EXCL }, + { KF_FLAG_EXEC, PS_FST_FFLAG_EXEC }, { KF_FLAG_EXLOCK, PS_FST_FFLAG_EXLOCK }, + { KF_FLAG_FSYNC, PS_FST_FFLAG_SYNC }, + { KF_FLAG_HASLOCK, PS_FST_FFLAG_HASLOCK }, { KF_FLAG_NOFOLLOW, PS_FST_FFLAG_NOFOLLOW }, - { KF_FLAG_CREAT, PS_FST_FFLAG_CREAT }, + { KF_FLAG_NONBLOCK, PS_FST_FFLAG_NONBLOCK }, + { KF_FLAG_READ, PS_FST_FFLAG_READ }, + { KF_FLAG_SHLOCK, PS_FST_FFLAG_SHLOCK }, { KF_FLAG_TRUNC, PS_FST_FFLAG_TRUNC }, - { KF_FLAG_EXCL, PS_FST_FFLAG_EXCL }, - { KF_FLAG_EXEC, PS_FST_FFLAG_EXEC } + { KF_FLAG_WRITE, PS_FST_FFLAG_WRITE } }; #define NKFFLAGS (sizeof(kfflags2fst) / sizeof(*kfflags2fst)) unsigned int i; @@ -820,18 +820,18 @@ procstat_get_vnode_info_kvm(kvm_t *kd, s int (*handler)(kvm_t *kd, struct vnode *vp, struct vnstat *vn); } fstypes[] = { - FSTYPE(ufs), FSTYPE(devfs), - FSTYPE(nfs), - FSTYPE(msdosfs), FSTYPE(isofs), -#ifdef ZFS - FSTYPE(zfs), -#endif + FSTYPE(msdosfs), + FSTYPE(nfs), FSTYPE(ntfs), FSTYPE(nwfs), FSTYPE(smbfs), FSTYPE(udf), + FSTYPE(ufs), +#ifdef ZFS + FSTYPE(zfs), +#endif }; #define NTYPES (sizeof(fstypes) / sizeof(*fstypes)) struct vnode vnode; @@ -902,15 +902,15 @@ kinfo_vtype2fst(int kfvtype) int kf_vtype; int fst_vtype; } kfvtypes2fst[] = { - { KF_VTYPE_VNON, PS_FST_VTYPE_VNON }, - { KF_VTYPE_VREG, PS_FST_VTYPE_VREG }, - { KF_VTYPE_VDIR, PS_FST_VTYPE_VDIR }, + { KF_VTYPE_VBAD, PS_FST_VTYPE_VBAD }, { KF_VTYPE_VBLK, PS_FST_VTYPE_VBLK }, { KF_VTYPE_VCHR, PS_FST_VTYPE_VCHR }, - { KF_VTYPE_VLNK, PS_FST_VTYPE_VLNK }, - { KF_VTYPE_VSOCK, PS_FST_VTYPE_VSOCK }, + { KF_VTYPE_VDIR, PS_FST_VTYPE_VDIR }, { KF_VTYPE_VFIFO, PS_FST_VTYPE_VFIFO }, - { KF_VTYPE_VBAD, PS_FST_VTYPE_VBAD } + { KF_VTYPE_VLNK, PS_FST_VTYPE_VLNK }, + { KF_VTYPE_VNON, PS_FST_VTYPE_VNON }, + { KF_VTYPE_VREG, PS_FST_VTYPE_VREG }, + { KF_VTYPE_VSOCK, PS_FST_VTYPE_VSOCK } }; #define NKFVTYPES (sizeof(kfvtypes2fst) / sizeof(*kfvtypes2fst)) unsigned int i; @@ -1166,18 +1166,18 @@ to_filestat_flags(int flags) } fstflags[] = { { FREAD, PS_FST_FFLAG_READ }, { FWRITE, PS_FST_FFLAG_WRITE }, - { O_NONBLOCK, PS_FST_FFLAG_NONBLOCK }, { O_APPEND, PS_FST_FFLAG_APPEND }, - { O_SHLOCK, PS_FST_FFLAG_SHLOCK }, - { O_EXLOCK, PS_FST_FFLAG_EXLOCK }, { O_ASYNC, PS_FST_FFLAG_ASYNC }, - { O_SYNC, PS_FST_FFLAG_SYNC }, - { O_NOFOLLOW, PS_FST_FFLAG_NOFOLLOW }, { O_CREAT, PS_FST_FFLAG_CREAT }, - { O_TRUNC, PS_FST_FFLAG_TRUNC }, - { O_EXCL, PS_FST_FFLAG_EXCL }, { O_DIRECT, PS_FST_FFLAG_DIRECT }, - { O_EXEC, PS_FST_FFLAG_EXEC } + { O_EXCL, PS_FST_FFLAG_EXCL }, + { O_EXEC, PS_FST_FFLAG_EXEC }, + { O_EXLOCK, PS_FST_FFLAG_EXLOCK }, + { O_NOFOLLOW, PS_FST_FFLAG_NOFOLLOW }, + { O_NONBLOCK, PS_FST_FFLAG_NONBLOCK }, + { O_SHLOCK, PS_FST_FFLAG_SHLOCK }, + { O_SYNC, PS_FST_FFLAG_SYNC }, + { O_TRUNC, PS_FST_FFLAG_TRUNC } }; #define NFSTFLAGS (sizeof(fstflags) / sizeof(*fstflags)) int fst_flags; @@ -1200,15 +1200,15 @@ vntype2psfsttype(int type) int vtype; int fst_vtype; } vt2fst[] = { - { VNON, PS_FST_VTYPE_VNON }, - { VREG, PS_FST_VTYPE_VREG }, - { VDIR, PS_FST_VTYPE_VDIR }, + { VBAD, PS_FST_VTYPE_VBAD }, { VBLK, PS_FST_VTYPE_VBLK }, { VCHR, PS_FST_VTYPE_VCHR }, - { VLNK, PS_FST_VTYPE_VLNK }, - { VSOCK, PS_FST_VTYPE_VSOCK }, + { VDIR, PS_FST_VTYPE_VDIR }, { VFIFO, PS_FST_VTYPE_VFIFO }, - { VBAD, PS_FST_VTYPE_VBAD } + { VLNK, PS_FST_VTYPE_VLNK }, + { VNON, PS_FST_VTYPE_VNON }, + { VREG, PS_FST_VTYPE_VREG }, + { VSOCK, PS_FST_VTYPE_VSOCK } }; #define NVFTYPES (sizeof(vt2fst) / sizeof(*vt2fst)) unsigned int i, fst_type; From owner-svn-src-projects@FreeBSD.ORG Fri Jul 31 11:53:29 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E2B141065673; Fri, 31 Jul 2009 11:53:29 +0000 (UTC) (envelope-from ed@hoeg.nl) Received: from palm.hoeg.nl (mx0.hoeg.nl [IPv6:2001:7b8:613:100::211]) by mx1.freebsd.org (Postfix) with ESMTP id AA3CE8FC1D; Fri, 31 Jul 2009 11:53:29 +0000 (UTC) (envelope-from ed@hoeg.nl) Received: by palm.hoeg.nl (Postfix, from userid 1000) id A0C351CF05; Fri, 31 Jul 2009 13:53:28 +0200 (CEST) Date: Fri, 31 Jul 2009 13:53:28 +0200 From: Ed Schouten To: Stanislav Sedov Message-ID: <20090731115328.GL1292@hoeg.nl> References: <200907311132.n6VBWWbI067760@svn.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="GvznHscUikHnwW2p" Content-Disposition: inline In-Reply-To: <200907311132.n6VBWWbI067760@svn.freebsd.org> User-Agent: Mutt/1.5.20 (2009-06-14) Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r195990 - in projects/libprocstat: sys/kern sys/sys usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jul 2009 11:53:30 -0000 --GvznHscUikHnwW2p Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable * Stanislav Sedov wrote: > + if (p->p_pgrp !=3D NULL && p->p_pgrp->pg_session !=3D NULL) { ^^^^^^^ > + cttyvp =3D p->p_pgrp->pg_session.s_ttyvp; ^ Que? :-) --=20 Ed Schouten WWW: http://80386.nl/ --GvznHscUikHnwW2p Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEARECAAYFAkpy2zgACgkQ52SDGA2eCwVNLQCfYbtxF7z1Yi/jbfCM8d3rkdye hyEAn2BYSRtyLrTOEhLXWpcpxQ0EI+V7 =K8m1 -----END PGP SIGNATURE----- --GvznHscUikHnwW2p-- From owner-svn-src-projects@FreeBSD.ORG Fri Jul 31 12:30:23 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D4AA610656AA; Fri, 31 Jul 2009 12:30:23 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C0A6C8FC0C; Fri, 31 Jul 2009 12:30:23 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6VCUNfJ069083; Fri, 31 Jul 2009 12:30:23 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6VCUN3U069079; Fri, 31 Jul 2009 12:30:23 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907311230.n6VCUN3U069079@svn.freebsd.org> From: Stanislav Sedov Date: Fri, 31 Jul 2009 12:30:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195992 - in projects/libprocstat: sys/sys usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jul 2009 12:30:24 -0000 Author: stas Date: Fri Jul 31 12:30:23 2009 New Revision: 195992 URL: http://svn.freebsd.org/changeset/base/195992 Log: - Use platform-independent types universally. - Correct inconsistencies between kinfo and procstat types. - Use 64 bit integer type to store fileid to support future filesystems with 64 bit inode numbers. - Sort and pad structures accordingly. Modified: projects/libprocstat/sys/sys/user.h projects/libprocstat/usr.bin/fstat/fstat.c projects/libprocstat/usr.bin/fstat/fuser.c projects/libprocstat/usr.bin/fstat/libprocstat.c projects/libprocstat/usr.bin/fstat/libprocstat.h Modified: projects/libprocstat/sys/sys/user.h ============================================================================== --- projects/libprocstat/sys/sys/user.h Fri Jul 31 11:49:26 2009 (r195991) +++ projects/libprocstat/sys/sys/user.h Fri Jul 31 12:30:23 2009 (r195992) @@ -361,13 +361,13 @@ struct kinfo_file { /* Global file id. */ uint64_t kf_file_fileid; /* File size. */ - off_t kf_file_size; + uint64_t kf_file_size; /* Vnode filesystem id. */ - dev_t kf_file_fsid; + uint32_t kf_file_fsid; /* File device. */ - dev_t kf_file_rdev; + uint32_t kf_file_rdev; /* File mode. */ - mode_t kf_file_mode; + uint16_t kf_file_mode; /* Round to 64 bit alignment. */ uint16_t kf_file_pad0; uint32_t kf_file_pad1; @@ -380,7 +380,7 @@ struct kinfo_file { uint32_t kf_pipe_pad0[3]; } kf_pipe; struct { - dev_t kf_pts_dev; + uint32_t kf_pts_dev; /* Round to 64 bit alignment. */ uint32_t kf_pts_pad0[7]; } kf_pts; @@ -458,12 +458,11 @@ struct kinfo_vmentry { int kve_ref_count; /* VM obj ref count. */ int kve_shadow_count; /* VM obj shadow count. */ int kve_vn_type; /* Vnode type. */ - off_t kve_vn_size; /* File size. */ - dev_t kve_vn_rdev; /* Device id if device. */ - mode_t kve_vn_mode; /* File mode. */ + uint64_t kve_vn_size; /* File size. */ + uint32_t kve_vn_rdev; /* Device id if device. */ + uint16_t kve_vn_mode; /* File mode. */ uint16_t kve_status; /* Status flags. */ - int _kve_pad0; /* 64bit align next field */ - int _kve_ispare[11]; /* Space for more stuff. */ + int _kve_ispare[12]; /* Space for more stuff. */ /* Truncated before copyout in sysctl */ char kve_path[PATH_MAX]; /* Path to VM obj, if any. */ }; Modified: projects/libprocstat/usr.bin/fstat/fstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fstat.c Fri Jul 31 11:49:26 2009 (r195991) +++ projects/libprocstat/usr.bin/fstat/fstat.c Fri Jul 31 12:30:23 2009 (r195992) @@ -250,7 +250,7 @@ print_file_info(struct procstat *procsta for (d = devs; d != NULL; d = d->next) if (d->fsid == vn.vn_fsid) { fsmatch = 1; - if (d->ino == vn.vn_fileid) { + if ((unsigned)d->ino == vn.vn_fileid) { filename = d->name; break; } @@ -448,8 +448,8 @@ print_vnode_info(struct procstat *procst if (nflg) printf(" %2d,%-2d", major(vn.vn_fsid), minor(vn.vn_fsid)); - else if (vn.mntdir != NULL) - (void)printf(" %-8s", vn.mntdir); + else if (vn.vn_mntdir != NULL) + (void)printf(" %-8s", vn.vn_mntdir); /* * Print access mode. Modified: projects/libprocstat/usr.bin/fstat/fuser.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fuser.c Fri Jul 31 11:49:26 2009 (r195991) +++ projects/libprocstat/usr.bin/fstat/fuser.c Fri Jul 31 12:30:23 2009 (r195992) @@ -91,8 +91,8 @@ struct consumer { STAILQ_ENTRY(consumer) next; }; struct reqfile { - long fsid; - long fileid; + uint32_t fsid; + uint64_t fileid; const char *name; STAILQ_HEAD(, consumer) consumers; }; Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Fri Jul 31 11:49:26 2009 (r195991) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Fri Jul 31 12:30:23 2009 (r195992) @@ -877,7 +877,7 @@ procstat_get_vnode_info_kvm(kvm_t *kd, s snprintf(errbuf, _POSIX2_LINE_MAX, "?(%s)", tagstr); return (1); } - vn->mntdir = getmnton(kd, vnode.v_mount); + vn->vn_mntdir = getmnton(kd, vnode.v_mount); if ((vnode.v_type == VBLK || vnode.v_type == VCHR) && vnode.v_rdev != NULL){ vn->vn_dev = dev2udev(kd, vnode.v_rdev); @@ -930,14 +930,14 @@ procstat_get_vnode_info_sysctl(struct fi struct statfs stbuf; struct kinfo_file *kif; struct kinfo_vmentry *kve; - int vntype; - dev_t rdev; - off_t size; - mode_t mode; - int status; uint64_t fileid; - uint32_t fsid; + uint64_t size; char *name, *path; + uint32_t fsid; + uint16_t mode; + uint32_t rdev; + int vntype; + int status; assert(fst); assert(vn); @@ -971,7 +971,7 @@ procstat_get_vnode_info_sysctl(struct fi return (0); if (path && *path) { statfs(path, &stbuf); - vn->mntdir = strdup(stbuf.f_mntonname); + vn->vn_mntdir = strdup(stbuf.f_mntonname); } vn->vn_dev =rdev; if (vntype == KF_VTYPE_VBLK) { Modified: projects/libprocstat/usr.bin/fstat/libprocstat.h ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.h Fri Jul 31 11:49:26 2009 (r195991) +++ projects/libprocstat/usr.bin/fstat/libprocstat.h Fri Jul 31 12:30:23 2009 (r195992) @@ -103,39 +103,37 @@ struct filestat { STAILQ_ENTRY(filestat) next; }; struct vnstat { - dev_t vn_dev; - char vn_devname[SPECNAMELEN + 1]; - int vn_type; - long vn_fsid; - long vn_fileid; - mode_t vn_mode; - u_long vn_size; - char *mntdir; + uint64_t vn_fileid; + uint64_t vn_size; + char *vn_mntdir; + uint32_t vn_dev; + uint32_t vn_fsid; + int vn_type; + uint16_t vn_mode; + char vn_devname[SPECNAMELEN + 1]; }; struct ptsstat { - dev_t dev; - char devname[SPECNAMELEN + 1]; + uint32_t dev; + char devname[SPECNAMELEN + 1]; }; struct pipestat { + size_t buffer_cnt; uint64_t addr; uint64_t peer; - size_t buffer_cnt; }; struct sockstat { - int type; - int proto; - int dom_family; + uint64_t inp_ppcb; uint64_t so_addr; uint64_t so_pcb; - uint64_t inp_ppcb; uint64_t unp_conn; - int so_snd_sb_state; + int dom_family; + int proto; int so_rcv_sb_state; + int so_snd_sb_state; + int type; char dname[32]; }; -/* XXX: sort structs. */ - STAILQ_HEAD(filestat_list, filestat); void procstat_close(struct procstat *procstat); From owner-svn-src-projects@FreeBSD.ORG Fri Jul 31 12:43:02 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 00F571065672; Fri, 31 Jul 2009 12:43:02 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E42768FC3A; Fri, 31 Jul 2009 12:43:01 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6VCh16a069336; Fri, 31 Jul 2009 12:43:01 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6VCh1WE069335; Fri, 31 Jul 2009 12:43:01 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907311243.n6VCh1WE069335@svn.freebsd.org> From: Stanislav Sedov Date: Fri, 31 Jul 2009 12:43:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195993 - projects/libprocstat/sys/kern X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jul 2009 12:43:02 -0000 Author: stas Date: Fri Jul 31 12:43:01 2009 New Revision: 195993 URL: http://svn.freebsd.org/changeset/base/195993 Log: - Return va_mode as vnode mode number, not UFS-specific inode mode data. - Fix a typo in controlling tty retrieval function. [1] Spotted by: ed [1] Modified: projects/libprocstat/sys/kern/kern_descrip.c Modified: projects/libprocstat/sys/kern/kern_descrip.c ============================================================================== --- projects/libprocstat/sys/kern/kern_descrip.c Fri Jul 31 12:30:23 2009 (r195992) +++ projects/libprocstat/sys/kern/kern_descrip.c Fri Jul 31 12:43:01 2009 (r195993) @@ -3000,7 +3000,7 @@ sysctl_kern_proc_filedesc(SYSCTL_HANDLER /* Controlling tty. */ cttyvp = NULL; if (p->p_pgrp != NULL && p->p_pgrp->pg_session != NULL) { - cttyvp = p->p_pgrp->pg_session.s_ttyvp; + cttyvp = p->p_pgrp->pg_session->s_ttyvp; vref(cttyvp); } fdp = fdhold(p); @@ -3201,7 +3201,7 @@ fill_vnode_info(struct vnode *vp, struct return (error); kif->kf_un.kf_file.kf_file_fsid = va.va_fsid; kif->kf_un.kf_file.kf_file_fileid = va.va_fileid; - kif->kf_un.kf_file.kf_file_mode = MAKEIMODE(va.va_type, va.va_mode); + kif->kf_un.kf_file.kf_file_mode = va.va_mode; kif->kf_un.kf_file.kf_file_size = va.va_size; kif->kf_un.kf_file.kf_file_rdev = va.va_rdev; return (0); From owner-svn-src-projects@FreeBSD.ORG Fri Jul 31 12:52:33 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5A2FF106566B; Fri, 31 Jul 2009 12:52:33 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 48BB58FC08; Fri, 31 Jul 2009 12:52:33 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6VCqXP0069568; Fri, 31 Jul 2009 12:52:33 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6VCqXWf069563; Fri, 31 Jul 2009 12:52:33 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907311252.n6VCqXWf069563@svn.freebsd.org> From: Stanislav Sedov Date: Fri, 31 Jul 2009 12:52:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195994 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jul 2009 12:52:33 -0000 Author: stas Date: Fri Jul 31 12:52:32 2009 New Revision: 195994 URL: http://svn.freebsd.org/changeset/base/195994 Log: - Do not install fstat/fuser with increased privileges. In the discussion with rwatson it was decided that we might not want to expose much detail about process the user has no relation to. - Do not emit warning in case of insufficient permissions to access the process file descriptors data. Modified: projects/libprocstat/usr.bin/fstat/Makefile projects/libprocstat/usr.bin/fstat/fstat.c projects/libprocstat/usr.bin/fstat/fuser.c projects/libprocstat/usr.bin/fstat/libprocstat.c Modified: projects/libprocstat/usr.bin/fstat/Makefile ============================================================================== --- projects/libprocstat/usr.bin/fstat/Makefile Fri Jul 31 12:43:01 2009 (r195993) +++ projects/libprocstat/usr.bin/fstat/Makefile Fri Jul 31 12:52:32 2009 (r195994) @@ -9,8 +9,6 @@ SRCS= cd9660.c common_kvm.c fstat.c fuse LINKS= ${BINDIR}/fstat ${BINDIR}/fuser DPADD= ${LIBKVM} LDADD= -lkvm -lutil -BINGRP= kmem -BINMODE=2555 WARNS?= 6 MAN1= fuser.1 fstat.1 Modified: projects/libprocstat/usr.bin/fstat/fstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fstat.c Fri Jul 31 12:43:01 2009 (r195993) +++ projects/libprocstat/usr.bin/fstat/fstat.c Fri Jul 31 12:52:32 2009 (r195994) @@ -165,19 +165,12 @@ do_fstat(int argc, char **argv) checkfile = 1; } - /* - * Discard setgid privileges if not the running kernel so that bad - * guys can't print interesting stuff from kernel memory. - */ - if (nlistf != NULL || memf != NULL) - setgid(getgid()); procstat = procstat_open(nlistf, memf); if (procstat == NULL) errx(1, "procstat_open()"); p = procstat_getprocs(procstat, what, arg, &cnt); if (p == NULL) errx(1, "procstat_getprocs()"); - setgid(getgid()); /* * Print header. Modified: projects/libprocstat/usr.bin/fstat/fuser.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fuser.c Fri Jul 31 12:43:01 2009 (r195993) +++ projects/libprocstat/usr.bin/fstat/fuser.c Fri Jul 31 12:52:32 2009 (r195994) @@ -239,19 +239,12 @@ do_fuser(int argc, char *argv[]) if (nfiles == 0) errx(EX_IOERR, "files not accessible"); - /* - * Discard setgid privileges if not the running kernel so that bad - * guys can't print interesting stuff from kernel memory. - */ - if (nlistf != NULL || memf != NULL) - setgid(getgid()); procstat = procstat_open(nlistf, memf); if (procstat == NULL) errx(1, "procstat_open()"); p = procstat_getprocs(procstat, KERN_PROC_PROC, 0, &cnt); if (p == NULL) errx(1, "procstat_getprocs()"); - setgid(getgid()); /* * Walk through process table and look for matching files. Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Fri Jul 31 12:43:01 2009 (r195993) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Fri Jul 31 12:52:32 2009 (r195994) @@ -191,7 +191,7 @@ procstat_getprocs(struct procstat *procs name[2] = what; name[3] = arg; error = sysctl(name, 4, NULL, &len, NULL, 0); - if (error < 0) { + if (error < 0 && errno != EPERM) { warn("sysctl(kern.proc)"); goto fail; } @@ -205,7 +205,7 @@ procstat_getprocs(struct procstat *procs goto fail; } error = sysctl(name, 4, p, &len, NULL, 0); - if (error < 0) { + if (error < 0 && errno != EPERM) { warn("sysctl(kern.proc)"); goto fail; } From owner-svn-src-projects@FreeBSD.ORG Fri Jul 31 13:51:26 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EE374106568F; Fri, 31 Jul 2009 13:51:26 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C2F898FC23; Fri, 31 Jul 2009 13:51:26 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6VDpQes070908; Fri, 31 Jul 2009 13:51:26 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6VDpQvK070906; Fri, 31 Jul 2009 13:51:26 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907311351.n6VDpQvK070906@svn.freebsd.org> From: Stanislav Sedov Date: Fri, 31 Jul 2009 13:51:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195996 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jul 2009 13:51:27 -0000 Author: stas Date: Fri Jul 31 13:51:26 2009 New Revision: 195996 URL: http://svn.freebsd.org/changeset/base/195996 Log: - Manpage improvements. Modified: projects/libprocstat/usr.bin/fstat/fuser.1 Modified: projects/libprocstat/usr.bin/fstat/fuser.1 ============================================================================== --- projects/libprocstat/usr.bin/fstat/fuser.1 Fri Jul 31 13:40:06 2009 (r195995) +++ projects/libprocstat/usr.bin/fstat/fuser.1 Fri Jul 31 13:51:26 2009 (r195996) @@ -1,4 +1,4 @@ -.\" Copyright (c) 2005 Stanislav Sedov +.\" Copyright (c) 2005-2009 Stanislav Sedov .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without @@ -22,9 +22,9 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $Id: fuser.1,v 1.3 2005/08/29 12:07:19 stas Exp $ +.\" $FreeBSD$ .\" -.Dd August 24, 2005 +.Dd July 31, 2009 .Dt FUSER 1 .Os .Sh NAME @@ -40,18 +40,19 @@ .Sh DESCRIPTION The .Nm -utility shall write to stdout the process IDs of processes that have one or -more named files open. For block and character special devices, all processes -using files on that device are listed. +utility writes to stdout the PIDs of processes that have one or +more named files open. +For block and character special devices, all processes using files +on that device are listed. A file is considered open by a process if it was explicitly opened, is the working directory, root directory, jail root directory, -active executable text, kernel trace file for that process or controlling tty +active executable text, kernel trace file or the controlling terminal of the process. If .Fl m option is specified, the .Nm -utility will search through mmapped files also. +utility will also look trhough mmapped files. .Pp The following options are available: .Bl -tag -width indent @@ -63,9 +64,9 @@ The report must be only for named files. Send signal to reported processes .Pq SIGKILL by default . .It Fl m -Report on mmapped files too. +Search through mmapped files too. .It Fl u -Write the user name, associated with each process, to stdout. +Write the user name associated with each process to stdout. .It Fl M Extract values associated with the name list from the specified core instead of the default @@ -134,9 +135,14 @@ Since .Nm takes a snapshot of the system, it is only correct for a very short period of time. -Currently, not all filesystems are supported. +When working via +.Xr kvm 3 +interface the report will be limited to filesystems the +.Nm +utility knows about (currently only cd9660, devfs, nfs, ntfs, nwfs, udf, +ufs and zfs). .Sh AUTHORS The .Nm -utility and this manual page was contributed by -.An Stanislav Sedov Aq ssedov@mbsd.msk.ru . +utility and this manual page was written by +.An Stanislav Sedov Aq stas@FreeBSD.org . From owner-svn-src-projects@FreeBSD.ORG Fri Jul 31 14:19:57 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 80F04106566B; Fri, 31 Jul 2009 14:19:57 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6FD2B8FC08; Fri, 31 Jul 2009 14:19:57 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6VEJvun071598; Fri, 31 Jul 2009 14:19:57 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6VEJvxs071596; Fri, 31 Jul 2009 14:19:57 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907311419.n6VEJvxs071596@svn.freebsd.org> From: Stanislav Sedov Date: Fri, 31 Jul 2009 14:19:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195997 - projects/libprocstat/sys/kern X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jul 2009 14:19:57 -0000 Author: stas Date: Fri Jul 31 14:19:57 2009 New Revision: 195997 URL: http://svn.freebsd.org/changeset/base/195997 Log: - Revert my previous mode-related change. It appears that my reading was incorrect. Modified: projects/libprocstat/sys/kern/kern_descrip.c Modified: projects/libprocstat/sys/kern/kern_descrip.c ============================================================================== --- projects/libprocstat/sys/kern/kern_descrip.c Fri Jul 31 13:51:26 2009 (r195996) +++ projects/libprocstat/sys/kern/kern_descrip.c Fri Jul 31 14:19:57 2009 (r195997) @@ -3201,7 +3201,7 @@ fill_vnode_info(struct vnode *vp, struct return (error); kif->kf_un.kf_file.kf_file_fsid = va.va_fsid; kif->kf_un.kf_file.kf_file_fileid = va.va_fileid; - kif->kf_un.kf_file.kf_file_mode = va.va_mode; + kif->kf_un.kf_file.kf_file_mode = MAKEIMODE(va.va_type, va.va_mode); kif->kf_un.kf_file.kf_file_size = va.va_size; kif->kf_un.kf_file.kf_file_rdev = va.va_rdev; return (0); From owner-svn-src-projects@FreeBSD.ORG Fri Jul 31 14:43:05 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CDD03106564A; Fri, 31 Jul 2009 14:43:05 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 863868FC17; Fri, 31 Jul 2009 14:43:05 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6VEh5E2072184; Fri, 31 Jul 2009 14:43:05 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6VEh57Y072181; Fri, 31 Jul 2009 14:43:05 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907311443.n6VEh57Y072181@svn.freebsd.org> From: Nathan Whitehorn Date: Fri, 31 Jul 2009 14:43:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195999 - projects/ppc64/sys/powerpc/aim X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jul 2009 14:43:06 -0000 Author: nwhitehorn Date: Fri Jul 31 14:43:05 2009 New Revision: 195999 URL: http://svn.freebsd.org/changeset/base/195999 Log: Make copyin()/copyout() work. Modified: projects/ppc64/sys/powerpc/aim/copyinout.c projects/ppc64/sys/powerpc/aim/trap.c Modified: projects/ppc64/sys/powerpc/aim/copyinout.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/copyinout.c Fri Jul 31 14:30:06 2009 (r195998) +++ projects/ppc64/sys/powerpc/aim/copyinout.c Fri Jul 31 14:43:05 2009 (r195999) @@ -279,7 +279,7 @@ suword32(void *addr, int word) return (-1); } - set_user_sr(pm->pm_sr[(uintptr_t)addr >> ADDR_SR_SHFT]); + set_user_sr(va_to_vsid(pm,addr)); *p = word; Modified: projects/ppc64/sys/powerpc/aim/trap.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap.c Fri Jul 31 14:30:06 2009 (r195998) +++ projects/ppc64/sys/powerpc/aim/trap.c Fri Jul 31 14:43:05 2009 (r195999) @@ -522,6 +522,12 @@ trap_pfault(struct trapframe *frame, int __asm ("slbmfev %0, %1" : "=r"(user_sr) : "r"(USER_SR)); + + user_sr >>= 12; + + /* XXX - limit to 46 byte EA space */ + user_sr &= (1UL << 17) - 1UL; + #else __asm ("mfsr %0, %1" : "=r"(user_sr) From owner-svn-src-projects@FreeBSD.ORG Sat Aug 1 07:42:40 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 08CE9106564A; Sat, 1 Aug 2009 07:42:40 +0000 (UTC) (envelope-from jb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EBF898FC08; Sat, 1 Aug 2009 07:42:39 +0000 (UTC) (envelope-from jb@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n717gdhW095284; Sat, 1 Aug 2009 07:42:39 GMT (envelope-from jb@svn.freebsd.org) Received: (from jb@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n717gdpb095282; Sat, 1 Aug 2009 07:42:39 GMT (envelope-from jb@svn.freebsd.org) Message-Id: <200908010742.n717gdpb095282@svn.freebsd.org> From: John Birrell Date: Sat, 1 Aug 2009 07:42:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196011 - projects/jbuild/usr.bin/jbuild/filemon X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Aug 2009 07:42:40 -0000 Author: jb Date: Sat Aug 1 07:42:39 2009 New Revision: 196011 URL: http://svn.freebsd.org/changeset/base/196011 Log: Keep filemon structs in a free list and reuse them. There is currently a race condition that allows a filemon struct to be freed when the filemon fd is closed, but while there is still a syscall active via the fd. Modified: projects/jbuild/usr.bin/jbuild/filemon/filemon.c Modified: projects/jbuild/usr.bin/jbuild/filemon/filemon.c ============================================================================== --- projects/jbuild/usr.bin/jbuild/filemon/filemon.c Sat Aug 1 07:09:50 2009 (r196010) +++ projects/jbuild/usr.bin/jbuild/filemon/filemon.c Sat Aug 1 07:42:39 2009 (r196011) @@ -69,6 +69,7 @@ struct filemon { }; static TAILQ_HEAD(, filemon) filemons_inuse = TAILQ_HEAD_INITIALIZER(filemons_inuse); +static TAILQ_HEAD(, filemon) filemons_free = TAILQ_HEAD_INITIALIZER(filemons_free); static int n_readers = 0; static struct mtx access_mtx; static struct cv access_cv; @@ -122,22 +123,32 @@ filemon_dtr(void *data) struct filemon *filemon = data; if (filemon != NULL) { + struct file *fp = filemon->fp; + /* Get exclusive write access. */ filemon_lock_write(); /* Remove from the in-use list. */ TAILQ_REMOVE(&filemons_inuse, filemon, link); + filemon->fp = NULL; + filemon->pid = -1; + + /* Add to the free list. */ + TAILQ_INSERT_TAIL(&filemons_free, filemon, link); + /* Give up write access. */ filemon_unlock_write(); - if (filemon->fp != NULL) - fdrop(filemon->fp, curthread); + if (fp != NULL) + fdrop(fp, curthread); +#ifdef DOODAD mtx_destroy(&filemon->mtx); cv_destroy(&filemon->cv); free(filemon, M_FILEMON); +#endif } } @@ -181,13 +192,25 @@ filemon_open(struct cdev *dev, int oflag { struct filemon *filemon; - filemon = malloc(sizeof(struct filemon), M_FILEMON, M_WAITOK | M_ZERO); + /* Get exclusive write access. */ + filemon_lock_write(); - filemon->pid = curproc->p_pid; - filemon->fp = NULL; + if ((filemon = TAILQ_FIRST(&filemons_free)) != NULL) + TAILQ_REMOVE(&filemons_free, filemon, link); - mtx_init(&filemon->mtx, "filemon", "filemon", MTX_DEF); - cv_init(&filemon->cv, "filemon"); + /* Give up write access. */ + filemon_unlock_write(); + + if (filemon == NULL) { + filemon = malloc(sizeof(struct filemon), M_FILEMON, M_WAITOK | M_ZERO); + + filemon->fp = NULL; + + mtx_init(&filemon->mtx, "filemon", "filemon", MTX_DEF); + cv_init(&filemon->cv, "filemon"); + } + + filemon->pid = curproc->p_pid; #if __FreeBSD_version < 701000 dev->si_drv1 = filemon; From owner-svn-src-projects@FreeBSD.ORG Sat Aug 1 09:54:52 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C20271065676; Sat, 1 Aug 2009 09:54:52 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B028A8FC14; Sat, 1 Aug 2009 09:54:52 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n719sqjh098041; Sat, 1 Aug 2009 09:54:52 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n719sqIj098039; Sat, 1 Aug 2009 09:54:52 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200908010954.n719sqIj098039@svn.freebsd.org> From: Stanislav Sedov Date: Sat, 1 Aug 2009 09:54:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196012 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Aug 2009 09:54:53 -0000 Author: stas Date: Sat Aug 1 09:54:52 2009 New Revision: 196012 URL: http://svn.freebsd.org/changeset/base/196012 Log: - Fix a typo. Submitted by: Ben Kaduk Modified: projects/libprocstat/usr.bin/fstat/fuser.1 Modified: projects/libprocstat/usr.bin/fstat/fuser.1 ============================================================================== --- projects/libprocstat/usr.bin/fstat/fuser.1 Sat Aug 1 07:42:39 2009 (r196011) +++ projects/libprocstat/usr.bin/fstat/fuser.1 Sat Aug 1 09:54:52 2009 (r196012) @@ -52,7 +52,7 @@ If .Fl m option is specified, the .Nm -utility will also look trhough mmapped files. +utility will also look through mmapped files. .Pp The following options are available: .Bl -tag -width indent From owner-svn-src-projects@FreeBSD.ORG Sat Aug 1 12:50:08 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 45C951065678; Sat, 1 Aug 2009 12:50:08 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 33BE58FC1A; Sat, 1 Aug 2009 12:50:08 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n71Co8xJ081336; Sat, 1 Aug 2009 12:50:08 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n71Co8Nm081334; Sat, 1 Aug 2009 12:50:08 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200908011250.n71Co8Nm081334@svn.freebsd.org> From: Stanislav Sedov Date: Sat, 1 Aug 2009 12:50:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196014 - projects/libprocstat/sys/kern X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Aug 2009 12:50:08 -0000 Author: stas Date: Sat Aug 1 12:50:07 2009 New Revision: 196014 URL: http://svn.freebsd.org/changeset/base/196014 Log: - Do not try to process the NULL controlling tty vnode. Modified: projects/libprocstat/sys/kern/kern_descrip.c Modified: projects/libprocstat/sys/kern/kern_descrip.c ============================================================================== --- projects/libprocstat/sys/kern/kern_descrip.c Sat Aug 1 11:40:46 2009 (r196013) +++ projects/libprocstat/sys/kern/kern_descrip.c Sat Aug 1 12:50:07 2009 (r196014) @@ -3001,7 +3001,8 @@ sysctl_kern_proc_filedesc(SYSCTL_HANDLER cttyvp = NULL; if (p->p_pgrp != NULL && p->p_pgrp->pg_session != NULL) { cttyvp = p->p_pgrp->pg_session->s_ttyvp; - vref(cttyvp); + if (cttyvp != NULL) + vref(cttyvp); } fdp = fdhold(p); PROC_UNLOCK(p); From owner-svn-src-projects@FreeBSD.ORG Sat Aug 1 12:51:17 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 17A7C1065672; Sat, 1 Aug 2009 12:51:17 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 051208FC0A; Sat, 1 Aug 2009 12:51:17 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n71CpGs9081406; Sat, 1 Aug 2009 12:51:16 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n71CpGRZ081401; Sat, 1 Aug 2009 12:51:16 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200908011251.n71CpGRZ081401@svn.freebsd.org> From: Stanislav Sedov Date: Sat, 1 Aug 2009 12:51:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196015 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Aug 2009 12:51:17 -0000 Author: stas Date: Sat Aug 1 12:51:16 2009 New Revision: 196015 URL: http://svn.freebsd.org/changeset/base/196015 Log: - Fix resource deallocation routines. Modified: projects/libprocstat/usr.bin/fstat/fstat.c projects/libprocstat/usr.bin/fstat/fuser.c projects/libprocstat/usr.bin/fstat/libprocstat.c projects/libprocstat/usr.bin/fstat/libprocstat.h Modified: projects/libprocstat/usr.bin/fstat/fstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fstat.c Sat Aug 1 12:50:07 2009 (r196014) +++ projects/libprocstat/usr.bin/fstat/fstat.c Sat Aug 1 12:51:16 2009 (r196015) @@ -71,8 +71,8 @@ int vflg; /* be verbose */ typedef struct devs { struct devs *next; - long fsid; - long ino; + uint32_t fsid; + uint64_t ino; const char *name; } DEVS; @@ -194,7 +194,6 @@ do_fstat(int argc, char **argv) continue; dofiles(procstat, &p[i]); } - free(p); procstat_freeprocs(procstat, p); procstat_close(procstat); return (0); @@ -452,7 +451,7 @@ print_vnode_info(struct procstat *procst else { strmode(vn.vn_mode, mode); } - (void)printf(" %6ld %10s", vn.vn_fileid, mode); + (void)printf(" %6lld %10s", vn.vn_fileid, mode); if (vn.vn_type == PS_FST_VTYPE_VBLK || vn.vn_type == PS_FST_VTYPE_VCHR) { if (nflg || !*vn.vn_devname) @@ -461,7 +460,7 @@ print_vnode_info(struct procstat *procst printf(" %6s", vn.vn_devname); } } else - printf(" %6lu", vn.vn_size); + printf(" %6llu", vn.vn_size); print_access_flags(fst->fs_fflags); } Modified: projects/libprocstat/usr.bin/fstat/fuser.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fuser.c Sat Aug 1 12:50:07 2009 (r196014) +++ projects/libprocstat/usr.bin/fstat/fuser.c Sat Aug 1 12:51:16 2009 (r196015) @@ -162,7 +162,7 @@ int do_fuser(int argc, char *argv[]) { struct consumer *consumer; - struct kinfo_proc *p; + struct kinfo_proc *p, *procs; struct procstat *procstat; struct reqfile *reqfiles; char *ep, *nlistf, *memf; @@ -242,13 +242,14 @@ do_fuser(int argc, char *argv[]) procstat = procstat_open(nlistf, memf); if (procstat == NULL) errx(1, "procstat_open()"); - p = procstat_getprocs(procstat, KERN_PROC_PROC, 0, &cnt); - if (p == NULL) + procs = procstat_getprocs(procstat, KERN_PROC_PROC, 0, &cnt); + if (procs == NULL) errx(1, "procstat_getprocs()"); /* * Walk through process table and look for matching files. */ + p = procs; while(cnt--) if (p->ki_stat != SZOMB) dofiles(procstat, p++, reqfiles, nfiles); @@ -271,7 +272,7 @@ do_fuser(int argc, char *argv[]) } (void)fprintf(stderr, "\n"); } - procstat_freeprocs(procstat, p); + procstat_freeprocs(procstat, procs); procstat_close(procstat); free(reqfiles); return (0); Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Sat Aug 1 12:50:07 2009 (r196014) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Sat Aug 1 12:51:16 2009 (r196015) @@ -101,10 +101,10 @@ int statfs(const char *, struct stat #define PROCSTAT_SYSCTL 2 static char *getmnton(kvm_t *kd, struct mount *m); -static struct filestat_list *procstat_getfiles_kvm(kvm_t *kd, - struct kinfo_proc *kp, int mmapped); +static struct filestat_list *procstat_getfiles_kvm( + struct procstat *procstat, struct kinfo_proc *kp, int mmapped); static struct filestat_list *procstat_getfiles_sysctl( - struct kinfo_proc *kp, int mmapped); + struct procstat *procstat, struct kinfo_proc *kp, int mmapped); static int procstat_get_pipe_info_sysctl(struct filestat *fst, struct pipestat *pipe, char *errbuf); static int procstat_get_pipe_info_kvm(kvm_t *kd, struct filestat *fst, @@ -239,9 +239,9 @@ procstat_getfiles(struct procstat *procs { if (procstat->type == PROCSTAT_SYSCTL) - return (procstat_getfiles_sysctl(kp, mmapped)); + return (procstat_getfiles_sysctl(procstat, kp, mmapped)); else if (procstat->type == PROCSTAT_KVM) - return (procstat_getfiles_kvm(procstat->kd, kp, mmapped)); + return (procstat_getfiles_kvm(procstat, kp, mmapped)); else return (NULL); } @@ -251,13 +251,13 @@ procstat_freefiles(struct procstat *proc { struct filestat *fst, *tmp; - STAILQ_FOREACH_SAFE(fst, head, next, tmp) { - if (procstat->type == PROCSTAT_SYSCTL && - fst->fs_typedep != NULL) - free(fst->fs_typedep); + STAILQ_FOREACH_SAFE(fst, head, next, tmp) free(fst); - } free(head); + if (procstat->vmentries != NULL) + free (procstat->vmentries); + if (procstat->files != NULL) + free (procstat->files); } static struct filestat * @@ -314,26 +314,30 @@ getctty(kvm_t *kd, struct kinfo_proc *kp } static struct filestat_list * -procstat_getfiles_kvm(kvm_t *kd, struct kinfo_proc *kp, int mmapped) +procstat_getfiles_kvm(struct procstat *procstat, struct kinfo_proc *kp, int mmapped) { struct file file; struct filedesc filed; struct vm_map_entry vmentry; struct vm_object object; struct vmspace vmspace; - struct vnode *vp; vm_map_entry_t entryp; vm_map_t map; vm_object_t objp; + struct vnode *vp; struct file **ofiles; struct filestat *entry; struct filestat_list *head; + kvm_t *kd; void *data; int i, fflags; int prot, type; unsigned int nfiles; - assert(kd); + assert(procstat); + kd = procstat->kd; + if (kd == NULL) + return (NULL); if (kp->ki_fd == NULL) return (NULL); if (!kvm_read_all(kd, (unsigned long)kp->ki_fd, &filed, @@ -601,7 +605,7 @@ kinfo_uflags2fst(int fd) } static struct filestat_list * -procstat_getfiles_sysctl(struct kinfo_proc *kp, int mmapped) +procstat_getfiles_sysctl(struct procstat *procstat, struct kinfo_proc *kp, int mmapped) { struct kinfo_file *kif, *files; struct kinfo_vmentry *kve, *vmentries; @@ -619,6 +623,7 @@ procstat_getfiles_sysctl(struct kinfo_pr warn("kinfo_getfile()"); return (NULL); } + procstat->files = files; /* * Allocate list head. @@ -644,6 +649,7 @@ procstat_getfiles_sysctl(struct kinfo_pr } if (mmapped != 0) { vmentries = kinfo_getvmmap(kp->ki_pid, &cnt); + procstat->vmentries = vmentries; if (vmentries == NULL || cnt == 0) goto fail; for (i = 0; i < cnt; i++) { Modified: projects/libprocstat/usr.bin/fstat/libprocstat.h ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.h Sat Aug 1 12:50:07 2009 (r196014) +++ projects/libprocstat/usr.bin/fstat/libprocstat.h Sat Aug 1 12:51:16 2009 (r196015) @@ -90,8 +90,10 @@ #define PS_FST_FFLAG_HASLOCK 0x4000 struct procstat { - int type; - kvm_t *kd; + int type; + kvm_t *kd; + void *vmentries; + void *files; }; struct filestat { int fs_type; /* Descriptor type. */ From owner-svn-src-projects@FreeBSD.ORG Sat Aug 1 13:58:49 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 44330106566C; Sat, 1 Aug 2009 13:58:48 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 44E938FC20; Sat, 1 Aug 2009 13:58:48 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n71DwkFo082983; Sat, 1 Aug 2009 13:58:46 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n71DwksK082980; Sat, 1 Aug 2009 13:58:46 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200908011358.n71DwksK082980@svn.freebsd.org> From: Stanislav Sedov Date: Sat, 1 Aug 2009 13:58:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196016 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Aug 2009 13:58:49 -0000 Author: stas Date: Sat Aug 1 13:58:46 2009 New Revision: 196016 URL: http://svn.freebsd.org/changeset/base/196016 Log: - Improve error handling. - Handly ctty case in fstat. Modified: projects/libprocstat/usr.bin/fstat/fstat.c projects/libprocstat/usr.bin/fstat/libprocstat.c Modified: projects/libprocstat/usr.bin/fstat/fstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fstat.c Sat Aug 1 12:51:16 2009 (r196015) +++ projects/libprocstat/usr.bin/fstat/fstat.c Sat Aug 1 13:58:46 2009 (r196016) @@ -267,6 +267,8 @@ print_file_info(struct procstat *procsta printf(" mmap"); else if (fst->fs_uflags & PS_FST_UFLAG_JAIL) printf(" jail"); + else if (fst->fs_uflags & PS_FST_UFLAG_CTTY) + printf(" ctty"); else printf(" %4d", fst->fs_fd); Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Sat Aug 1 12:51:16 2009 (r196015) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Sat Aug 1 13:58:46 2009 (r196016) @@ -232,6 +232,7 @@ procstat_freeprocs(struct procstat *proc if (p != NULL) free(p); + p = NULL; } struct filestat_list * @@ -254,10 +255,14 @@ procstat_freefiles(struct procstat *proc STAILQ_FOREACH_SAFE(fst, head, next, tmp) free(fst); free(head); - if (procstat->vmentries != NULL) + if (procstat->vmentries != NULL) { free (procstat->vmentries); - if (procstat->files != NULL) + procstat->vmentries = NULL; + } + if (procstat->files != NULL) { free (procstat->files); + procstat->files = NULL; + } } static struct filestat * @@ -931,7 +936,7 @@ kinfo_vtype2fst(int kfvtype) static int procstat_get_vnode_info_sysctl(struct filestat *fst, struct vnstat *vn, - char *errbuf __unused) + char *errbuf) { struct statfs stbuf; struct kinfo_file *kif; @@ -972,9 +977,12 @@ procstat_get_vnode_info_sysctl(struct fi status = kif->kf_status; } vn->vn_type = vntype; - if (vntype == PS_FST_VTYPE_VNON || vntype == PS_FST_VTYPE_VBAD || - (status & KF_ATTR_VALID) == 0) + if (vntype == PS_FST_VTYPE_VNON || vntype == PS_FST_VTYPE_VBAD) return (0); + if ((status & KF_ATTR_VALID) == 0) { + snprintf(errbuf, _POSIX2_LINE_MAX, "? (no info available)"); + return (1); + } if (path && *path) { statfs(path, &stbuf); vn->vn_mntdir = strdup(stbuf.f_mntonname); From owner-svn-src-projects@FreeBSD.ORG Sat Aug 1 14:06:56 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B4AD4106566B; Sat, 1 Aug 2009 14:06:56 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A2C288FC12; Sat, 1 Aug 2009 14:06:56 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n71E6upm083224; Sat, 1 Aug 2009 14:06:56 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n71E6uE8083221; Sat, 1 Aug 2009 14:06:56 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200908011406.n71E6uE8083221@svn.freebsd.org> From: Stanislav Sedov Date: Sat, 1 Aug 2009 14:06:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196017 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Aug 2009 14:06:57 -0000 Author: stas Date: Sat Aug 1 14:06:56 2009 New Revision: 196017 URL: http://svn.freebsd.org/changeset/base/196017 Log: - Do not try to pass NULL pointer as the error buf. Modified: projects/libprocstat/usr.bin/fstat/fstat.c projects/libprocstat/usr.bin/fstat/fuser.c Modified: projects/libprocstat/usr.bin/fstat/fstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fstat.c Sat Aug 1 13:58:46 2009 (r196016) +++ projects/libprocstat/usr.bin/fstat/fstat.c Sat Aug 1 14:06:56 2009 (r196017) @@ -229,13 +229,14 @@ print_file_info(struct procstat *procsta DEVS *d; const char *filename; int error, fsmatch = 0; + char errbuf[_POSIX2_LINE_MAX]; filename = NULL; if (checkfile != 0) { if (fst->fs_type != PS_FST_TYPE_VNODE && fst->fs_type != PS_FST_TYPE_FIFO) return; - error = procstat_get_vnode_info(procstat, fst, &vn, NULL); + error = procstat_get_vnode_info(procstat, fst, &vn, errbuf); if (error != 0) return; Modified: projects/libprocstat/usr.bin/fstat/fuser.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fuser.c Sat Aug 1 13:58:46 2009 (r196016) +++ projects/libprocstat/usr.bin/fstat/fuser.c Sat Aug 1 14:06:56 2009 (r196017) @@ -288,6 +288,7 @@ dofiles(struct procstat *procstat, struc struct filestat_list *head; int error, match; unsigned int i; + char errbuf[_POSIX2_LINE_MAX]; head = procstat_getfiles(procstat, kp, flags & MFLAG); if (head == NULL) @@ -295,7 +296,7 @@ dofiles(struct procstat *procstat, struc STAILQ_FOREACH(fst, head, next) { if (fst->fs_type != PS_FST_TYPE_VNODE) continue; - error = procstat_get_vnode_info(procstat, fst, &vn, NULL); + error = procstat_get_vnode_info(procstat, fst, &vn, errbuf); if (error != 0) continue; for (i = 0; i < nfiles; i++) { From owner-svn-src-projects@FreeBSD.ORG Sat Aug 1 15:40:22 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 93605106566B; Sat, 1 Aug 2009 15:40:22 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 809A18FC16; Sat, 1 Aug 2009 15:40:22 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n71FeMJ9085499; Sat, 1 Aug 2009 15:40:22 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n71FeMcu085497; Sat, 1 Aug 2009 15:40:22 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200908011540.n71FeMcu085497@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 1 Aug 2009 15:40:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196018 - projects/ppc64/sys/powerpc/powerpc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Aug 2009 15:40:22 -0000 Author: nwhitehorn Date: Sat Aug 1 15:40:22 2009 New Revision: 196018 URL: http://svn.freebsd.org/changeset/base/196018 Log: Update setjmp.S to handle both the 32-bit and 64-bit case. Modified: projects/ppc64/sys/powerpc/powerpc/setjmp.S Modified: projects/ppc64/sys/powerpc/powerpc/setjmp.S ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/setjmp.S Sat Aug 1 14:06:56 2009 (r196017) +++ projects/ppc64/sys/powerpc/powerpc/setjmp.S Sat Aug 1 15:40:22 2009 (r196018) @@ -6,61 +6,73 @@ #include -#define JMP_r1 0x04 -#define JMP_r14 0x08 -#define JMP_r15 0x0c -#define JMP_r16 0x10 -#define JMP_r17 0x14 -#define JMP_r18 0x18 -#define JMP_r19 0x1c -#define JMP_r20 0x20 -#define JMP_r21 0x24 -#define JMP_r22 0x28 -#define JMP_r23 0x2c -#define JMP_r24 0x30 -#define JMP_r25 0x34 -#define JMP_r26 0x38 -#define JMP_r27 0x3c -#define JMP_r28 0x40 -#define JMP_r29 0x44 -#define JMP_r30 0x48 -#define JMP_r31 0x4c -#define JMP_lr 0x50 -#define JMP_cr 0x54 -#define JMP_ctr 0x58 -#define JMP_xer 0x5c -#define JMP_sig 0x60 +#ifdef __powerpc64__ +#define LD_REG ld +#define ST_REG std +#define REGWIDTH 8 +#else +#define LD_REG lwz +#define ST_REG stw +#define REGWIDTH 4 +#endif + +#define JMP_r1 1*REGWIDTH +#define JMP_r2 2*REGWIDTH +#define JMP_r14 3*REGWIDTH +#define JMP_r15 4*REGWIDTH +#define JMP_r16 5*REGWIDTH +#define JMP_r17 6*REGWIDTH +#define JMP_r18 7*REGWIDTH +#define JMP_r19 8*REGWIDTH +#define JMP_r20 9*REGWIDTH +#define JMP_r21 10*REGWIDTH +#define JMP_r22 11*REGWIDTH +#define JMP_r23 12*REGWIDTH +#define JMP_r24 13*REGWIDTH +#define JMP_r25 14*REGWIDTH +#define JMP_r26 15*REGWIDTH +#define JMP_r27 16*REGWIDTH +#define JMP_r28 17*REGWIDTH +#define JMP_r29 18*REGWIDTH +#define JMP_r30 19*REGWIDTH +#define JMP_r31 20*REGWIDTH +#define JMP_lr 21*REGWIDTH +#define JMP_cr 22*REGWIDTH +#define JMP_ctr 23*REGWIDTH +#define JMP_xer 24*REGWIDTH +#define JMP_sig 25*REGWIDTH ASENTRY(setjmp) - stw 31, JMP_r31(3) - /* r1, r14-r30 */ - stw 1, JMP_r1 (3) - stw 14, JMP_r14(3) - stw 15, JMP_r15(3) - stw 16, JMP_r16(3) - stw 17, JMP_r17(3) - stw 18, JMP_r18(3) - stw 19, JMP_r19(3) - stw 20, JMP_r20(3) - stw 21, JMP_r21(3) - stw 22, JMP_r22(3) - stw 23, JMP_r23(3) - stw 24, JMP_r24(3) - stw 25, JMP_r25(3) - stw 26, JMP_r26(3) - stw 27, JMP_r27(3) - stw 28, JMP_r28(3) - stw 29, JMP_r29(3) - stw 30, JMP_r30(3) + ST_REG 31, JMP_r31(3) + /* r1, r2, r14-r30 */ + ST_REG 1, JMP_r1 (3) + ST_REG 2, JMP_r2 (3) + ST_REG 14, JMP_r14(3) + ST_REG 15, JMP_r15(3) + ST_REG 16, JMP_r16(3) + ST_REG 17, JMP_r17(3) + ST_REG 18, JMP_r18(3) + ST_REG 19, JMP_r19(3) + ST_REG 20, JMP_r20(3) + ST_REG 21, JMP_r21(3) + ST_REG 22, JMP_r22(3) + ST_REG 23, JMP_r23(3) + ST_REG 24, JMP_r24(3) + ST_REG 25, JMP_r25(3) + ST_REG 26, JMP_r26(3) + ST_REG 27, JMP_r27(3) + ST_REG 28, JMP_r28(3) + ST_REG 29, JMP_r29(3) + ST_REG 30, JMP_r30(3) /* cr, lr, ctr, xer */ mfcr 0 - stw 0, JMP_cr(3) + ST_REG 0, JMP_cr(3) mflr 0 - stw 0, JMP_lr(3) + ST_REG 0, JMP_lr(3) mfctr 0 - stw 0, JMP_ctr(3) + ST_REG 0, JMP_ctr(3) mfxer 0 - stw 0, JMP_xer(3) + ST_REG 0, JMP_xer(3) /* f14-f31, fpscr */ li 3, 0 blr @@ -68,34 +80,35 @@ ASENTRY(setjmp) .extern sigsetmask ASENTRY(longjmp) - lwz 31, JMP_r31(3) - /* r1, r14-r30 */ - lwz 1, JMP_r1 (3) - lwz 14, JMP_r14(3) - lwz 15, JMP_r15(3) - lwz 16, JMP_r16(3) - lwz 17, JMP_r17(3) - lwz 18, JMP_r18(3) - lwz 19, JMP_r19(3) - lwz 20, JMP_r20(3) - lwz 21, JMP_r21(3) - lwz 22, JMP_r22(3) - lwz 23, JMP_r23(3) - lwz 24, JMP_r24(3) - lwz 25, JMP_r25(3) - lwz 26, JMP_r26(3) - lwz 27, JMP_r27(3) - lwz 28, JMP_r28(3) - lwz 29, JMP_r29(3) - lwz 30, JMP_r30(3) + LD_REG 31, JMP_r31(3) + /* r1, r2, r14-r30 */ + LD_REG 1, JMP_r1 (3) + LD_REG 2, JMP_r2 (3) + LD_REG 14, JMP_r14(3) + LD_REG 15, JMP_r15(3) + LD_REG 16, JMP_r16(3) + LD_REG 17, JMP_r17(3) + LD_REG 18, JMP_r18(3) + LD_REG 19, JMP_r19(3) + LD_REG 20, JMP_r20(3) + LD_REG 21, JMP_r21(3) + LD_REG 22, JMP_r22(3) + LD_REG 23, JMP_r23(3) + LD_REG 24, JMP_r24(3) + LD_REG 25, JMP_r25(3) + LD_REG 26, JMP_r26(3) + LD_REG 27, JMP_r27(3) + LD_REG 28, JMP_r28(3) + LD_REG 29, JMP_r29(3) + LD_REG 30, JMP_r30(3) /* cr, lr, ctr, xer */ - lwz 0, JMP_cr(3) + LD_REG 0, JMP_cr(3) mtcr 0 - lwz 0, JMP_lr(3) + LD_REG 0, JMP_lr(3) mtlr 0 - lwz 0, JMP_ctr(3) + LD_REG 0, JMP_ctr(3) mtctr 0 - lwz 0, JMP_xer(3) + LD_REG 0, JMP_xer(3) mtxer 0 /* f14-f31, fpscr */ mr 3, 4 From owner-svn-src-projects@FreeBSD.ORG Sat Aug 1 20:58:01 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D252D106566C; Sat, 1 Aug 2009 20:58:01 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C10958FC17; Sat, 1 Aug 2009 20:58:01 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n71Kw11o092319; Sat, 1 Aug 2009 20:58:01 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n71Kw1Ms092317; Sat, 1 Aug 2009 20:58:01 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200908012058.n71Kw1Ms092317@svn.freebsd.org> From: Stanislav Sedov Date: Sat, 1 Aug 2009 20:58:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196021 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Aug 2009 20:58:02 -0000 Author: stas Date: Sat Aug 1 20:58:01 2009 New Revision: 196021 URL: http://svn.freebsd.org/changeset/base/196021 Log: - Fix device nodes processing. Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Sat Aug 1 20:24:45 2009 (r196020) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Sat Aug 1 20:58:01 2009 (r196021) @@ -987,13 +987,13 @@ procstat_get_vnode_info_sysctl(struct fi statfs(path, &stbuf); vn->vn_mntdir = strdup(stbuf.f_mntonname); } - vn->vn_dev =rdev; - if (vntype == KF_VTYPE_VBLK) { + vn->vn_dev = rdev; + if (vntype == PS_FST_VTYPE_VBLK) { name = devname(rdev, S_IFBLK); if (name != NULL) strlcpy(vn->vn_devname, name, sizeof(vn->vn_devname)); - } else if (vntype == KF_VTYPE_VCHR) { + } else if (vntype == PS_FST_VTYPE_VCHR) { name = devname(vn->vn_dev, S_IFCHR); if (name != NULL) strlcpy(vn->vn_devname, name, From owner-svn-src-projects@FreeBSD.ORG Sat Aug 1 21:45:48 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B29561065670; Sat, 1 Aug 2009 21:45:48 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A14058FC0A; Sat, 1 Aug 2009 21:45:48 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n71Ljm3u093400; Sat, 1 Aug 2009 21:45:48 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n71Ljmjw093398; Sat, 1 Aug 2009 21:45:48 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200908012145.n71Ljmjw093398@svn.freebsd.org> From: Stanislav Sedov Date: Sat, 1 Aug 2009 21:45:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196022 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Aug 2009 21:45:49 -0000 Author: stas Date: Sat Aug 1 21:45:48 2009 New Revision: 196022 URL: http://svn.freebsd.org/changeset/base/196022 Log: - Whitespace nitpicking. Modified: projects/libprocstat/usr.bin/fstat/fuser.c Modified: projects/libprocstat/usr.bin/fstat/fuser.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fuser.c Sat Aug 1 20:58:01 2009 (r196021) +++ projects/libprocstat/usr.bin/fstat/fuser.c Sat Aug 1 21:45:48 2009 (r196022) @@ -155,7 +155,7 @@ addfile(const char *path, struct reqfile reqfile->fsid = sb.st_dev; reqfile->name = path; STAILQ_INIT(&reqfile->consumers); - return (0); + return (0); } int From owner-svn-src-projects@FreeBSD.ORG Sat Aug 1 21:46:55 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BB80C106566B; Sat, 1 Aug 2009 21:46:55 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AA4098FC26; Sat, 1 Aug 2009 21:46:55 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n71LktWa093463; Sat, 1 Aug 2009 21:46:55 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n71LktZx093461; Sat, 1 Aug 2009 21:46:55 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200908012146.n71LktZx093461@svn.freebsd.org> From: Stanislav Sedov Date: Sat, 1 Aug 2009 21:46:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196023 - projects/libprocstat/sys/kern X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Aug 2009 21:46:56 -0000 Author: stas Date: Sat Aug 1 21:46:55 2009 New Revision: 196023 URL: http://svn.freebsd.org/changeset/base/196023 Log: - Correctly retrieve fsid for vnodes that belong to filesystems not supporting these fields. Modified: projects/libprocstat/sys/kern/kern_descrip.c Modified: projects/libprocstat/sys/kern/kern_descrip.c ============================================================================== --- projects/libprocstat/sys/kern/kern_descrip.c Sat Aug 1 21:45:48 2009 (r196022) +++ projects/libprocstat/sys/kern/kern_descrip.c Sat Aug 1 21:46:55 2009 (r196023) @@ -3193,6 +3193,8 @@ fill_vnode_info(struct vnode *vp, struct /* * Retrieve vnode attributes. */ + va.va_fsid = VNOVAL; + va.va_rdev = NODEV; vfslocked = VFS_LOCK_GIANT(vp->v_mount); vn_lock(vp, LK_SHARED | LK_RETRY); error = VOP_GETATTR(vp, &va, curthread->td_ucred); @@ -3200,7 +3202,11 @@ fill_vnode_info(struct vnode *vp, struct VFS_UNLOCK_GIANT(vfslocked); if (error != 0) return (error); - kif->kf_un.kf_file.kf_file_fsid = va.va_fsid; + if (va.va_fsid != VNOVAL) + kif->kf_un.kf_file.kf_file_fsid = va.va_fsid; + else + kif->kf_un.kf_file.kf_file_fsid = + vp->v_mount->mnt_stat.f_fsid.val[0]; kif->kf_un.kf_file.kf_file_fileid = va.va_fileid; kif->kf_un.kf_file.kf_file_mode = MAKEIMODE(va.va_type, va.va_mode); kif->kf_un.kf_file.kf_file_size = va.va_size;