Date: Sun, 13 Sep 2009 22:05:17 GMT From: Marko Zec <zec@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 168520 for review Message-ID: <200909132205.n8DM5HsA091034@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=168520 Change 168520 by zec@zec_tpx32 on 2009/09/13 22:04:23 IFC @ 168505 part two Affected files ... .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#9 integrate .. //depot/projects/vimage-commit2/src/sys/compat/linux/linux_ioctl.c#27 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/debugger/dbcmds.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/debugger/dbdisply.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/debugger/dbexec.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/dispatcher/dsfield.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/dispatcher/dsmethod.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/dispatcher/dsmthdat.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/dispatcher/dsobject.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/dispatcher/dswload.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/events/evgpe.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/events/evgpeblk.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/events/evrgnini.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/executer/exconfig.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/executer/exfield.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/executer/exfldio.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/executer/exstorob.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/executer/exutils.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/hardware/hwgpe.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/hardware/hwregs.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/hardware/hwsleep.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/hardware/hwtimer.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/hardware/hwxface.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acconfig.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acdebug.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acdisasm.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acglobal.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/achware.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acinterp.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/aclocal.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acmacros.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acnamesp.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acobject.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acparser.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acpixf.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acpredef.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/actbl.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/actbl1.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/actypes.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/acutils.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/include/amlcode.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/namespace/nsalloc.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/namespace/nseval.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/namespace/nsinit.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/namespace/nsload.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/namespace/nspredef.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/namespace/nsxfeval.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/namespace/nsxfname.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/parser/psloop.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/parser/psxface.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/tables/tbutils.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/tools/acpiexec/aecommon.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/utilities/uteval.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/utilities/utglobal.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/utilities/utinit.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/utilities/utmisc.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/utilities/utxface.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi.c#15 integrate .. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_cpu.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_pcib_acpi.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpivar.h#4 integrate .. //depot/projects/vimage-commit2/src/sys/dev/agp/agp_i810.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/amdtemp/amdtemp.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/dev/drm/drm_pciids.h#9 integrate .. //depot/projects/vimage-commit2/src/sys/dev/drm/r600_blit.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/dev/e1000/if_em.c#17 integrate .. //depot/projects/vimage-commit2/src/sys/dev/e1000/if_igb.c#14 integrate .. //depot/projects/vimage-commit2/src/sys/dev/ichwd/ichwd.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/dev/ixgbe/ixgbe.c#10 integrate .. //depot/projects/vimage-commit2/src/sys/dev/pci/pci_user.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/dev/pci/pcireg.h#9 integrate .. //depot/projects/vimage-commit2/src/sys/dev/pci/pcivar.h#4 integrate .. //depot/projects/vimage-commit2/src/sys/dev/syscons/daemon/daemon_saver.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/dev/syscons/scterm-teken.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/syscons/syscons.c#11 integrate .. //depot/projects/vimage-commit2/src/sys/dev/syscons/syscons.h#5 integrate .. //depot/projects/vimage-commit2/src/sys/fs/fifofs/fifo_vnops.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/i386/acpica/acpi_machdep.c#9 integrate .. //depot/projects/vimage-commit2/src/sys/i386/cpufreq/hwpstate.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/i386/i386/identcpu.c#12 integrate .. //depot/projects/vimage-commit2/src/sys/i386/i386/msi.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/i386/i386/pmap.c#18 integrate .. //depot/projects/vimage-commit2/src/sys/i386/ibcs2/ibcs2_proto.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/i386/include/specialreg.h#10 integrate .. //depot/projects/vimage-commit2/src/sys/i386/include/xen/xen-os.h#4 integrate .. //depot/projects/vimage-commit2/src/sys/i386/linux/linux_proto.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/i386/xen/locore.s#5 integrate .. //depot/projects/vimage-commit2/src/sys/i386/xen/pmap.c#12 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_event.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_shutdown.c#10 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_sig.c#12 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_timeout.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/kern/subr_bus.c#15 integrate .. //depot/projects/vimage-commit2/src/sys/kern/sys_pipe.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/kern/tty.c#30 integrate .. //depot/projects/vimage-commit2/src/sys/kern/tty_pts.c#17 integrate .. //depot/projects/vimage-commit2/src/sys/kern/uipc_mqueue.c#9 integrate .. //depot/projects/vimage-commit2/src/sys/kern/uipc_socket.c#35 integrate .. //depot/projects/vimage-commit2/src/sys/kern/vfs_aio.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/kern/vfs_subr.c#21 integrate .. //depot/projects/vimage-commit2/src/sys/modules/acpi/acpi/Makefile#5 integrate .. //depot/projects/vimage-commit2/src/sys/modules/dtrace/lockstat/Makefile#2 integrate .. //depot/projects/vimage-commit2/src/sys/net/bpf.c#24 integrate .. //depot/projects/vimage-commit2/src/sys/netgraph/bluetooth/include/ng_btsocket_rfcomm.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/in_mcast.c#29 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/ip_mroute.c#22 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctp_pcb.c#22 integrate .. //depot/projects/vimage-commit2/src/sys/netinet6/in6.c#30 integrate .. //depot/projects/vimage-commit2/src/sys/netinet6/in6_ifattach.c#36 integrate .. //depot/projects/vimage-commit2/src/sys/netinet6/in6_proto.c#28 integrate .. //depot/projects/vimage-commit2/src/sys/netinet6/ip6_input.c#40 integrate .. //depot/projects/vimage-commit2/src/sys/netinet6/nd6.c#42 integrate .. //depot/projects/vimage-commit2/src/sys/netinet6/nd6.h#13 integrate .. //depot/projects/vimage-commit2/src/sys/netinet6/nd6_nbr.c#29 integrate .. //depot/projects/vimage-commit2/src/sys/netinet6/nd6_rtr.c#33 integrate .. //depot/projects/vimage-commit2/src/sys/netsmb/smb_dev.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/pci/intpm.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/pci/intpmreg.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/powerpc/conf/GENERIC#15 integrate .. //depot/projects/vimage-commit2/src/sys/sparc64/pci/ofw_pci.h#4 integrate .. //depot/projects/vimage-commit2/src/sys/sparc64/pci/psycho.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/sparc64/pci/schizo.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/sparc64/sparc64/jbusppm.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/sys/bus.h#7 integrate .. //depot/projects/vimage-commit2/src/sys/teken/teken.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/teken/teken.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/teken/teken_demo.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/teken/teken_subr.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/teken/teken_subr_compat.h#2 integrate Differences ... ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c#4 (text+ko) ==== @@ -341,7 +341,7 @@ zap->zap_m.zap_num_entries++; else { printf("ZFS WARNING: Duplicated ZAP " - "entry detected (%s).", + "entry detected (%s).\n", mze->mze_name); } zap_name_free(zn); ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#9 (text+ko) ==== @@ -1114,6 +1114,20 @@ znode_t *zp; int err; + /* + * XXXPJD: zfs_zget() can't operate on virtual entires like .zfs/ or + * .zfs/snapshot/ directories, so for now just return EOPNOTSUPP. + * This will make NFS to fall back to using READDIR instead of + * READDIRPLUS. + * Also snapshots are stored in AVL tree, but based on their names, + * not inode numbers, so it will be very inefficient to iterate + * over all snapshots to find the right one. + * Note that OpenSolaris READDIRPLUS implementation does LOOKUP on + * d_name, and not VGET on d_fileno as we do. + */ + if (ino == ZFSCTL_INO_ROOT || ino == ZFSCTL_INO_SNAPDIR) + return (EOPNOTSUPP); + ZFS_ENTER(zfsvfs); err = zfs_zget(zfsvfs, ino, &zp); if (err == 0 && zp->z_unlinked) { @@ -1168,11 +1182,10 @@ ZFS_ENTER(zfsvfs); /* - * On FreeBSD we are already called with snapshot's mount point - * and not the mount point of its parent. + * On FreeBSD we can get snapshot's mount point or its parent file + * system mount point depending if snapshot is already mounted or not. */ -#ifndef __FreeBSD__ - if (fidp->fid_len == LONG_FID_LEN) { + if (zfsvfs->z_parent == zfsvfs && fidp->fid_len == LONG_FID_LEN) { zfid_long_t *zlfid = (zfid_long_t *)fidp; uint64_t objsetid = 0; uint64_t setgen = 0; @@ -1190,7 +1203,6 @@ return (EINVAL); ZFS_ENTER(zfsvfs); } -#endif if (fidp->fid_len == SHORT_FID_LEN || fidp->fid_len == LONG_FID_LEN) { zfid_short_t *zfid = (zfid_short_t *)fidp; ==== //depot/projects/vimage-commit2/src/sys/compat/linux/linux_ioctl.c#27 (text+ko) ==== @@ -29,7 +29,7 @@ #include "opt_compat.h" #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/compat/linux/linux_ioctl.c,v 1.157 2009/08/28 22:51:07 zec Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/linux/linux_ioctl.c,v 1.158 2009/09/13 21:30:18 zec Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -2152,6 +2152,7 @@ /* handle the 'request buffer size' case */ if (ifc.ifc_buf == PTROUT(NULL)) { ifc.ifc_len = 0; + IFNET_RLOCK(); TAILQ_FOREACH(ifp, &V_ifnet, if_link) { TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { struct sockaddr *sa = ifa->ifa_addr; @@ -2159,6 +2160,7 @@ ifc.ifc_len += sizeof(ifr); } } + IFNET_RUNLOCK(); error = copyout(&ifc, uifc, sizeof(ifc)); CURVNET_RESTORE(); return (error); ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/debugger/dbcmds.c#2 (text+ko) ==== @@ -500,17 +500,16 @@ void *Context, void **ReturnValue) { - ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; - UINT32 *Count = (UINT32 *) Context; - const ACPI_PREDEFINED_INFO *Predefined; - ACPI_BUFFER ReturnObj; - ACPI_STATUS Status; - char *Pathname; - ACPI_BUFFER Buffer; + ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; + UINT32 *Count = (UINT32 *) Context; + ACPI_BUFFER ReturnObj; + ACPI_STATUS Status; + char *Pathname; UINT32 i; ACPI_DEVICE_INFO *ObjInfo; ACPI_OBJECT_LIST ParamObjects; ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS]; + const ACPI_PREDEFINED_INFO *Predefined; Predefined = AcpiNsCheckForPredefinedName (Node); @@ -532,8 +531,7 @@ /* Get the object info for number of method parameters */ - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - Status = AcpiGetObjectInfo (ObjHandle, &Buffer); + Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo); if (ACPI_FAILURE (Status)) { return (Status); @@ -542,7 +540,6 @@ ParamObjects.Pointer = NULL; ParamObjects.Count = 0; - ObjInfo = Buffer.Pointer; if (ObjInfo->Type == ACPI_TYPE_METHOD) { @@ -558,7 +555,7 @@ ParamObjects.Count = ObjInfo->ParamCount; } - ACPI_FREE (Buffer.Pointer); + ACPI_FREE (ObjInfo); ReturnObj.Pointer = NULL; ReturnObj.Length = ACPI_ALLOCATE_BUFFER; @@ -1997,12 +1994,17 @@ ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ACPI_STATUS Status; ACPI_BUFFER Buffer; - ACPI_INTEGER ADR; - ACPI_DEVICE_ID Id; - ACPI_COMPATIBLE_ID_LIST *Cid; ACPI_NAMESPACE_NODE *TempNode; + ACPI_DEVICE_INFO *Info; + UINT32 i; + if ((Node->Type != ACPI_TYPE_DEVICE) && + (Node->Type != ACPI_TYPE_PROCESSOR)) + { + return (AE_OK); + } + /* Exit if there is no _PRT under this device */ Status = AcpiGetHandle (Node, METHOD_NAME__PRT, @@ -2022,57 +2024,70 @@ return (AE_OK); } + Status = AcpiGetObjectInfo (ObjHandle, &Info); + if (ACPI_FAILURE (Status)) + { + return (AE_OK); + } + /* Display the full path */ - AcpiOsPrintf ("%-32s", (char *) Buffer.Pointer); + AcpiOsPrintf ("%-32s Type %X", (char *) Buffer.Pointer, Node->Type); ACPI_FREE (Buffer.Pointer); + if (Info->Flags & ACPI_PCI_ROOT_BRIDGE) + { + AcpiOsPrintf (" - Is PCI Root Bridge"); + } + AcpiOsPrintf ("\n"); + /* _PRT info */ - AcpiOsPrintf ("_PRT=%p", TempNode); + AcpiOsPrintf ("_PRT: %p\n", TempNode); - /* Get the _ADR value */ + /* Dump _ADR, _HID, _UID, _CID */ - Status = AcpiUtEvaluateNumericObject (METHOD_NAME__ADR, Node, &ADR); - if (ACPI_FAILURE (Status)) + if (Info->Valid & ACPI_VALID_ADR) { - AcpiOsPrintf (" No _ADR "); + AcpiOsPrintf ("_ADR: %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Info->Address)); } else { - AcpiOsPrintf (" _ADR=%8.8X", (UINT32) ADR); + AcpiOsPrintf ("_ADR: <Not Present>\n"); } - /* Get the _HID if present */ + if (Info->Valid & ACPI_VALID_HID) + { + AcpiOsPrintf ("_HID: %s\n", Info->HardwareId.String); + } + else + { + AcpiOsPrintf ("_HID: <Not Present>\n"); + } - Status = AcpiUtExecute_HID (Node, &Id); - if (ACPI_SUCCESS (Status)) + if (Info->Valid & ACPI_VALID_UID) { - AcpiOsPrintf (" _HID=%s", Id.Value); + AcpiOsPrintf ("_UID: %s\n", Info->UniqueId.String); } else { - AcpiOsPrintf (" "); + AcpiOsPrintf ("_UID: <Not Present>\n"); } - /* Get the _UID if present */ - - Status = AcpiUtExecute_UID (Node, &Id); - if (ACPI_SUCCESS (Status)) + if (Info->Valid & ACPI_VALID_CID) { - AcpiOsPrintf (" _UID=%s", Id.Value); + for (i = 0; i < Info->CompatibleIdList.Count; i++) + { + AcpiOsPrintf ("_CID: %s\n", + Info->CompatibleIdList.Ids[i].String); + } } - - /* Get the _CID if present */ - - Status = AcpiUtExecute_CID (Node, &Cid); - if (ACPI_SUCCESS (Status)) + else { - AcpiOsPrintf (" _CID=%s", Cid->Id[0].Value); - ACPI_FREE (Cid); + AcpiOsPrintf ("_CID: <Not Present>\n"); } - AcpiOsPrintf ("\n"); + ACPI_FREE (Info); return (AE_OK); } @@ -2095,7 +2110,7 @@ { /* Search all nodes in namespace */ - (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, + (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, AcpiDbBusWalk, NULL, NULL); } ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/debugger/dbdisply.c#2 (text+ko) ==== @@ -682,42 +682,52 @@ char *ObjectArg) { ACPI_HANDLE Handle; - ACPI_BUFFER Buffer; ACPI_DEVICE_INFO *Info; ACPI_STATUS Status; UINT32 i; Handle = ACPI_TO_POINTER (ACPI_STRTOUL (ObjectArg, NULL, 16)); - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - Status = AcpiGetObjectInfo (Handle, &Buffer); - if (ACPI_SUCCESS (Status)) + Status = AcpiGetObjectInfo (Handle, &Info); + if (ACPI_FAILURE (Status)) { - Info = Buffer.Pointer; - AcpiOsPrintf ( - "S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X HID: %s, ADR: %8.8X%8.8X, Status %8.8X\n", - Info->HighestDstates[0], Info->HighestDstates[1], - Info->HighestDstates[2], Info->HighestDstates[3], - Info->HardwareId.Value, - ACPI_FORMAT_UINT64 (Info->Address), - Info->CurrentStatus); + AcpiOsPrintf ("Could not get object info, %s\n", + AcpiFormatException (Status)); + return; + } + + AcpiOsPrintf ("ADR: %8.8X%8.8X, STA: %8.8X, Flags: %X\n", + ACPI_FORMAT_UINT64 (Info->Address), + Info->CurrentStatus, Info->Flags); + + AcpiOsPrintf ("S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X\n", + Info->HighestDstates[0], Info->HighestDstates[1], + Info->HighestDstates[2], Info->HighestDstates[3]); - if (Info->Valid & ACPI_VALID_CID) - { - for (i = 0; i < Info->CompatibilityId.Count; i++) - { - AcpiOsPrintf ("CID #%d: %s\n", i, - Info->CompatibilityId.Id[i].Value); - } - } + AcpiOsPrintf ("S0W-%2.2X S1W-%2.2X S2W-%2.2X S3W-%2.2X S4W-%2.2X\n", + Info->LowestDstates[0], Info->LowestDstates[1], + Info->LowestDstates[2], Info->LowestDstates[3], + Info->LowestDstates[4]); - ACPI_FREE (Info); + if (Info->Valid & ACPI_VALID_HID) + { + AcpiOsPrintf ("HID: %s\n", Info->HardwareId.String); + } + if (Info->Valid & ACPI_VALID_UID) + { + AcpiOsPrintf ("UID: %s\n", Info->UniqueId.String); } - else + if (Info->Valid & ACPI_VALID_CID) { - AcpiOsPrintf ("%s\n", AcpiFormatException (Status)); + for (i = 0; i < Info->CompatibleIdList.Count; i++) + { + AcpiOsPrintf ("CID %d: %s\n", i, + Info->CompatibleIdList.Ids[i].String); + } } + + ACPI_FREE (Info); } ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/debugger/dbexec.c#2 (text+ko) ==== @@ -176,7 +176,6 @@ ACPI_OBJECT_LIST ParamObjects; ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS]; ACPI_HANDLE Handle; - ACPI_BUFFER Buffer; UINT32 i; ACPI_DEVICE_INFO *ObjInfo; @@ -196,8 +195,7 @@ /* Get the object info for number of method parameters */ - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - Status = AcpiGetObjectInfo (Handle, &Buffer); + Status = AcpiGetObjectInfo (Handle, &ObjInfo); if (ACPI_FAILURE (Status)) { return (Status); @@ -206,7 +204,6 @@ ParamObjects.Pointer = NULL; ParamObjects.Count = 0; - ObjInfo = Buffer.Pointer; if (ObjInfo->Type == ACPI_TYPE_METHOD) { /* Are there arguments to the method? */ @@ -256,7 +253,7 @@ } } - ACPI_FREE (Buffer.Pointer); + ACPI_FREE (ObjInfo); /* Prepare for a return object of arbitrary size */ ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/dispatcher/dsfield.c#2 (text+ko) ==== @@ -211,9 +211,12 @@ Flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | ACPI_NS_ERROR_IF_FOUND; - /* Mark node temporary if we are executing a method */ - - if (WalkState->MethodNode) + /* + * Mark node temporary if we are executing a normal control + * method. (Don't mark if this is a module-level code method) + */ + if (WalkState->MethodNode && + !(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) { Flags |= ACPI_NS_TEMPORARY; } @@ -566,9 +569,12 @@ Flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | ACPI_NS_ERROR_IF_FOUND; - /* Mark node(s) temporary if we are executing a method */ - - if (WalkState->MethodNode) + /* + * Mark node(s) temporary if we are executing a normal control + * method. (Don't mark if this is a module-level code method) + */ + if (WalkState->MethodNode && + !(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) { Flags |= ACPI_NS_TEMPORARY; } ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/dispatcher/dsmethod.c#2 (text+ko) ==== @@ -693,10 +693,15 @@ } /* - * Delete any namespace objects created anywhere within - * the namespace by the execution of this method + * Delete any namespace objects created anywhere within the + * namespace by the execution of this method. Unless this method + * is a module-level executable code method, in which case we + * want make the objects permanent. */ - AcpiNsDeleteNamespaceByOwner (MethodDesc->Method.OwnerId); + if (!(MethodDesc->Method.Flags & AOPOBJ_MODULE_LEVEL)) + { + AcpiNsDeleteNamespaceByOwner (MethodDesc->Method.OwnerId); + } } /* Decrement the thread count on the method */ @@ -745,7 +750,10 @@ /* No more threads, we can free the OwnerId */ - AcpiUtReleaseOwnerId (&MethodDesc->Method.OwnerId); + if (!(MethodDesc->Method.Flags & AOPOBJ_MODULE_LEVEL)) + { + AcpiUtReleaseOwnerId (&MethodDesc->Method.OwnerId); + } } return_VOID; ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/dispatcher/dsmthdat.c#2 (text+ko) ==== @@ -548,9 +548,10 @@ case ACPI_REFCLASS_LOCAL: - ACPI_ERROR ((AE_INFO, - "Uninitialized Local[%d] at node %p", Index, Node)); - + /* + * No error message for this case, will be trapped again later to + * detect and ignore cases of Store(LocalX,LocalX) + */ return_ACPI_STATUS (AE_AML_UNINITIALIZED_LOCAL); default: ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/dispatcher/dsobject.c#2 (text+ko) ==== @@ -570,15 +570,28 @@ { /* * NumElements was exhausted, but there are remaining elements in the - * PackageList. + * PackageList. Truncate the package to NumElements. * * Note: technically, this is an error, from ACPI spec: "It is an error * for NumElements to be less than the number of elements in the - * PackageList". However, for now, we just print an error message and - * no exception is returned. + * PackageList". However, we just print an error message and + * no exception is returned. This provides Windows compatibility. Some + * BIOSs will alter the NumElements on the fly, creating this type + * of ill-formed package object. */ while (Arg) { + /* + * We must delete any package elements that were created earlier + * and are not going to be used because of the package truncation. + */ + if (Arg->Common.Node) + { + AcpiUtRemoveReference ( + ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Arg->Common.Node)); + Arg->Common.Node = NULL; + } + /* Find out how many elements there really are */ i++; @@ -586,7 +599,7 @@ } ACPI_ERROR ((AE_INFO, - "Package List length (%X) larger than NumElements count (%X), truncated\n", + "Package List length (0x%X) larger than NumElements count (0x%X), truncated\n", i, ElementCount)); } else if (i < ElementCount) @@ -596,7 +609,7 @@ * Note: this is not an error, the package is padded out with NULLs. */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Package List length (%X) smaller than NumElements count (%X), padded with null elements\n", + "Package List length (0x%X) smaller than NumElements count (0x%X), padded with null elements\n", i, ElementCount)); } ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/dispatcher/dswload.c#2 (text+ko) ==== @@ -672,20 +672,6 @@ (WalkState->Opcode != AML_INT_NAMEPATH_OP)) || (!(WalkState->OpInfo->Flags & AML_NAMED))) { -#ifdef ACPI_ENABLE_MODULE_LEVEL_CODE - if ((WalkState->OpInfo->Class == AML_CLASS_EXECUTE) || - (WalkState->OpInfo->Class == AML_CLASS_CONTROL)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Begin/EXEC: %s (fl %8.8X)\n", WalkState->OpInfo->Name, - WalkState->OpInfo->Flags)); - - /* Executing a type1 or type2 opcode outside of a method */ - - Status = AcpiDsExecBeginOp (WalkState, OutOp); - return_ACPI_STATUS (Status); - } -#endif return_ACPI_STATUS (AE_OK); } @@ -862,7 +848,12 @@ { /* Execution mode, node cannot already exist, node is temporary */ - Flags |= (ACPI_NS_ERROR_IF_FOUND | ACPI_NS_TEMPORARY); + Flags |= ACPI_NS_ERROR_IF_FOUND; + + if (!(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) + { + Flags |= ACPI_NS_TEMPORARY; + } } /* Add new entry or lookup existing entry */ @@ -952,24 +943,6 @@ if (!(WalkState->OpInfo->Flags & AML_NSOBJECT)) { -#ifndef ACPI_NO_METHOD_EXECUTION -#ifdef ACPI_ENABLE_MODULE_LEVEL_CODE - /* No namespace object. Executable opcode? */ - - if ((WalkState->OpInfo->Class == AML_CLASS_EXECUTE) || - (WalkState->OpInfo->Class == AML_CLASS_CONTROL)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "End/EXEC: %s (fl %8.8X)\n", WalkState->OpInfo->Name, - WalkState->OpInfo->Flags)); - - /* Executing a type1 or type2 opcode outside of a method */ - - Status = AcpiDsExecEndOp (WalkState); - return_ACPI_STATUS (Status); - } -#endif -#endif return_ACPI_STATUS (AE_OK); } ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/events/evgpe.c#2 (text+ko) ==== @@ -543,7 +543,7 @@ /* Read the Status Register */ - Status = AcpiRead (&StatusReg, &GpeRegisterInfo->StatusAddress); + Status = AcpiHwRead (&StatusReg, &GpeRegisterInfo->StatusAddress); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; @@ -551,7 +551,7 @@ /* Read the Enable Register */ - Status = AcpiRead (&EnableReg, &GpeRegisterInfo->EnableAddress); + Status = AcpiHwRead (&EnableReg, &GpeRegisterInfo->EnableAddress); if (ACPI_FAILURE (Status)) { goto UnlockAndExit; ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/events/evgpeblk.c#2 (text+ko) ==== @@ -995,7 +995,7 @@ /* Disable all GPEs within this register */ - Status = AcpiWrite (0x00, &ThisRegister->EnableAddress); + Status = AcpiHwWrite (0x00, &ThisRegister->EnableAddress); if (ACPI_FAILURE (Status)) { goto ErrorExit; @@ -1003,7 +1003,7 @@ /* Clear any pending GPE events within this register */ - Status = AcpiWrite (0xFF, &ThisRegister->StatusAddress); + Status = AcpiHwWrite (0xFF, &ThisRegister->StatusAddress); if (ACPI_FAILURE (Status)) { goto ErrorExit; ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/events/evrgnini.c#2 (text+ko) ==== @@ -127,10 +127,6 @@ /* Local prototypes */ static BOOLEAN -AcpiEvMatchPciRootBridge ( - char *Id); - -static BOOLEAN AcpiEvIsPciRootBridge ( ACPI_NAMESPACE_NODE *Node); @@ -444,42 +440,6 @@ /******************************************************************************* * - * FUNCTION: AcpiEvMatchPciRootBridge - * - * PARAMETERS: Id - The HID/CID in string format - * - * RETURN: TRUE if the Id is a match for a PCI/PCI-Express Root Bridge - * - * DESCRIPTION: Determine if the input ID is a PCI Root Bridge ID. - * - ******************************************************************************/ - -static BOOLEAN -AcpiEvMatchPciRootBridge ( - char *Id) -{ - - /* - * Check if this is a PCI root. - * ACPI 3.0+: check for a PCI Express root also. - */ - if (!(ACPI_STRNCMP (Id, - PCI_ROOT_HID_STRING, - sizeof (PCI_ROOT_HID_STRING))) || - - !(ACPI_STRNCMP (Id, - PCI_EXPRESS_ROOT_HID_STRING, - sizeof (PCI_EXPRESS_ROOT_HID_STRING)))) - { - return (TRUE); - } - - return (FALSE); -} - - -/******************************************************************************* - * * FUNCTION: AcpiEvIsPciRootBridge * * PARAMETERS: Node - Device node being examined @@ -496,9 +456,10 @@ ACPI_NAMESPACE_NODE *Node) { ACPI_STATUS Status; - ACPI_DEVICE_ID Hid; - ACPI_COMPATIBLE_ID_LIST *Cid; + ACPI_DEVICE_ID *Hid; + ACPI_DEVICE_ID_LIST *Cid; UINT32 i; + BOOLEAN Match; /* Get the _HID and check for a PCI Root Bridge */ @@ -509,7 +470,10 @@ return (FALSE); } - if (AcpiEvMatchPciRootBridge (Hid.Value)) + Match = AcpiUtIsPciRootBridge (Hid->String); + ACPI_FREE (Hid); + + if (Match) { return (TRUE); } @@ -526,7 +490,7 @@ for (i = 0; i < Cid->Count; i++) { - if (AcpiEvMatchPciRootBridge (Cid->Id[i].Value)) + if (AcpiUtIsPciRootBridge (Cid->Ids[i].String)) { ACPI_FREE (Cid); return (TRUE); ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/executer/exconfig.c#2 (text+ko) ==== @@ -196,8 +196,15 @@ { AcpiUtRemoveReference (ObjDesc); *DdbHandle = NULL; + return_ACPI_STATUS (Status); } + /* Execute any module-level code that was found in the table */ + + AcpiExExitInterpreter (); + AcpiNsExecModuleCodeList (); + AcpiExEnterInterpreter (); + return_ACPI_STATUS (Status); } ==== //depot/projects/vimage-commit2/src/sys/contrib/dev/acpica/executer/exfield.c#2 (text+ko) ==== @@ -151,6 +151,7 @@ ACPI_OPERAND_OBJECT *BufferDesc; ACPI_SIZE Length; void *Buffer; + UINT32 Function; ACPI_FUNCTION_TRACE_PTR (ExReadDataFromField, ObjDesc); @@ -183,13 +184,27 @@ } } else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) && - (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS)) + (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS || + ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI)) { /* - * This is an SMBus read. We must create a buffer to hold the data - * and directly access the region handler. + * This is an SMBus or IPMI read. We must create a buffer to hold + * the data and then directly access the region handler. + * + * Note: Smbus protocol value is passed in upper 16-bits of Function */ - BufferDesc = AcpiUtCreateBufferObject (ACPI_SMBUS_BUFFER_SIZE); + if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS) + { + Length = ACPI_SMBUS_BUFFER_SIZE; + Function = ACPI_READ | (ObjDesc->Field.Attribute << 16); + } + else /* IPMI */ + { + Length = ACPI_IPMI_BUFFER_SIZE; + Function = ACPI_READ; + } + + BufferDesc = AcpiUtCreateBufferObject (Length); if (!BufferDesc) { return_ACPI_STATUS (AE_NO_MEMORY); @@ -199,13 +214,11 @@ AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags); - /* - * Perform the read. - * Note: Smbus protocol value is passed in upper 16-bits of Function - */ + /* Call the region handler for the read */ + Status = AcpiExAccessRegion (ObjDesc, 0, ACPI_CAST_PTR (ACPI_INTEGER, BufferDesc->Buffer.Pointer), - ACPI_READ | (ObjDesc->Field.Attribute << 16)); + Function); AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags); goto Exit; } @@ -304,6 +317,7 @@ UINT32 Length; void *Buffer; ACPI_OPERAND_OBJECT *BufferDesc; + UINT32 Function; ACPI_FUNCTION_TRACE_PTR (ExWriteDataToField, ObjDesc); @@ -332,40 +346,59 @@ } } else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) && - (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS)) + (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS || + ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI)) { /* - * This is an SMBus write. We will bypass the entire field mechanism - * and handoff the buffer directly to the handler. + * This is an SMBus or IPMI write. We will bypass the entire field + * mechanism and handoff the buffer directly to the handler. For + * these address spaces, the buffer is bi-directional; on a write, + * return data is returned in the same buffer. + * + * Source must be a buffer of sufficient size: + * ACPI_SMBUS_BUFFER_SIZE or ACPI_IPMI_BUFFER_SIZE. * - * Source must be a buffer of sufficient size (ACPI_SMBUS_BUFFER_SIZE). + * Note: SMBus protocol type is passed in upper 16-bits of Function */ if (SourceDesc->Common.Type != ACPI_TYPE_BUFFER) { - ACPI_ERROR ((AE_INFO, "SMBus write requires Buffer, found type %s", + ACPI_ERROR ((AE_INFO, + "SMBus or IPMI write requires Buffer, found type %s", AcpiUtGetObjectTypeName (SourceDesc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } - if (SourceDesc->Buffer.Length < ACPI_SMBUS_BUFFER_SIZE) + if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS) + { + Length = ACPI_SMBUS_BUFFER_SIZE; + Function = ACPI_WRITE | (ObjDesc->Field.Attribute << 16); + } + else /* IPMI */ + { + Length = ACPI_IPMI_BUFFER_SIZE; + Function = ACPI_WRITE; + } + + if (SourceDesc->Buffer.Length < Length) { ACPI_ERROR ((AE_INFO, - "SMBus write requires Buffer of length %X, found length %X", - ACPI_SMBUS_BUFFER_SIZE, SourceDesc->Buffer.Length)); + "SMBus or IPMI write requires Buffer of length %X, found length %X", + Length, SourceDesc->Buffer.Length)); return_ACPI_STATUS (AE_AML_BUFFER_LIMIT); } - BufferDesc = AcpiUtCreateBufferObject (ACPI_SMBUS_BUFFER_SIZE); >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200909132205.n8DM5HsA091034>