Desde o início de maio de 2018, tenho me aprofundado no subsistema do DRM. No começo, nada fazia sentido para mim e tive que me esforçar muito para entender como as coisas funcionam. Felizmente, não estava sozinho e tive grande apoio de Gustavo Padovan, Daniel Vetter, Haneen Mohammed e de toda a comunidade. Como resultado, finalmente entreguei um novo recurso para o VKMS: a infraestrutura para eventos de Vblank e de Page Flip.
O VKMS possui eventos Vblank regulares simulados por meio de hrtimers (consulte
drm-misc-next), recurso esse necessário para que o VKMS imite o hardware real
[1]. A abordagem de desenvolvimento foi
inteiramente orientada pelos testes fornecidos pela IGT, mais especificamente o
kms_flip. Modifiquei o IGT para fazer com que a ferramenta leia o nome de um
módulo via linha de comando e forçar o uso dele, em vez de usar apenas os
módulos definidos no código (patch enviado para o IGT [2]).
Com essa modificação no IGT, meu processo de desenvolvimento para adicionar uma
infraestrutura Vblank ao VKMS teve três etapas principais, conforme descrito na
figura abaixo:
Primeiramente, concentrei-me apenas no subteste “basic-plain-flip” do IGT e,
após cada execução do teste, verifiquei as mensagens de falha. Em segundo
lugar, tentei escrever o código necessário para que o teste passasse; é
essencial destacar que essa fase, por vezes, levou dias devido ao processo de
entender o problema e implementar a correção. Finalmente, após superar a falha
de cada teste, me esforcei ainda mais para aprimorar a implementação. Como pode
ser visto no conjunto de patches enviado para adicionar o suporte a Vblank
[3], o primeiro conjunto de patches não
estava diretamente relacionado ao Vblank em si, mas era uma infraestrutura
necessária para que o kms_flip funcionasse.
Após um longo período de trabalho para fazer o VKMS passar no teste
basic-plain-flip, eu finalmente obtive sucesso, tudo isso graças a todo o
suporte que recebi da comunidade DRM. Em seguida, comecei a trabalhar no
subteste wf_vblank-ts-check, e aqui passei muito tempo depurando problemas.
Meu problema aqui era devido ao comportamento estocástico do teste, às vezes
passava e outras vezes falhava, e eu presumi que o problema estava relacionado
ao acúmulo de erros durante a etapa de virada de página. Como resultado, me
concentrei um bom tempo para tornar o tempo na virada o mais preciso possível,
e acabei com um patch que calcula o momento exato para o próximo período
[4]. No entanto, depois que enviei o patch,
Chris Wilson destacou que eu estava reinventando a roda, já que o hrtimer já
fazia os cálculos necessários [5]; Ele
estava 100% certo. Após seu comentário, examinei linha por linha o
hrtimer_forward e concluí que havia implementado o mesmo algoritmo. Perdi
alguns dias recriando algo que, no final, não é útil; no entanto, foi realmente
valioso para mim, pois aprendi como o hrtimer funciona e também expandi minha
compreensão sobre o Vblank. Finalmente, Daniel Vetter apontou precisamente uma
série de problemas no patch [6] que não apenas
melhoraram os testes, mas também fizeram com que a maioria dos testes no
kms_flip passassem.
Concluindo, adicionar a infraestrutura para o Vblank e eventos de virada de página no vkms foi um recurso interessante para o VKMS, mas também foi uma tarefa importante para me ensinar como as coisas funcionam no DRM. Ainda estou focado nesta parte do VKMS, mas agora estou começando a pensar em como posso adicionar hardware virtual que não suporta interrupção do Vblank. Por fim, quero escrever um post detalhado sobre como implementei o suporte a Vblank no VKMS e outro sobre temporizadores (usuários e espaço do kernel); acredito que esse tipo de post pode ser útil para alguém que está começando no subsistema DRM.
Agradeço a toda a comunidade DRM que é sempre gentil e fornece grande ajuda para um novato como eu :)
Referências
[1] “DRM misc-next”. URL: https://cgit.freedesktop.org/drm/drm-misc/. ⤴
[2] “Opção de forçar no IGT”. URL: https://www.spinics.net/lists/intel-gfx/msg170670.html. ⤴
[3] “Adicionando infraestrutura para eventos de Vblank e Page Flip no VKMS”. URL: https://www.spinics.net/lists/dri-devel/msg182903.html. ⤴
[4] “Cálculo do período”. URL: https://www.spinics.net/lists/dri-devel/msg182037.html. ⤴
[5] “Comentário do Chris Wilson sobre hrtimer”. URL: https://www.spinics.net/lists/dri-devel/msg182037.html. ⤴
[6] “Comentário do Daniel Vetter na V2”. URL: https://www.spinics.net/lists/dri-devel/msg182037.html. ⤴
Articles from blogs I follow around the net
Status update, November 2025
Hi! This month a lot of new features have added to the Goguma mobile IRC client. Hubert Hirtz has implemented drafts so that unsent text gets saved and network disconnections don’t disrupt users typing a message. He also enabled replying to one’s own messages…
via emersion November 16, 2025Kworkflow at Kernel Recipes 2025
This was the first year I attended Kernel Recipes and I have nothing but say how much I enjoyed it and how grateful I’m for the opportunity to talk more about kworkflow to very experienced kernel developers. What I mostly like about Kernel Recipes is its inti…
via Wen.onweb November 3, 2025October/November Conference News
The last part of October brings us a whole pile of events, with many of them featuring talks by Igalians. After the month ends, we’re looking forward to a couple of events in November. Here’s where we’ll be presenting talks: RISC-V Summit North America, O…
via Igalia October 22, 2025Generated by openring
