Module Name: src Committed By: mrg Date: Fri Dec 6 06:38:39 UTC 2019
Modified Files: src/sys/arch/powerpc/include: types.h src/sys/arch/powerpc/powerpc: openfirm.c src/sys/dev/ofw: openfirmio.c Log Message: revert this change from early this year. it appears the changes macallan@ commited to fix FIRMWORKSBUGS issues in openfirmware() have fixed the hangs seen on PegasosII. hooray! --- Log Message: workaround a problem with the pegasos firmware interface: attempting to use /dev/openfirm on this machine hangs hard. this isn't a new problem, and i've been meaning to try to figure it out for years, but it's become a problem since the xf86-video-radeon driver gained code to look for the macppc model using this interface. this is why xorg-server 1.18 and 1.20 hang recently on the pegasosII. this change is fairly ugly but i couldn't think of a less ugly method to avoid /dev/openfirm working just on this one platform. introduce new __OPENFIRMIO_OPEN_CHECK_BROKEN macro and associated __openfirmio_open_check_broken(), and use them in the new openfirmopen() to fail opens. include proplib.h in macppc and ofppc autoconf.h since they use it. --- To generate a diff of this commit: cvs rdiff -u -r1.59 -r1.60 src/sys/arch/powerpc/include/types.h cvs rdiff -u -r1.29 -r1.30 src/sys/arch/powerpc/powerpc/openfirm.c cvs rdiff -u -r1.14 -r1.15 src/sys/dev/ofw/openfirmio.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/powerpc/include/types.h diff -u src/sys/arch/powerpc/include/types.h:1.59 src/sys/arch/powerpc/include/types.h:1.60 --- src/sys/arch/powerpc/include/types.h:1.59 Sun Apr 7 05:25:55 2019 +++ src/sys/arch/powerpc/include/types.h Fri Dec 6 06:38:39 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: types.h,v 1.59 2019/04/07 05:25:55 thorpej Exp $ */ +/* $NetBSD: types.h,v 1.60 2019/12/06 06:38:39 mrg Exp $ */ /*- * Copyright (C) 1995 Wolfgang Solfrank. @@ -87,8 +87,6 @@ typedef __uint32_t tlb_asid_t; /* for b #define __HAVE___LWP_GETTCB_FAST #define __HAVE___LWP_SETTCB #define __HAVE_TLS_VARIANT_I -#define __OPENFIRMIO_OPEN_CHECK_BROKEN -int __openfirmio_open_check_broken(void); #if defined(_KERNEL) || defined(_KMEMUSER) #define PCU_FPU 0 /* FPU */ Index: src/sys/arch/powerpc/powerpc/openfirm.c diff -u src/sys/arch/powerpc/powerpc/openfirm.c:1.29 src/sys/arch/powerpc/powerpc/openfirm.c:1.30 --- src/sys/arch/powerpc/powerpc/openfirm.c:1.29 Sat Nov 16 00:16:55 2019 +++ src/sys/arch/powerpc/powerpc/openfirm.c Fri Dec 6 06:38:39 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: openfirm.c,v 1.29 2019/11/16 00:16:55 macallan Exp $ */ +/* $NetBSD: openfirm.c,v 1.30 2019/12/06 06:38:39 mrg Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -34,7 +34,7 @@ #include "opt_multiprocessor.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: openfirm.c,v 1.29 2019/11/16 00:16:55 macallan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: openfirm.c,v 1.30 2019/12/06 06:38:39 mrg Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -762,11 +762,3 @@ ofbcopy(const void *src, void *dst, size while (len-- > 0) *dp++ = *sp++; } - -#ifdef __OPENFIRMIO_OPEN_CHECK_BROKEN -int -__openfirmio_open_check_broken(void) -{ - return strncmp(model_name, "Pegasos", 7) == 0 ? ENXIO : 0; -} -#endif Index: src/sys/dev/ofw/openfirmio.c diff -u src/sys/dev/ofw/openfirmio.c:1.14 src/sys/dev/ofw/openfirmio.c:1.15 --- src/sys/dev/ofw/openfirmio.c:1.14 Tue Jan 8 07:46:11 2019 +++ src/sys/dev/ofw/openfirmio.c Fri Dec 6 06:38:39 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: openfirmio.c,v 1.14 2019/01/08 07:46:11 mrg Exp $ */ +/* $NetBSD: openfirmio.c,v 1.15 2019/12/06 06:38:39 mrg Exp $ */ /* * Copyright (c) 1992, 1993 @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: openfirmio.c,v 1.14 2019/01/08 07:46:11 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: openfirmio.c,v 1.15 2019/12/06 06:38:39 mrg Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -122,11 +122,7 @@ static int openfirmopen(dev_t dev, int flag, int mode, struct lwp *l) { -#ifdef __OPENFIRMIO_OPEN_CHECK_BROKEN - return __openfirmio_open_check_broken(); -#else return 0; -#endif } static int