On Tue, Dec 09, 2014 at 09:30:55PM +0100, Alexander Bluhm wrote:
> On Tue, Nov 11, 2014 at 04:45:50PM +0100, Christian Weisgerber wrote:
> > Occasionally, when I power on my Thinkpad X230, it resets during
> > kernel autoconf: white-on-blue kernel messages -> boom! Thinkpad
> > logo. It subsequently boots fine. Today I finally thought to save
> > the dmesg, and it shows that the first boot was cut short at or after
> > pckbd0 attaching.
>
> Exactly the same happens with my T430s from time to time.
Looks like it happens in config_found_sm() called from pckbc_attach_slot().
I will add more printf there.
After reboot I have this in my dmesg:
isa0 at pcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5
func pckbc_attach, line 299: start
func pckbc_attach, line 310: call pckbc_poll_data1
func pckbc_attach, line 315: call pckbc_put8042cmd
func pckbc_attach, line 360: call pckbc_attach_slot
func pckbc_attach_slot, line 269: start
func pckbc_attach_slot, line 272: call config_found_sm
pckbd0 at pckbc0 (kbd slot)
OpenBSD 5.6-current (GENERIC.MP) #132: Tue Dec 30 13:59:30 CET 2014
[email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
Normal output would be:
func pckbc_attach_slot, line 269: start
func pckbc_attach_slot, line 272: call config_found_sm
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
func pckbc_attach_slot, line 286: end
262 int
263 pckbc_attach_slot(struct pckbc_softc *sc, pckbc_slot_t slot, int force)
264 {
265 struct pckbc_internal *t = sc->id;
266 struct pckbc_attach_args pa;
267 int found;
268
269 printf("func %s, line %d: start\n", __func__, __LINE__);
270 pa.pa_tag = t;
271 pa.pa_slot = slot;
272 printf("func %s, line %d: call config_found_sm\n", __func__, __LINE__);
273 found = (config_found_sm((struct device *)sc, &pa, pckbcprint,
274 force ? pckbc_submatch_locators : pckbc_submatch) != NULL);
275
276 if (found && !t->t_slotdata[slot]) {
277 t->t_slotdata[slot] = malloc(sizeof(struct
pckbc_slotdata),
278 M_DEVBUF, M_NOWAIT);
279 if (t->t_slotdata[slot] == NULL) {
280 printf("func %s, line %d: end\n", __func__, __LINE__);
281 return 0;
282 }
283 printf("func %s, line %d: call pckbc_init_slotdata\n", __func__,
__LINE__);
284 pckbc_init_slotdata(t->t_slotdata[slot]);
285 }
286 printf("func %s, line %d: end\n", __func__, __LINE__);
287 return (found);
288 }