DRM: example fails to page flip with EBUSY
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 30/100
- Type d'issue
- Bug
- Clarté
- À clarifier
- Activité
- À l'abandon
- Stack technique
- linux, rust
- Domaine
- operating-systems
Piste de recherche
Commencez par l’exemple drm du dépôt et reproduisez l’échec du premier page flip sur la configuration Linux DRM signalée. Comparez son comportement avec celui de l’exemple fonctionnel legacy_modeset dans le drm-rs de Smithay, puis suivez les erreurs de page flip et de fallback jusqu’à ce que l’exemple termine son premier flip sans EBUSY.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
The drm example fails for me while trying the first page filp (of course, no other software is using the DRM). I have tried the legacy_modeset example of https://github.com/Smithay/drm-rs and it works, so I'm probably missing something, but I'm at a loss about what. Anyway, the output is:
Drawing tick 1
Error: PlatformError(Some("failed to page flip"), Some(Os { code: 16, kind: ResourceBusy, message: "Device or resource busy" }))
and, when run through strace, the output is:
$ strace -e ioctl ./drm
ioctl(3, DRM_IOCTL_MODE_GETRESOURCES, 0xbeff5840) = 0
ioctl(3, DRM_IOCTL_MODE_GETRESOURCES, 0xbeff5898) = 0
ioctl(3, DRM_IOCTL_MODE_GETCONNECTOR, 0xbeff5580) = 0
ioctl(3, DRM_IOCTL_MODE_GETCONNECTOR, 0xbeff5690) = 0
ioctl(3, DRM_IOCTL_MODE_GETRESOURCES, 0xbeff5960) = 0
ioctl(3, DRM_IOCTL_MODE_GETRESOURCES, 0xbeff59b8) = 0
ioctl(3, DRM_IOCTL_MODE_GETCONNECTOR, 0xbeff5330) = 0
ioctl(3, DRM_IOCTL_MODE_GETCONNECTOR, 0xbeff5440) = 0
ioctl(3, DRM_IOCTL_MODE_GETCRTC, 0xbeff5200) = 0
ioctl(3, DRM_IOCTL_MODE_GETPLANERESOURCES, 0xbeff5c00) = 0
ioctl(3, DRM_IOCTL_MODE_GETPLANERESOURCES, 0xbeff5c28) = 0
ioctl(3, DRM_IOCTL_MODE_GETPLANE, 0xbeff5940) = 0
ioctl(3, DRM_IOCTL_MODE_GETPLANE, 0xbeff59b8) = 0
ioctl(3, DRM_IOCTL_MODE_OBJ_GETPROPERTIES, 0xbeff58b0) = 0
ioctl(3, DRM_IOCTL_MODE_OBJ_GETPROPERTIES, 0xbeff5908) = 0
ioctl(3, DRM_IOCTL_MODE_GETPROPERTY, 0xbeff56c0) = 0
ioctl(3, DRM_IOCTL_MODE_GETPROPERTY, 0xbeff56c0) = 0
ioctl(3, DRM_IOCTL_MODE_GETPLANE, 0xbeff43e8) = 0
ioctl(3, DRM_IOCTL_MODE_GETPLANE, 0xbeff4460) = 0
ioctl(3, DRM_IOCTL_MODE_GETRESOURCES, 0xbeff4260) = 0
ioctl(3, DRM_IOCTL_MODE_GETRESOURCES, 0xbeff42b8) = 0
ioctl(3, DRM_IOCTL_MODE_GETCRTC, 0xbeff41e8) = 0
ioctl(3, DRM_IOCTL_MODE_GETENCODER, 0xbeff3fc0) = 0
ioctl(3, DRM_IOCTL_MODE_GETCONNECTOR, 0xbeff3ae8) = 0
ioctl(3, DRM_IOCTL_MODE_GETCONNECTOR, 0xbeff3bf8) = 0
ioctl(3, DRM_IOCTL_MODE_CREATE_DUMB, 0xbeff57e0) = 0
ioctl(3, DRM_IOCTL_MODE_ADDFB, 0xbeff580c) = 0
ioctl(3, DRM_IOCTL_MODE_CREATE_DUMB, 0xbeff57e0) = 0
ioctl(3, DRM_IOCTL_MODE_ADDFB, 0xbeff580c) = 0
Drawing tick 1
ioctl(3, DRM_IOCTL_MODE_MAP_DUMB, 0xbeff57e0) = 0
ioctl(3, DRM_IOCTL_MODE_DIRTYFB, 0xbeff5968) = -1 ENOSYS (Function not implemented)
ioctl(3, DRM_IOCTL_MODE_PAGE_FLIP, 0xbeff59e0) = -1 EBUSY (Device or resource busy)
ioctl(3, DRM_IOCTL_MODE_SETCRTC, 0xbeff57a8) = -1 ENOENT (No such file or directory)
Error: PlatformError(Some("failed to page flip"), Some(Os { code: 16, kind: ResourceBusy, message: "Device or resource busy" }))
+++ exited with 1 +++
Output of dmesg after running echo 0x1FF > /sys/module/drm/parameters/debug (if it helps, I don't see anything that stands out):
[ 1562.723216] [drm:drm_stub_open]
[ 1562.725739] [drm:drm_open] comm="drm", pid=1596, minor=0
[ 1562.736148] [drm:drm_legacy_setup]
[ 1562.741258] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETRESOURCES
[ 1562.751288] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETRESOURCES
[ 1562.761361] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETCONNECTOR
[ 1562.771022] [drm:drm_mode_object_put.part.0] OBJ ID: 32 (3)
[ 1562.776034] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETCONNECTOR
[ 1562.788027] [drm:drm_mode_object_put.part.0] OBJ ID: 32 (3)
[ 1562.793368] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETRESOURCES
[ 1562.805019] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETRESOURCES
[ 1562.815105] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETCONNECTOR
[ 1562.824827] [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:32:DPI-1]
[ 1562.833157] [drm:ltdc_crtc_mode_valid] clk rate target 30000000, available 30000000
[ 1562.842140] [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:32:DPI-1] probed modes :
[ 1562.851654] [drm:drm_mode_debug_printmodeline] Modeline "800x480": 53 30000 800 1010 1020 1066 480 502 507 530 0x48 0xa
[ 1562.863491] [drm:drm_mode_object_put.part.0] OBJ ID: 32 (3)
[ 1562.870007] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETCONNECTOR
[ 1562.879699] [drm:drm_mode_object_put.part.0] OBJ ID: 32 (3)
[ 1562.886458] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETCRTC
[ 1562.895872] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETPLANERESOURCES
[ 1562.906373] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETPLANERESOURCES
[ 1562.916615] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETPLANE
[ 1562.926311] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETPLANE
[ 1562.935795] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_OBJ_GETPROPERTIES
[ 1562.946094] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_OBJ_GETPROPERTIES
[ 1562.956634] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETPROPERTY
[ 1562.966432] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETPROPERTY
[ 1562.976401] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETPLANE
[ 1562.985868] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETPLANE
[ 1562.995237] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETRESOURCES
[ 1563.005251] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETRESOURCES
[ 1563.015296] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETCRTC
[ 1563.024833] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETENCODER
[ 1563.034890] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETCONNECTOR
[ 1563.046099] [drm:drm_mode_object_put.part.0] OBJ ID: 32 (3)
[ 1563.052678] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_GETCONNECTOR
[ 1563.062548] [drm:drm_mode_object_put.part.0] OBJ ID: 32 (3)
[ 1563.069357] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_CREATE_DUMB
[ 1563.096140] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_ADDFB
[ 1563.103837] stm32-display 5a001000.display-controller: [drm:drm_mode_addfb2] [FB:49]
[ 1563.119119] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_CREATE_DUMB
[ 1563.131434] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_ADDFB
[ 1563.139501] stm32-display 5a001000.display-controller: [drm:drm_mode_addfb2] [FB:50]
[ 1563.156885] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_MAP_DUMB
[ 1563.200312] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_DIRTYFB
[ 1563.208385] [drm:drm_mode_object_put.part.0] OBJ ID: 49 (2)
[ 1563.214221] [drm:drm_ioctl] comm="drm", pid=1596, ret=-38
[ 1563.227757] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_PAGE_FLIP
[ 1563.236096] [drm:drm_ioctl] comm="drm", pid=1596, ret=-16
[ 1563.244643] [drm:drm_ioctl] comm="drm" pid=1596, dev=0xe200, auth=1, DRM_IOCTL_MODE_SETCRTC
[ 1563.254226] [drm:drm_mode_setcrtc] [CRTC:41:crtc-0]
[ 1563.260153] [drm:drm_mode_setcrtc] Unknown FB ID0
[ 1563.264187] [drm:drm_ioctl] comm="drm", pid=1596, ret=-2
[ 1563.272659] [drm:drm_release] open_count = 1
[ 1563.276289] [drm:drm_file_free.part.0] comm="drm", pid=1596, dev=0xe200, open_count=1
[ 1563.288789] [drm:drm_mode_object_put.part.0] OBJ ID: 50 (1)
[ 1563.293750] [drm:drm_mode_object_put.part.0] OBJ ID: 49 (1)
[ 1563.303107] [drm:_drm_lease_revoke] revoke leases for 4560017b 0
[ 1563.310178] [drm:drm_lease_destroy] drm_lease_destroy 0
[ 1563.314713] [drm:drm_master_destroy] drm_lease_destroy done 0
[ 1563.323514] [drm:drm_lastclose]
[ 1563.326033] [drm:drm_lastclose] driver lastclose completed
- Langage dominant
- Rust
- Étoiles
- 507
- Forks
- 85
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Aucun guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de rust-windowing/softbuffer
-
DS - X11
Difficulté 3/5 1-2 jours Accessibilité débutants 48/100
rust-windowing/softbuffer#368 ·
-
`Buffer<'_>` shouldn't be `Send`Peut-être pris @Guflly l’a pris il y a 80 jours. Ouvertebug DS - Android NDK
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
rust-windowing/softbuffer#347 · 1 commentaire ·
-
Needs Design Work
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
rust-windowing/softbuffer#342 · 1 commentaire ·
-
enhancement question
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
rust-windowing/softbuffer#338 ·
-
Zero-copying on AndroidPeut-être pris @MarijnS95 l’a pris il y a 262 jours. OuverteDS - Android NDK enhancement
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
rust-windowing/softbuffer#318 · 2 commentaires ·
Toutes les issues de rust-windowing/softbuffer
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
git-ai-project/git-ai#2434 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
peteonrails/voxtype#909 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
kucherenko/jscpd#1239 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 69/100
alchemyplatform/rundler#1358 ·
Les mainteneurs répondent en général sous 3 jours