ACPI error messages on Lenovo W540

Eric McCorkle eric at metricspace.net
Sun Aug 17 15:17:23 UTC 2014


Actually, I managed to get a kernel panic to happen, which provides some 
more information:

NVRM: GPU at 0000:01:00.0 has fallen off the bus.
NVRM: RmInitAdapter failed! (0x25:0x28:1169)
nvidia0: NVRM: rm_init_adapter() failed!


Fatal trap 12: page fault while in kernel mode
cpuid = 2; apic id = 02
fault virtual address	= 0x8
fault code		= supervisor read data, page not present
instruction pointer	= 0x20:0xffffffff817eeeb5
stack pointer	        = 0x28:0xfffffe021d481420
frame pointer	        = 0x28:0xfffffe021d481500
code segment		= base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags	= interrupt enabled, resume, IOPL = 3
current process		= 73254 (Xorg)
trap number		= 12
panic: page fault
cpuid = 2
Uptime: 12h17m8s

It looks like rm_init_adapter is contained in nvidia's .o file that 
comes with the driver, so I'm out of luck for trying to track it down. 
I can't tell whether this is caused by the ACPI errors or not...

On 08/17/2014 08:31, Eric McCorkle wrote:
> Finally got time to do some more poking around regarding this.  I
> haven't read the entire ACPI spec, so bear with me...
>
> As John Baldwin said, the wrapper nvidia_acpi.c passes in a buffer
> instead of a package.  In the definition for _DSM, you can see calls to
> NVOP, NVPS, and NBCI.  I looked at all three, and they seem to treat
> Arg3 as a buffer as well (they call CreateField on it, which according
> to the ACPI spec, should take a buffer argument).
>
> So it looks like both the nvidia driver as well as the ALS code are
> pretty thoroughly convinced that Arg3 (the fourth arg) is a buffer
> instead of a package, despite what the spec says about what it "should" be.
>
> Could this possibly be fixed by adding some kind of quirk to the ACPI
> execution engine that says "_DSM's fourth argument is a buffer"?
>
> On 06/24/2014 20:51, Eric McCorkle wrote:
>>
>> It looks like this is the definition:
>>
>>                      Method (_DSM, 4, NotSerialized)  // _DSM:
>> Device-Specific Method
>>                      {
>>                          If (\CMPB (Arg0, Buffer (0x10)
>>                                  {
>>                                      /* 0000 */   0xF8, 0xD8, 0x86,
>> 0xA4, 0xDA, 0x0B, 0x1B, 0x47,
>>                                      /* 0008 */   0xA7, 0x2B, 0x60,
>> 0x42, 0xA6, 0xB5, 0xBE, 0xE0
>>                                  }))
>>                          {
>>                              Return (NVOP (Arg0, Arg1, Arg2, Arg3))
>>                          }
>>
>>                          If (\CMPB (Arg0, Buffer (0x10)
>>                                  {
>>                                      /* 0000 */   0x01, 0x2D, 0x13,
>> 0xA3, 0xDA, 0x8C, 0xBA, 0x49,
>>                                      /* 0008 */   0xA5, 0x2E, 0xBC,
>> 0x9D, 0x46, 0xDF, 0x6B, 0x81
>>                                  }))
>>                          {
>>                              Return (NVPS (Arg0, Arg1, Arg2, Arg3))
>>                          }
>>
>>                          If (\WIN8)
>>                          {
>>                              If (\CMPB (Arg0, Buffer (0x10)
>>                                      {
>>                                          /* 0000 */   0x75, 0x0B, 0xA5,
>> 0xD4, 0xC7, 0x65, 0xF7, 0x46,
>>                                          /* 0008 */   0xBF, 0xB7, 0x41,
>> 0x51, 0x4C, 0xEA, 0x02, 0x44
>>                                      }))
>>                              {
>>                                  Return (NBCI (Arg0, Arg1, Arg2, Arg3))
>>                              }
>>                          }
>>
>>                          Return (Buffer (0x04)
>>                          {
>>                               0x01, 0x00, 0x00, 0x80
>>                          })
>>                      }
>>
>> Not sure if that's helpful at all...
>>
>>> Ah, the nvidia driver calls _DSM and it has the bug.  In its
>>> nvidia_acpi.c file
>>> it uses a Buffer instead of a Package for the fourth argument to
>>> _DSM.  OTOH, the
>>> warning doesn't prevent the method from running, so the warning may be
>>> harmless.
>>> You can try contacting the nvidia folks to tell them about the warning
>>> and point
>>> out the bug in their _DSM wrapper in nvidia_acpi.c to see what they say.
>>
>> Will do.  Is there a preferred point of contact?
> _______________________________________________
> freebsd-acpi at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-acpi
> To unsubscribe, send any mail to "freebsd-acpi-unsubscribe at freebsd.org"


More information about the freebsd-acpi mailing list