Den 28.01.2019 09.10, skrev Gerd Hoffmann: >>> The cursor must be set again after creating the primary surface. >>> Also drop the error message. > >>> if (!bo->is_primary) { >>> - if (!same_shadow) >>> + if (!same_shadow) { >>> qxl_io_create_primary(qdev, 0, bo); >>> + qxl_primary_apply_cursor(plane); >>> + } >>> bo->is_primary = true; >>> } >>> >>> >> >> I don't see how the commit message matches what you're doing. It gives >> the impression that it must be applied under yet another condition, but >> the condition for applying the cursor is changed from bo_old->is_primary >> to !bo->is_primary. > > The qxl device ties the cursor to the primary surface. Therefore > calling qxl_io_destroy_primary() and qxl_io_create_primary() to switch > the framebuffer causes the cursor information being lost and the driver > must re-apply it. > > The correct call order to do that is qxl_io_destroy_primary() + > qxl_io_create_primary() + qxl_primary_apply_cursor(). > > The old code did qxl_io_destroy_primary() + qxl_primary_apply_cursor() + > qxl_io_create_primary(). Due to qxl_primary_apply_cursor request being > queued in a ringbuffer and qxl_io_create_primary() trapping to the > hypervisor instantly there is a high chance that qxl_io_create_primary() > is processed first even with the wrong call order. But it's racy and > thus not reliable. > >> It probably makes sense to someone that knows the driver. > > If the above explains things better to you I should probably replace the > commit message with that. >
This is actually my first review of a driver that I'm not familiar with. I'm not quite sure how much in depth understanding that is required to put my ack on it. Going further into the patchset I realised that there's no way that I can verify the logic without being intimate with the driver. So I have tried to verify things from a kms point of view. I liked your expanded explanation better. Noralf. >> Acked-by: Noralf Trønnes <nor...@tronnes.org> > > thanks, > Gerd > _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization