E fechando o ano de 2012, um último artigo sobre hibernação no Ubuntu 12.10, que é pra lembrar de entrar 2013 bem descansado :-)

Escrevo um artigo sobre a utilização do laptop sem ficar desligando, a guerra dos 100 dias, e seus benefícios e então me deparo justamente com um upgrade de sistema que não funciona com a hibernação.  E em menos de 6 meses.

Tudo começou quando decidi passar o laptop de 32 bits para 64 (processador Intel Core i3).  Minha limitação para não realizar tal tarefa antes era o sistema de SSL VPN, da Juniper, usado pela empresa para conectar remotamente.  O sistema de VPN inicia um applet java que instala e roda uma biblioteca de 32 bits.  

Já fazia algum tempo, eu vinha testando rodar isso em um modo "híbrido", com a funcionalidade de multi-arch ou com chroot de um ambiente de 32 bits.  Como tudo estava funcionando nos testes, resolvi mudar o sistema aproveitando as férias de fim de ano.

Eu estava com Ubuntu 12.04 para i386, LTS, e resolvi instalar o 12.10 para amd64.  Eu poderia ter escolhido um upgrade do sistema, que aparentemente funcionaria, mas resolvi fazer uma instalação nova, o que acabou me gerando a perda de dados do /home, mas essa é outra história.

Ao finalizar a instalação do 12.10 (e recuperar minha partição perdida - mas não completamente, duh!), eu me deparei com um kernel mais novo: 3.5.0-21-lowlatency.  Anteriormente eu estava rodando o 3.2.7-pf (post factum).  Não consegui fazer funcionar a hibernação de jeito nenhum.  Nem com pm-suspend, nem com pm-hibernate, nem com o novo método, o pm-suspend-hybrid.  Em todos os casos o sistema travava logo no início da hibernação e me deixava com uma tela preta, sistema operacional travado, mas máquina ligada.  Somente um procedimento de "dedo-off" conseguia desligar o laptop.  E sem nenhum log de problema por parte do ACPI.

Tentei recompilar o kernel, instalar outra versão, a versão sem lowlatency, enfim de tudo.  Mas sem resultados.

Por um acaso, notei um erro no sistema pelo "dmesg".  No começo achei que era problema da minha memória RAM.


[    5.974345] BUG: unable to handle kernel paging request at 0000000000ff1000
[    5.974351] IP: [] memcpy+0xd/0x110
[    5.974359] PGD 1b0dbc067 PUD 1b0db9067 PMD 0 
[    5.974363] Oops: 0000 [#1] SMP 
[    5.974366] CPU 2 
[    5.974367] Modules linked in: snd_page_alloc drm_kms_helper serio_raw drm 
coretemp cfg80211 kvm_intel i2c_algo_bit kvm videobuf2_vmalloc videobuf2_memops 
mxm_wmi wmi sony_laptop(+) intel_ips microcode mac_hid video mei lpc_ich btusb 
bluetooth xfs firewire_ohci firewire_core crc_itu_t sdhci_pci sdhci atl1c
[    5.974385] 
[    5.974387] Pid: 637, comm: modprobe Not tainted 3.5.0-17-generic #28-Ubuntu 
Sony Corporation VPCS110GB/VAIO
[    5.974390] RIP: 0010:[]  [] memcpy+0xd/0x110
[    5.974394] RSP: 0018:ffff8801b0d31c40  EFLAGS: 00010246
[    5.974395] RAX: ffff8801b0d31c90 RBX: ffff8801ae9545c0 RCX: 0000000000000001
[    5.974397] RDX: 0000000000000000 RSI: 0000000000ff1000 RDI: ffff8801b0d31c90
[    5.974398] RBP: ffff8801b0d31c58 R08: ffff8801b2218200 R09: 000000018040003e
[    5.974399] R10: 0000000000000000 R11: ffffffff813ad3e5 R12: ffff8801b0d31c90
[    5.974401] R13: ffff8801b0d31caf R14: ffff8801b22f4800 R15: 0000000000000135
[    5.974403] FS:  00007fb7feb92700(0000) GS:ffff8801bbc80000(0000) knlGS:0000000000000000
[    5.974404] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[    5.974405] CR2: 0000000000ff1000 CR3: 00000001b271d000 CR4: 00000000000007e0
[    5.974407] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[    5.974408] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[    5.974410] Process modprobe (pid: 637, threadinfo ffff8801b0d30000, task ffff8801b0d8c500)
[    5.974411] Stack:
[    5.974413]  ffffffffa01a8893 0000000000000009 0000000000000035 ffff8801b0d31ce8
[    5.974416]  ffffffffa01a9b69 ffff8801b16986a0 ffff8801b0067800 ffff8801b0d31c80
[    5.974419]  ffffffff00000000 0000000000000009 0000000000000000 0000000000000000
[    5.974422] Call Trace:
[    5.974430]  [] ? sony_nc_buffer_call.constprop.12+0x43/0xa0 [sony_laptop]
[    5.974435]  [] sony_nc_function_setup+0x2f9/0xab0 [sony_laptop]
[    5.974440]  [] sony_nc_add+0x1f8/0x660 [sony_laptop]
[    5.974446]  [] ? sysfs_do_create_link+0xeb/0x200
[    5.974451]  [] acpi_device_probe+0x50/0x11d
[    5.974457]  [] driver_probe_device+0x7e/0x220
[    5.974460]  [] __driver_attach+0xab/0xb0
[    5.974462]  [] ? driver_probe_device+0x220/0x220
[    5.974465]  [] bus_for_each_dev+0x55/0x90
[    5.974468]  [] ? 0xffffffffa01b4fff
[    5.974470]  [] driver_attach+0x1e/0x20
[    5.974473]  [] bus_add_driver+0x198/0x270
[    5.974475]  [] ? 0xffffffffa01b4fff
[    5.974478]  [] driver_register+0x77/0x150
[    5.974483]  [] ? dmi_matches+0x53/0xc0
[    5.974485]  [] ? 0xffffffffa01b4fff
[    5.974488]  [] acpi_bus_register_driver+0x3e/0x47
[    5.974492]  [] sony_laptop_init+0x57/0x1000 [sony_laptop]
[    5.974498]  [] do_one_initcall+0x12a/0x180
[    5.974502]  [] sys_init_module+0xc2/0x230
[    5.974508]  [] system_call_fastpath+0x16/0x1b
[    5.974509] Code: 2b 43 50 88 43 4e 48 83 c4 08 5b 5d c3 90 e8 eb fb ff ff 
eb e6 90 90 90 90 90 90 90 90 90 48 89 f8 48 89 d1 48 c1 e9 03 83 e2 07  
48 a5 89 d1 f3 a4 c3 20 4c 8b 06 4c 8b 4e 08 4c 8b 56 10 4c 
[    5.974539] RIP  [] memcpy+0xd/0x110
[    5.974542]  RSP 
[    5.974543] CR2: 0000000000ff1000
[    5.974545] ---[ end trace 67f7b54c3f5c5271 ]---

Como a danada da falha mostrava um erro com "memcpy+0xd/0x110", eu imaginei que era falha de cópia de dados pra alguma endereço da memória RAM, ou seja, o pente de memória que comprei no #DX estava com problemas, o que denota a máxima de que, na dúvida, culpe o fornecedor Chinês mais próximo de você.

Passei os restantes dos dias buscando por mais reclamações sobre problemas de hibernação no Ubuntu 12.10 ou algo parecido, e... nada.  Comecei a desconfiar mesmo dos produtos chineses, a ponto de passar 2 dias rodando memtest pra verificar o estado da RAM, procedimento aliás que só causa expectativa seguida de frustração, e não tira o produto Chinês da mira de vilão da história.

Hoje, por um acaso muito grande, eu resolvi buscar pelo erro do bug, mas na verdade para buscar alguma ferramenta para bloquear o segmento de memória danificado.  Então busquei pela linha:

BUG: unable to handle kernel paging request at

E encontrei umas referências sobre problemas em... Sony Vaio!  Justamente a marca do meu laptop.  Coincidência?

Então resolvi buscar diretamente o endereço de memória do meu problema:

BUG: unable to handle kernel paging request at 0000000000ff1000

E não é que peguei um problema reportado e bem descrito no Launchpad, o sistema de reporte de bugs do Ubuntu? Eu nunca tinha encontrado referências a esse bug porque a descrição fala de problema de Sony Vaio (outro duh!).

[SONY VAIO VPCS12L9E] Suspend doesn't work after dist-upgrade to Quantal 12.10

Felizmente a pessoa que abriu o bug report fez uma bela descrição do problema e também de uma solução.  Apenas apliquei os seguintes passos para ter meu sistema funcionando corretamente:

sudo add-apt-repository ppa:shiba89/vaio-kernel
sudo apt-get update
sudo apt-get install linux-headers-generic sony-laptop-dkms

Com isso, no boot seguinte tive a comprovação de que meu laptop voltou à hibernar feito um bebê.  E com isso fecho 2012 sem pendências, ao menos pessoais, para 2013.

E que venha 2013!  Se sobrevivemos ao fim do mundo segundo os Maias, não é um problema de kernel que vai nos segurar!