On Tue, Dec 01, 2020 at 10:40:30PM +0100, Mark Kettenis wrote:
> > From: Greg Steuck <gne...@openbsd.org>
> > Date: Mon, 30 Nov 2020 20:54:59 -0800
> > 
> > Mark Kettenis <mark.kette...@xs4all.nl> writes:
> > 
> > > The diff below fixes the way we handle named references in AML
> > > packages.  This fixes some bugs but I'd like to make sure that this
> > > doesn't inadvertedly break things.  So tests on a wide variety of
> > > machines are welcome.
> > 
> > I see a prompt crash:
> 
> Does this one work better?

Indeed it does, no panic, suspend resume still works, no change in dmesg.
X1 Gen 2.

OpenBSD 6.8-current (GENERIC.MP) #2: Wed Dec  2 08:09:03 CET 2020
    
flor...@openbsd-build.home.narrans.de:/usr/src/sys/arch/amd64/compile/GENERIC.MP
real mem = 8233394176 (7851MB)
avail mem = 7968555008 (7599MB)
random: good seed from bootblocks
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.7 @ 0xdcd3d000 (61 entries)
bios0: vendor LENOVO version "GRET40WW (1.17 )" date 09/02/2014
bios0: LENOVO 20A7006VUS
acpi0 at bios0: ACPI 5.0
acpi0: sleep states S0 S3 S4 S5
acpi0: tables DSDT FACP SLIC DBGP ECDT HPET APIC MCFG SSDT SSDT SSDT SSDT SSDT 
SSDT SSDT PCCT SSDT UEFI MSDM ASF! BATB FPDT UEFI DMAR
acpi0: wakeup devices LID_(S4) SLPB(S3) IGBE(S4) EXP2(S4) XHCI(S3) EHC1(S3)
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpiec0 at acpi0
acpihpet0 at acpi0: 14318179 Hz
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz, 798.30 MHz, 06-45-01
cpu0: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,PERF,ITSC,FSGSBASE,TSC_ADJUST,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,MELTDOWN
cpu0: 256KB 64b/line 8-way L2 cache
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 10 var ranges, 88 fixed ranges
cpu0: apic clock running at 99MHz
cpu0: mwait min=64, max=64, C-substates=0.2.1.2.4.1.1.1, IBE
cpu1 at mainbus0: apid 1 (application processor)
cpu1: Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz, 798.16 MHz, 06-45-01
cpu1: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,PERF,ITSC,FSGSBASE,TSC_ADJUST,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,MELTDOWN
cpu1: 256KB 64b/line 8-way L2 cache
cpu1: smt 1, core 0, package 0
cpu2 at mainbus0: apid 2 (application processor)
cpu2: Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz, 798.16 MHz, 06-45-01
cpu2: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,PERF,ITSC,FSGSBASE,TSC_ADJUST,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,MELTDOWN
cpu2: 256KB 64b/line 8-way L2 cache
cpu2: smt 0, core 1, package 0
cpu3 at mainbus0: apid 3 (application processor)
cpu3: Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz, 798.16 MHz, 06-45-01
cpu3: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,PERF,ITSC,FSGSBASE,TSC_ADJUST,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,MELTDOWN
cpu3: 256KB 64b/line 8-way L2 cache
cpu3: smt 1, core 1, package 0
ioapic0 at mainbus0: apid 2 pa 0xfec00000, version 20, 40 pins
acpimcfg0 at acpi0
acpimcfg0: addr 0xf8000000, bus 0-63
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus -1 (PEG_)
acpiprt2 at acpi0: bus 2 (EXP1)
acpiprt3 at acpi0: bus 3 (EXP2)
acpiprt4 at acpi0: bus -1 (EXP3)
dwiic0 at acpi0 I2C1 addr 0xfe105000/0x1000 irq 7
iic0 at dwiic0
"CPLM3218" at iic0 addr 0x48 not configured
acpibtn0 at acpi0: LID_
acpibtn1 at acpi0: SLPB
acpipci0 at acpi0 PCI0: 0x00000000 0x00000011 0x00000001
acpicmos0 at acpi0
acpibat0 at acpi0: BAT0 model "45N1703" serial  3191 type LiP oem "SMP"
acpiac0 at acpi0: AC unit offline
acpithinkpad0 at acpi0: version 2.0
"PNP0C14" at acpi0 not configured
"PNP0C14" at acpi0 not configured
"PNP0C14" at acpi0 not configured
"INT340F" at acpi0 not configured
acpicpu0 at acpi0: C3(200@506 mwait.1@0x60), C2(200@148 mwait.1@0x33), 
C1(1000@1 mwait.1), PSS
acpicpu1 at acpi0: C3(200@506 mwait.1@0x60), C2(200@148 mwait.1@0x33), 
C1(1000@1 mwait.1), PSS
acpicpu2 at acpi0: C3(200@506 mwait.1@0x60), C2(200@148 mwait.1@0x33), 
C1(1000@1 mwait.1), PSS
acpicpu3 at acpi0: C3(200@506 mwait.1@0x60), C2(200@148 mwait.1@0x33), 
C1(1000@1 mwait.1), PSS
acpipwrres0 at acpi0: PUBS, resource for XHCI, EHC1
acpitz0 at acpi0: critical temperature is 200 degC
acpivideo0 at acpi0: VID_
acpivout0 at acpivideo0: LCD0
acpivideo1 at acpi0: VID_
cpu0: using VERW MDS workaround (except on vmm entry)
cpu0: Enhanced SpeedStep 798 MHz: speeds: 2701, 2700, 2600, 2400, 2300, 2100, 
2000, 1800, 1700, 1600, 1400, 1300, 1100, 1000, 800, 756 MHz
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel Core 4G Host" rev 0x0b
inteldrm0 at pci0 dev 2 function 0 "Intel HD Graphics" rev 0x0b
drm0 at inteldrm0
inteldrm0: msi, HASWELL, gen 7
azalia0 at pci0 dev 3 function 0 "Intel Core 4G HD Audio" rev 0x0b: msi
azalia0: No codecs found
xhci0 at pci0 dev 20 function 0 "Intel 8 Series xHCI" rev 0x04: msi, xHCI 1.0
usb0 at xhci0: USB revision 3.0
uhub0 at usb0 configuration 1 interface 0 "Intel xHCI root hub" rev 3.00/1.00 
addr 1
"Intel 8 Series MEI" rev 0x04 at pci0 dev 22 function 0 not configured
puc0 at pci0 dev 22 function 3 "Intel 8 Series KT" rev 0x04: ports: 16 com
com4 at puc0 port 0 apic 2 int 17: ns16550a, 16 byte fifo
com4: probed fifo depth: 0 bytes
em0 at pci0 dev 25 function 0 "Intel I218-LM" rev 0x04: msi, address 
54:ee:75:3d:fb:31
azalia1 at pci0 dev 27 function 0 "Intel 8 Series HD Audio" rev 0x04: msi
azalia1: codecs: Realtek ALC292
audio0 at azalia1
ppb0 at pci0 dev 28 function 0 "Intel 8 Series PCIE" rev 0xe4: msi
pci1 at ppb0 bus 2
ppb1 at pci0 dev 28 function 1 "Intel 8 Series PCIE" rev 0xe4: msi
pci2 at ppb1 bus 3
iwm0 at pci2 dev 0 function 0 "Intel Dual Band Wireless AC 7260" rev 0x83, msi
ehci0 at pci0 dev 29 function 0 "Intel 8 Series USB" rev 0x04: apic 2 int 23
usb1 at ehci0: USB revision 2.0
uhub1 at usb1 configuration 1 interface 0 "Intel EHCI root hub" rev 2.00/1.00 
addr 1
pcib0 at pci0 dev 31 function 0 "Intel 8 Series LPC" rev 0x04
ahci0 at pci0 dev 31 function 2 "Intel 8 Series AHCI" rev 0x04: msi, AHCI 1.3
ahci0: port 0: 6.0Gb/s
scsibus1 at ahci0: 32 targets
sd0 at scsibus1 targ 0 lun 0: <ATA, TOSHIBA THNSNJ51, JULA> naa.500080dc001bf1e2
sd0: 488386MB, 512 bytes/sector, 1000215216 sectors, thin
ichiic0 at pci0 dev 31 function 3 "Intel 8 Series SMBus" rev 0x04: apic 2 int 18
iic1 at ichiic0
isa0 at pcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5 irq 1 irq 12
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0: console keyboard
pms0 at pckbc0 (aux slot)
wsmouse0 at pms0 mux 0
wsmouse1 at pms0 mux 0
pms0: Synaptics clickpad, firmware 8.1, 0x1e2b1 0x940300 0x2d9240 0xd001a3 
0x12e800
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
vmm0 at mainbus0: VMX/EPT
umb0 at uhub0 port 4 configuration 1 interface 0 "Sierra Wireless Inc. Sierra 
Wireless EM7345 4G LTE" rev 2.00/17.29 addr 2
umodem0 at uhub0 port 4 configuration 1 interface 2 "Sierra Wireless Inc. 
Sierra Wireless EM7345 4G LTE" rev 2.00/17.29 addr 2
umodem0: data interface 3, has no CM over data, has break
umodem0: status change notification available
ucom0 at umodem0
uhub2 at uhub1 port 1 configuration 1 interface 0 "Intel Rate Matching Hub" rev 
2.00/0.04 addr 2
uhidev0 at uhub2 port 5 configuration 1 interface 0 "ELAN Touchscreen" rev 
2.00/0.12 addr 3
uhidev0: iclass 3/0, 68 report ids
ums0 at uhidev0 reportid 1: 1 button, tip
wsmouse2 at ums0 mux 0
uhid0 at uhidev0 reportid 2: input=64, output=0, feature=0
uhid1 at uhidev0 reportid 3: input=0, output=31, feature=0
uhid2 at uhidev0 reportid 4: input=19, output=0, feature=0
uhid3 at uhidev0 reportid 10: input=0, output=0, feature=1
ums1 at uhidev0 reportid 68
ums1: mouse has no X report
uvideo0 at uhub2 port 8 configuration 1 interface 0 "Chicony Electronics 
Co.,Ltd. Integrated Camera" rev 2.00/25.09 addr 4
video0 at uvideo0
vscsi0 at root
scsibus2 at vscsi0: 256 targets
softraid0 at root
scsibus3 at softraid0: 256 targets
sd1 at scsibus3 targ 1 lun 0: <OPENBSD, SR CRYPTO, 006>
sd1: 488381MB, 512 bytes/sector, 1000206308 sectors
root on sd1a (f3054894d8af4b99.a) swap on sd1b dump on sd1b
inteldrm0: 2560x1440, 32bpp
wsdisplay0 at inteldrm0 mux 1: console (std, vt100 emulation), using wskbd0
wsdisplay0: screen 1-5 added (std, vt100 emulation)
iwm0: hw rev 0x140, fw ver 17.3216344376.0, address 5c:c5:d4:63:b3:d9


> 
> Index: dev/acpi/acpi.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/acpi.c,v
> retrieving revision 1.391
> diff -u -p -r1.391 acpi.c
> --- dev/acpi/acpi.c   27 Aug 2020 01:08:55 -0000      1.391
> +++ dev/acpi/acpi.c   1 Dec 2020 21:40:03 -0000
> @@ -2980,21 +2980,24 @@ acpi_getprop(struct aml_node *node, cons
>       /* Check properties. */
>       for (i = 0; i < dsd.v_package[1]->length; i++) {
>               struct aml_value *res = dsd.v_package[1]->v_package[i];
> +             struct aml_value *val;
>               int len;
>  
>               if (res->type != AML_OBJTYPE_PACKAGE || res->length != 2 ||
>                   res->v_package[0]->type != AML_OBJTYPE_STRING)
>                       continue;
>  
> -             len = res->v_package[1]->length;
> -             switch (res->v_package[1]->type) {
> +             val = res->v_package[1];
> +             if (val->type == AML_OBJTYPE_OBJREF)
> +                     val = val->v_objref.ref;
> +
> +             len = val->length;
> +             switch (val->type) {
>               case AML_OBJTYPE_BUFFER:
> -                     memcpy(buf, res->v_package[1]->v_buffer,
> -                         min(len, buflen));
> +                     memcpy(buf, val->v_buffer, min(len, buflen));
>                       return len;
>               case AML_OBJTYPE_STRING:
> -                     memcpy(buf, res->v_package[1]->v_string,
> -                         min(len, buflen));
> +                     memcpy(buf, val->v_string, min(len, buflen));
>                       return len;
>               }
>       }
> @@ -3031,14 +3034,22 @@ acpi_getpropint(struct aml_node *node, c
>       /* Check properties. */
>       for (i = 0; i < dsd.v_package[1]->length; i++) {
>               struct aml_value *res = dsd.v_package[1]->v_package[i];
> +             struct aml_value *val;
>  
>               if (res->type != AML_OBJTYPE_PACKAGE || res->length != 2 ||
> -                 res->v_package[0]->type != AML_OBJTYPE_STRING ||
> -                 res->v_package[1]->type != AML_OBJTYPE_INTEGER)
> +                 res->v_package[0]->type != AML_OBJTYPE_STRING)
> +                     continue;
> +
> +             val = res->v_package[1];
> +             if (val->type == AML_OBJTYPE_OBJREF)
> +                     val = val->v_objref.ref;
> +
> +             if (val->type != AML_OBJTYPE_INTEGER)
>                       continue;
>  
> -             if (strcmp(res->v_package[0]->v_string, prop) == 0)
> -                     return res->v_package[1]->v_integer;
> +             if (strcmp(res->v_package[0]->v_string, prop) == 0 &&
> +                 val->type == AML_OBJTYPE_INTEGER)
> +                     return val->v_integer;
>       }
>  
>       return defval;
> @@ -3130,7 +3141,7 @@ const char *acpi_isa_hids[] = {
>  void
>  acpi_attach_deps(struct acpi_softc *sc, struct aml_node *node)
>  {
> -     struct aml_value res;
> +     struct aml_value res, *val;
>       struct aml_node *dep;
>       int i;
>  
> @@ -3141,9 +3152,14 @@ acpi_attach_deps(struct acpi_softc *sc, 
>               return;
>  
>       for (i = 0; i < res.length; i++) {
> -             if (res.v_package[i]->type != AML_OBJTYPE_STRING)
> +             val = res.v_package[i];
> +             if (val->type == AML_OBJTYPE_OBJREF)
> +                     val = val->v_objref.ref;
> +             if (val->type != AML_OBJTYPE_DEVICE) {
> +                     printf("%s: type %d\n", __func__, val->type);
>                       continue;
> -             dep = aml_searchrel(node, res.v_package[i]->v_string);
> +             }
> +             dep = val->node;
>               if (dep == NULL || dep->attached)
>                       continue;
>               dep = aml_searchname(dep, "_HID");
> Index: dev/acpi/acpiprt.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/acpiprt.c,v
> retrieving revision 1.49
> diff -u -p -r1.49 acpiprt.c
> --- dev/acpi/acpiprt.c        11 Apr 2020 11:01:18 -0000      1.49
> +++ dev/acpi/acpiprt.c        1 Dec 2020 21:40:03 -0000
> @@ -272,14 +272,6 @@ acpiprt_prt_add(struct acpiprt_softc *sc
>       }
>  
>       pp = v->v_package[2];
> -     if (pp->type == AML_OBJTYPE_STRING) {
> -             node = aml_searchrel(sc->sc_devnode, pp->v_string);
> -             if (node == NULL) {
> -                     printf("Invalid device\n");
> -                     return;
> -             }
> -             pp = node->value;
> -     }
>       if (pp->type == AML_OBJTYPE_NAMEREF) {
>               node = aml_searchrel(sc->sc_devnode, pp->v_nameref);
>               if (node == NULL) {
> Index: dev/acpi/acpipwrres.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/acpipwrres.c,v
> retrieving revision 1.8
> diff -u -p -r1.8 acpipwrres.c
> --- dev/acpi/acpipwrres.c     6 Apr 2020 00:01:08 -0000       1.8
> +++ dev/acpi/acpipwrres.c     1 Dec 2020 21:40:03 -0000
> @@ -291,10 +291,10 @@ acpipwrres_foundcons(struct aml_node *no
>       for (; i < res.length; i++) {
>               ref = res.v_package[i];
>  
> -             if (ref->type == AML_OBJTYPE_STRING) {
> +             if (ref->type == AML_OBJTYPE_NAMEREF) {
>                       struct aml_node *pnode;
>  
> -                     pnode = aml_searchrel(&aml_root, ref->v_string);
> +                     pnode = aml_searchrel(&aml_root, ref->v_nameref);
>                       if (pnode == NULL) {
>                               DPRINTF(("%s: device %s not found\n",
>                                   DEVNAME(sc), ref->v_string));
> Index: dev/acpi/acpitz.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/acpitz.c,v
> retrieving revision 1.54
> diff -u -p -r1.54 acpitz.c
> --- dev/acpi/acpitz.c 29 Jun 2018 17:39:18 -0000      1.54
> +++ dev/acpi/acpitz.c 1 Dec 2020 21:40:03 -0000
> @@ -304,9 +304,9 @@ acpitz_setfan(struct acpitz_softc *sc, i
>               }
>               for (y = 0; y < res1.length; y++) {
>                       ref = res1.v_package[y];
> -                     if (ref->type == AML_OBJTYPE_STRING) {
> +                     if (ref->type == AML_OBJTYPE_NAMEREF) {
>                               node = aml_searchrel(sc->sc_devnode,
> -                                 ref->v_string);
> +                                 ref->v_nameref);
>                               if (node == NULL) {
>                                       printf("%s: %s[%d.%d] _PR0"
>                                           " not a valid device\n",
> Index: dev/acpi/atk0110.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/atk0110.c,v
> retrieving revision 1.15
> diff -u -p -r1.15 atk0110.c
> --- dev/acpi/atk0110.c        29 Jun 2018 17:39:18 -0000      1.15
> +++ dev/acpi/atk0110.c        1 Dec 2020 21:40:03 -0000
> @@ -230,12 +230,12 @@ aibs_attach_sif(struct aibs_softc *sc, e
>       }
>  
>       for (i = 0, v++; i < n; i++, v++) {
> -             if(v[0]->type != AML_OBJTYPE_STRING) {
> -                     printf("%s: %s: %i: not a string: %i type\n",
> +             if(v[0]->type != AML_OBJTYPE_NAMEREF) {
> +                     printf("%s: %s: %i: not a nameref: %i type\n",
>                           DEVNAME(sc), name, i, v[0]->type);
>                       continue;
>               }
> -             aibs_add_sensor(sc, v[0]->v_string);
> +             aibs_add_sensor(sc, v[0]->v_nameref);
>       }
>  
>       aml_freevalue(&res);
> Index: dev/acpi/dsdt.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/dsdt.c,v
> retrieving revision 1.256
> diff -u -p -r1.256 dsdt.c
> --- dev/acpi/dsdt.c   27 Sep 2020 16:46:15 -0000      1.256
> +++ dev/acpi/dsdt.c   1 Dec 2020 21:40:03 -0000
> @@ -965,6 +965,7 @@ aml_copyvalue(struct aml_value *lhs, str
>               lhs->v_mutex = rhs->v_mutex;
>               break;
>       case AML_OBJTYPE_POWERRSRC:
> +             lhs->node = rhs->node;
>               lhs->v_powerrsrc = rhs->v_powerrsrc;
>               break;
>       case AML_OBJTYPE_METHOD:
> @@ -980,6 +981,7 @@ aml_copyvalue(struct aml_value *lhs, str
>               lhs->v_opregion = rhs->v_opregion;
>               break;
>       case AML_OBJTYPE_PROCESSOR:
> +             lhs->node = rhs->node;
>               lhs->v_processor = rhs->v_processor;
>               break;
>       case AML_OBJTYPE_NAMEREF:
> @@ -995,6 +997,8 @@ aml_copyvalue(struct aml_value *lhs, str
>               aml_addref(lhs->v_objref.ref, "");
>               break;
>       case AML_OBJTYPE_DEVICE:
> +     case AML_OBJTYPE_THERMZONE:
> +             lhs->node = rhs->node;
>               break;
>       default:
>               printf("copyvalue: %x", rhs->type);
> @@ -1035,10 +1039,8 @@ aml_freevalue(struct aml_value *val)
>               acpi_os_free(val->v_buffer);
>               break;
>       case AML_OBJTYPE_PACKAGE:
> -             for (idx = 0; idx < val->length; idx++) {
> -                     aml_freevalue(val->v_package[idx]);
> -                     acpi_os_free(val->v_package[idx]);
> -             }
> +             for (idx = 0; idx < val->length; idx++)
> +                     aml_delref(&val->v_package[idx], "");
>               acpi_os_free(val->v_package);
>               break;
>       case AML_OBJTYPE_OBJREF:
> @@ -1471,11 +1473,11 @@ struct aml_defval {
>       { "_OSI", AML_OBJTYPE_METHOD, 1, aml_callosi },
>  
>       /* Create default scopes */
> -     { "_GPE" },
> -     { "_PR_" },
> -     { "_SB_" },
> -     { "_TZ_" },
> -     { "_SI_" },
> +     { "_GPE", AML_OBJTYPE_DEVICE },
> +     { "_PR_", AML_OBJTYPE_DEVICE },
> +     { "_SB_", AML_OBJTYPE_DEVICE },
> +     { "_TZ_", AML_OBJTYPE_DEVICE },
> +     { "_SI_", AML_OBJTYPE_DEVICE },
>  
>       { NULL }
>  };
> @@ -3875,17 +3877,13 @@ aml_parse(struct aml_scope *scope, int r
>       case AMLOP_NAMECHAR:
>               /* opargs[0] = named object (node != NULL), or nameref */
>               my_ret = opargs[0];
> -             if (scope->type == AMLOP_PACKAGE) {
> +             if (scope->type == AMLOP_PACKAGE && my_ret->node) {
>                       /* Special case for package */
> -                     if (my_ret->type == AML_OBJTYPE_NAMEREF)
> -                             my_ret = aml_allocvalue(AML_OBJTYPE_STRING, -1,
> -                                 aml_getname(my_ret->v_nameref));
> -                     else if (my_ret->node)
> -                             my_ret = aml_allocvalue(AML_OBJTYPE_STRING, -1,
> -                                 aml_nodename(my_ret->node));
> -                     break;
> -             }
> -             if (my_ret->type == AML_OBJTYPE_OBJREF) {
> +                     my_ret = aml_allocvalue(AML_OBJTYPE_OBJREF,
> +                         AMLOP_NAMECHAR, 0);
> +                     my_ret->v_objref.ref = opargs[0];
> +                     aml_addref(my_ret, "package");
> +             } else if (my_ret->type == AML_OBJTYPE_OBJREF) {
>                       my_ret = my_ret->v_objref.ref;
>                       aml_addref(my_ret, "de-alias");
>               }
> @@ -4617,15 +4615,17 @@ acpi_getdevlist(struct acpi_devlist_head
>      struct aml_value *pkg, int off)
>  {
>       struct acpi_devlist *dl;
> -     struct aml_node *node;
> +     struct aml_value *val;
>       int idx;
>  
> -     for (idx=off; idx<pkg->length; idx++) {
> -             node = aml_searchname(root, pkg->v_package[idx]->v_string);
> -             if (node) {
> +     for (idx = off; idx < pkg->length; idx++) {
> +             val = pkg->v_package[idx];
> +             if (val->type == AML_OBJTYPE_OBJREF)
> +                     val = val->v_objref.ref;
> +             if (val->node) {
>                       dl = acpi_os_malloc(sizeof(*dl));
>                       if (dl) {
> -                             dl->dev_node = node;
> +                             dl->dev_node = val->node;
>                               TAILQ_INSERT_TAIL(list, dl, dev_link);
>                       }
>               }
> @@ -4642,4 +4642,5 @@ acpi_freedevlist(struct acpi_devlist_hea
>               acpi_os_free(dl);
>       }
>  }
> +
>  #endif /* SMALL_KERNEL */
> 


-- 
I'm not entirely sure you are real.

Reply via email to