> > 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. > Acked-by: Noralf Trønnes <noralf@xxxxxxxxxxx> thanks, Gerd _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel