From patchwork Tue Dec 15 13:48:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dariusz Gadomski X-Patchwork-Id: 1416442 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CwKNn1063z9sTc; Wed, 16 Dec 2020 00:48:57 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1kpAhB-0000Sn-DR; Tue, 15 Dec 2020 13:48:53 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kpAh7-0000Ro-3i for kernel-team@lists.ubuntu.com; Tue, 15 Dec 2020 13:48:49 +0000 Received: from mail-ej1-f71.google.com ([209.85.218.71]) by youngberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kpAh6-0001Q1-SQ for kernel-team@lists.ubuntu.com; Tue, 15 Dec 2020 13:48:48 +0000 Received: by mail-ej1-f71.google.com with SMTP id q11so6013784ejd.0 for ; Tue, 15 Dec 2020 05:48:48 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UI1XRZlS3GfjL662F2W/HF23xgDCEAmVeDptXv2WkcI=; b=DIkJR22L+en/Celaw0yPpqkCrlbCCp4Tx/64zUz4V5UmcFu9eCuIuHj5qRGRPsR7Wz fZFA1d2/tthFCjmnYAgp1reMHShAhImGId4DvBof0lGGha3WfBhGoOr2qrose8+jkPvq WIKFfKlTTuWobdpaKc2SADDU6Ew4uyd8q7jBUCBc0UijrlndgxXfVYahTlcDaTQigZ57 Ky98YugvRHeWkhlAHIchm4Nyx8ZxceinfIBFCjVE7oPejPwLwGqA5GMoinqS6oi1pMQy 0ZsiMB6UbKoybP4F3TyRl5qlqTg68E42b3OXrNmTvrlmOup/u3q5aZB+WskJb70MP5Sl qR0Q== X-Gm-Message-State: AOAM533XcAFMcOMAs6OAbRh8ilRCh5q/cqTB98Qz+Cj7h+sPUWBxfWxh UPSiXV4HabdhaMjn+L7VAQV27Q+r8pVjwbmjszpmfdGZ4V3fltL0CR9HuQd51OosFADZ2WCiqLi wzJkzRv1/VgIFcqSlvo2J/dbjmrynw/4Vr1PApxIvPQ== X-Received: by 2002:a17:907:4332:: with SMTP id ni2mr5910358ejb.422.1608040127886; Tue, 15 Dec 2020 05:48:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJyrvOLJDS4niovkW5f7n3h3snbIusFxFH0rv6YJt8ZF4TSObqhcy19LRw/6GLHxGEERbZ9c1Q== X-Received: by 2002:a17:907:4332:: with SMTP id ni2mr5910342ejb.422.1608040127586; Tue, 15 Dec 2020 05:48:47 -0800 (PST) Received: from localhost.localdomain (80.49.140.50.ipv4.supernova.orange.pl. [80.49.140.50]) by smtp.gmail.com with ESMTPSA id f24sm1341789ejf.117.2020.12.15.05.48.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Dec 2020 05:48:46 -0800 (PST) From: Dariusz Gadomski X-Google-Original-From: Dariusz Gadomski To: kernel-team@lists.ubuntu.com Subject: [SRU][B][PATCH 1/3] qxl: remove qxl_io_log() Date: Tue, 15 Dec 2020 14:48:43 +0100 Message-Id: <20201215134845.77866-2-dgadomski@ubuntu.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201215134845.77866-1-dgadomski@ubuntu.com> References: <20201215134845.77866-1-dgadomski@ubuntu.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: gpiccoli@canonical.com, dgadomski@ubuntu.com Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Gerd Hoffmann BugLink: https://bugs.launchpad.net/bugs/1908219 qxl_io_log() sends messages over to the host (qemu) for logging. Remove the function and all callers, we can just use standard DRM_DEBUG calls (and if needed a serial console). Signed-off-by: Gerd Hoffmann Reviewed-by: Dave Airlie Link: http://patchwork.freedesktop.org/patch/msgid/20180420071904.24276-2-kraxel@redhat.com (cherry picked from commit 735581a0a13c58e6ff7eaf7a1087e1e5d917cabe) Signed-off-by: Dariusz Gadomski --- drivers/gpu/drm/qxl/qxl_cmd.c | 34 ++----------------------------- drivers/gpu/drm/qxl/qxl_display.c | 27 ++++-------------------- drivers/gpu/drm/qxl/qxl_drv.h | 3 --- drivers/gpu/drm/qxl/qxl_fb.c | 2 -- drivers/gpu/drm/qxl/qxl_irq.c | 3 +-- 5 files changed, 7 insertions(+), 62 deletions(-) diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c index 2bddf1f2beb9..bd9da989e758 100644 --- a/drivers/gpu/drm/qxl/qxl_cmd.c +++ b/drivers/gpu/drm/qxl/qxl_cmd.c @@ -341,12 +341,9 @@ int qxl_io_update_area(struct qxl_device *qdev, struct qxl_bo *surf, surface_height = surf->surf.height; if (area->left < 0 || area->top < 0 || - area->right > surface_width || area->bottom > surface_height) { - qxl_io_log(qdev, "%s: not doing area update for " - "%d, (%d,%d,%d,%d) (%d,%d)\n", __func__, surface_id, area->left, - area->top, area->right, area->bottom, surface_width, surface_height); + area->right > surface_width || area->bottom > surface_height) return -EINVAL; - } + mutex_lock(&qdev->update_area_mutex); qdev->ram_header->update_area = *area; qdev->ram_header->update_surface = surface_id; @@ -407,20 +404,6 @@ void qxl_io_memslot_add(struct qxl_device *qdev, uint8_t id) wait_for_io_cmd(qdev, id, QXL_IO_MEMSLOT_ADD_ASYNC); } -void qxl_io_log(struct qxl_device *qdev, const char *fmt, ...) -{ - va_list args; - - va_start(args, fmt); - vsnprintf(qdev->ram_header->log_buf, QXL_LOG_BUF_SIZE, fmt, args); - va_end(args); - /* - * DO not do a DRM output here - this will call printk, which will - * call back into qxl for rendering (qxl_fb) - */ - outb(0, qdev->io_base + QXL_IO_LOG); -} - void qxl_io_reset(struct qxl_device *qdev) { outb(0, qdev->io_base + QXL_IO_RESET); @@ -428,19 +411,6 @@ void qxl_io_reset(struct qxl_device *qdev) void qxl_io_monitors_config(struct qxl_device *qdev) { - qxl_io_log(qdev, "%s: %d [%dx%d+%d+%d]\n", __func__, - qdev->monitors_config ? - qdev->monitors_config->count : -1, - qdev->monitors_config && qdev->monitors_config->count ? - qdev->monitors_config->heads[0].width : -1, - qdev->monitors_config && qdev->monitors_config->count ? - qdev->monitors_config->heads[0].height : -1, - qdev->monitors_config && qdev->monitors_config->count ? - qdev->monitors_config->heads[0].x : -1, - qdev->monitors_config && qdev->monitors_config->count ? - qdev->monitors_config->heads[0].y : -1 - ); - wait_for_io_cmd(qdev, 0, QXL_IO_MONITORS_CONFIG_ASYNC); } diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c index b209a25e307d..355771d8adbd 100644 --- a/drivers/gpu/drm/qxl/qxl_display.c +++ b/drivers/gpu/drm/qxl/qxl_display.c @@ -48,12 +48,8 @@ static void qxl_alloc_client_monitors_config(struct qxl_device *qdev, unsigned c qdev->client_monitors_config = kzalloc( sizeof(struct qxl_monitors_config) + sizeof(struct qxl_head) * count, GFP_KERNEL); - if (!qdev->client_monitors_config) { - qxl_io_log(qdev, - "%s: allocation failure for %u heads\n", - __func__, count); + if (!qdev->client_monitors_config) return; - } } qdev->client_monitors_config->count = count; } @@ -74,12 +70,8 @@ static int qxl_display_copy_rom_client_monitors_config(struct qxl_device *qdev) num_monitors = qdev->rom->client_monitors_config.count; crc = crc32(0, (const uint8_t *)&qdev->rom->client_monitors_config, sizeof(qdev->rom->client_monitors_config)); - if (crc != qdev->rom->client_monitors_config_crc) { - qxl_io_log(qdev, "crc mismatch: have %X (%zd) != %X\n", crc, - sizeof(qdev->rom->client_monitors_config), - qdev->rom->client_monitors_config_crc); + if (crc != qdev->rom->client_monitors_config_crc) return MONITORS_CONFIG_BAD_CRC; - } if (!num_monitors) { DRM_DEBUG_KMS("no client monitors configured\n"); return status; @@ -170,12 +162,10 @@ void qxl_display_read_client_monitors_config(struct qxl_device *qdev) udelay(5); } if (status == MONITORS_CONFIG_BAD_CRC) { - qxl_io_log(qdev, "config: bad crc\n"); DRM_DEBUG_KMS("ignoring client monitors config: bad crc"); return; } if (status == MONITORS_CONFIG_UNCHANGED) { - qxl_io_log(qdev, "config: unchanged\n"); DRM_DEBUG_KMS("ignoring client monitors config: unchanged"); return; } @@ -385,14 +375,6 @@ static bool qxl_crtc_mode_fixup(struct drm_crtc *crtc, const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode) { - struct drm_device *dev = crtc->dev; - struct qxl_device *qdev = dev->dev_private; - - qxl_io_log(qdev, "%s: (%d,%d) => (%d,%d)\n", - __func__, - mode->hdisplay, mode->vdisplay, - adjusted_mode->hdisplay, - adjusted_mode->vdisplay); return true; } @@ -403,10 +385,9 @@ qxl_send_monitors_config(struct qxl_device *qdev) BUG_ON(!qdev->ram_header->monitors_config); - if (qdev->monitors_config->count == 0) { - qxl_io_log(qdev, "%s: 0 monitors??\n", __func__); + if (qdev->monitors_config->count == 0) return; - } + for (i = 0 ; i < qdev->monitors_config->count ; ++i) { struct qxl_head *head = &qdev->monitors_config->heads[i]; diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h index 00a1a66b052a..4b8984017373 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.h +++ b/drivers/gpu/drm/qxl/qxl_drv.h @@ -298,9 +298,6 @@ struct qxl_device { int monitors_config_height; }; -/* forward declaration for QXL_INFO_IO */ -__printf(2,3) void qxl_io_log(struct qxl_device *qdev, const char *fmt, ...); - extern const struct drm_ioctl_desc qxl_ioctls[]; extern int qxl_max_ioctl; diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c index 23af3e352673..603bf564ef8e 100644 --- a/drivers/gpu/drm/qxl/qxl_fb.c +++ b/drivers/gpu/drm/qxl/qxl_fb.c @@ -185,8 +185,6 @@ static int qxlfb_framebuffer_dirty(struct drm_framebuffer *fb, /* * we are using a shadow draw buffer, at qdev->surface0_shadow */ - qxl_io_log(qdev, "dirty x[%d, %d], y[%d, %d]\n", clips->x1, clips->x2, - clips->y1, clips->y2); image->dx = clips->x1; image->dy = clips->y1; image->width = clips->x2 - clips->x1; diff --git a/drivers/gpu/drm/qxl/qxl_irq.c b/drivers/gpu/drm/qxl/qxl_irq.c index 23a40106ab53..3bb31add6350 100644 --- a/drivers/gpu/drm/qxl/qxl_irq.c +++ b/drivers/gpu/drm/qxl/qxl_irq.c @@ -57,10 +57,9 @@ irqreturn_t qxl_irq_handler(int irq, void *arg) * to avoid endless loops). */ qdev->irq_received_error++; - qxl_io_log(qdev, "%s: driver is in bug mode.\n", __func__); + DRM_WARN("driver is in bug mode\n"); } if (pending & QXL_INTERRUPT_CLIENT_MONITORS_CONFIG) { - qxl_io_log(qdev, "QXL_INTERRUPT_CLIENT_MONITORS_CONFIG\n"); schedule_work(&qdev->client_monitors_config_work); } qdev->ram_header->int_mask = QXL_INTERRUPT_MASK; From patchwork Tue Dec 15 13:48:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dariusz Gadomski X-Patchwork-Id: 1416440 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CwKNn0wSlz9sTX; Wed, 16 Dec 2020 00:48:57 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1kpAhB-0000Sz-Kr; Tue, 15 Dec 2020 13:48:53 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kpAh7-0000Ru-JE for kernel-team@lists.ubuntu.com; Tue, 15 Dec 2020 13:48:49 +0000 Received: from mail-ed1-f70.google.com ([209.85.208.70]) by youngberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kpAh7-0001QF-A9 for kernel-team@lists.ubuntu.com; Tue, 15 Dec 2020 13:48:49 +0000 Received: by mail-ed1-f70.google.com with SMTP id a9so10088523edy.8 for ; Tue, 15 Dec 2020 05:48:49 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LqSO88psbEK9quTb4/nrnqtMcti9Uu43uXQ+giJtu7k=; b=Vosrq5brM5LJBp6LXfJ2BwKf30070++c9v7q4Aym4Gj8scLIASw4YG45kFi49WR/af +HIbq00Tg6ERlRbjjz+zuMYwchSd999LBh5cpWNM3YD0+CKnW01cC39tOOZqFWdBJfdu 4PqycwpuWT1I1ZcHpC0HeedT+CSVN04FaCf7Hx5+XyrR7sCKR+MFf0d/BCGLpIn+VlWr mDIiJTzco6ccQo99uQMalfJ78WEVTQsZ85Wfl6Tcjkzo/WeboXYESrhBc9dvPUfDnxpC DYAw0IuuOexgCA9EkrjdLGSPI8RWkt9BXRgcFx2vop4AJ5AZwP4c2zbnfOL064W8SeqN C5QQ== X-Gm-Message-State: AOAM531YtxpwN1cvkQVqTYBx247MOraaijGpp+X8Q89e4BXs0U3oPRe0 y5y7wEGExeOy5AnhnziJXdhAn31Ue0CTJJAPcncPujImCqGlfso5SZQFujH4wxwB46rnEYK6w4b sX6m/T3qKb7YFMXSNQjmvHdYKZRMSl1N6/xFaPcm7ZA== X-Received: by 2002:a17:906:39d7:: with SMTP id i23mr26428141eje.157.1608040128731; Tue, 15 Dec 2020 05:48:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJyYKsRWErsWbVxuXJ8ikmjgf6ff7Q4nVjp49qWKUgxrheBUup/6JejgJ+t+wGYmIUEHQSb4mw== X-Received: by 2002:a17:906:39d7:: with SMTP id i23mr26428133eje.157.1608040128521; Tue, 15 Dec 2020 05:48:48 -0800 (PST) Received: from localhost.localdomain (80.49.140.50.ipv4.supernova.orange.pl. [80.49.140.50]) by smtp.gmail.com with ESMTPSA id f24sm1341789ejf.117.2020.12.15.05.48.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Dec 2020 05:48:48 -0800 (PST) From: Dariusz Gadomski X-Google-Original-From: Dariusz Gadomski To: kernel-team@lists.ubuntu.com Subject: [SRU][B][PATCH 2/3] qxl: move qxl_send_monitors_config() Date: Tue, 15 Dec 2020 14:48:44 +0100 Message-Id: <20201215134845.77866-3-dgadomski@ubuntu.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201215134845.77866-1-dgadomski@ubuntu.com> References: <20201215134845.77866-1-dgadomski@ubuntu.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: gpiccoli@canonical.com, dgadomski@ubuntu.com Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Gerd Hoffmann BugLink: https://bugs.launchpad.net/bugs/1908219 Needed to avoid a forward declaration in a followup patch. Pure code move, no functional change. Signed-off-by: Gerd Hoffmann Reviewed-by: Dave Airlie Link: http://patchwork.freedesktop.org/patch/msgid/20180420071904.24276-3-kraxel@redhat.com (cherry picked from commit 998010bfae6ebaac68af905bef9f6e276f775254) Signed-off-by: Dariusz Gadomski --- drivers/gpu/drm/qxl/qxl_display.c | 47 +++++++++++++++---------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c index 355771d8adbd..20634c90140a 100644 --- a/drivers/gpu/drm/qxl/qxl_display.c +++ b/drivers/gpu/drm/qxl/qxl_display.c @@ -258,6 +258,29 @@ static int qxl_add_common_modes(struct drm_connector *connector, return i - 1; } +static void qxl_send_monitors_config(struct qxl_device *qdev) +{ + int i; + + BUG_ON(!qdev->ram_header->monitors_config); + + if (qdev->monitors_config->count == 0) + return; + + for (i = 0 ; i < qdev->monitors_config->count ; ++i) { + struct qxl_head *head = &qdev->monitors_config->heads[i]; + + if (head->y > 8192 || head->x > 8192 || + head->width > 8192 || head->height > 8192) { + DRM_ERROR("head %d wrong: %dx%d+%d+%d\n", + i, head->width, head->height, + head->x, head->y); + return; + } + } + qxl_io_monitors_config(qdev); +} + static void qxl_crtc_atomic_flush(struct drm_crtc *crtc, struct drm_crtc_state *old_crtc_state) { @@ -378,30 +401,6 @@ static bool qxl_crtc_mode_fixup(struct drm_crtc *crtc, return true; } -static void -qxl_send_monitors_config(struct qxl_device *qdev) -{ - int i; - - BUG_ON(!qdev->ram_header->monitors_config); - - if (qdev->monitors_config->count == 0) - return; - - for (i = 0 ; i < qdev->monitors_config->count ; ++i) { - struct qxl_head *head = &qdev->monitors_config->heads[i]; - - if (head->y > 8192 || head->x > 8192 || - head->width > 8192 || head->height > 8192) { - DRM_ERROR("head %d wrong: %dx%d+%d+%d\n", - i, head->width, head->height, - head->x, head->y); - return; - } - } - qxl_io_monitors_config(qdev); -} - static void qxl_monitors_config_set(struct qxl_device *qdev, int index, unsigned x, unsigned y, From patchwork Tue Dec 15 13:48:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dariusz Gadomski X-Patchwork-Id: 1416443 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CwKNq0zS5z9sVJ; Wed, 16 Dec 2020 00:48:58 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1kpAhC-0000U4-UN; Tue, 15 Dec 2020 13:48:54 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kpAh9-0000SJ-Aw for kernel-team@lists.ubuntu.com; Tue, 15 Dec 2020 13:48:51 +0000 Received: from mail-ed1-f71.google.com ([209.85.208.71]) by youngberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kpAh9-0001Qp-30 for kernel-team@lists.ubuntu.com; Tue, 15 Dec 2020 13:48:51 +0000 Received: by mail-ed1-f71.google.com with SMTP id u17so10078315edi.18 for ; Tue, 15 Dec 2020 05:48:51 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rsp3G0FuWce1hv9j1biw+XWWmNwqd+CWqEL0OzVNJb4=; b=IbL0be7QTVjwlhLKWZpBbjp+Q58wY3w3Qtc5rPc8d5/dl5kHOdL4DU3o+No3Jn5BJB 4H1Dhi5JjJryLT1M0J0x88NMRFOrEnYUrOp5RuMG5S90tXs8ysa5H5BhEvrOyJ7hIU0c v8knT2Xul3HdRauOToDHzAdCGmPyRqPrfkWX6fK2eZoIu1s6zcF69t6RXNwBMICamxVO rpPTIl7yPmVOeYMtJiyGubrFfkzAxCxYrOalcVGmR4eNoxzhJden5g9Yk408I8oS1eNX zzNHP3TVcXhfYPOzoOxn4u6SgS/2G/SADdItGv/EMz5aSSRqlRXRvh9NdMg6KXKqOus2 86bA== X-Gm-Message-State: AOAM531bd1p5j5OPN6G784UWPRwAMlvTyV194xbTALUbOf+Is1GuJ9d1 Mu0VohZljOPdUBo7h/tsX3mtWkK58bsFY7CJ/G7Yap/y1hwq9R9reZtiR4bHDSNIisXBE365g/P OEWgTcbWafCnDisM4488vkdOieZ8zOlAU1Y95ls3Xng== X-Received: by 2002:a17:906:eb49:: with SMTP id mc9mr26159328ejb.487.1608040130025; Tue, 15 Dec 2020 05:48:50 -0800 (PST) X-Google-Smtp-Source: ABdhPJxhY20dInlNaLXG1Y/aXuw1kr1AdDj/Y+psuDeL1qB5ouLlvm6mkMiploVLo6k1SS5BQ2sfnw== X-Received: by 2002:a17:906:eb49:: with SMTP id mc9mr26159315ejb.487.1608040129746; Tue, 15 Dec 2020 05:48:49 -0800 (PST) Received: from localhost.localdomain (80.49.140.50.ipv4.supernova.orange.pl. [80.49.140.50]) by smtp.gmail.com with ESMTPSA id f24sm1341789ejf.117.2020.12.15.05.48.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Dec 2020 05:48:49 -0800 (PST) From: Dariusz Gadomski X-Google-Original-From: Dariusz Gadomski To: kernel-team@lists.ubuntu.com Subject: [SRU][B][PATCH 3/3] qxl: hook monitors_config updates into crtc, not encoder. Date: Tue, 15 Dec 2020 14:48:45 +0100 Message-Id: <20201215134845.77866-4-dgadomski@ubuntu.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201215134845.77866-1-dgadomski@ubuntu.com> References: <20201215134845.77866-1-dgadomski@ubuntu.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: gpiccoli@canonical.com, dgadomski@ubuntu.com Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Gerd Hoffmann BugLink: https://bugs.launchpad.net/bugs/1908219 The encoder callbacks are only called in case the video mode changes. So any layout changes without mode changes will go unnoticed. Add qxl_crtc_update_monitors_config(), based on the old qxl_write_monitors_config_for_encoder() function. Hook it into the enable, disable and flush atomic crtc callbacks. Remove monitors_config updates from all other places. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1544322 Signed-off-by: Gerd Hoffmann Reviewed-by: Dave Airlie Link: http://patchwork.freedesktop.org/patch/msgid/20180420071904.24276-4-kraxel@redhat.com (cherry picked from commit a6d3c4d79822658e7f2f9c4b73237fe2b057ed67) Signed-off-by: Dariusz Gadomski --- drivers/gpu/drm/qxl/qxl_cmd.c | 2 + drivers/gpu/drm/qxl/qxl_display.c | 156 ++++++++++++------------------ 2 files changed, 66 insertions(+), 92 deletions(-) diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c index bd9da989e758..57491b0127d4 100644 --- a/drivers/gpu/drm/qxl/qxl_cmd.c +++ b/drivers/gpu/drm/qxl/qxl_cmd.c @@ -371,6 +371,7 @@ void qxl_io_flush_surfaces(struct qxl_device *qdev) void qxl_io_destroy_primary(struct qxl_device *qdev) { wait_for_io_cmd(qdev, 0, QXL_IO_DESTROY_PRIMARY_ASYNC); + qdev->primary_created = false; } void qxl_io_create_primary(struct qxl_device *qdev, @@ -396,6 +397,7 @@ void qxl_io_create_primary(struct qxl_device *qdev, create->type = QXL_SURF_TYPE_PRIMARY; wait_for_io_cmd(qdev, 0, QXL_IO_CREATE_PRIMARY_ASYNC); + qdev->primary_created = true; } void qxl_io_memslot_add(struct qxl_device *qdev, uint8_t id) diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c index 20634c90140a..6cbaa787d66f 100644 --- a/drivers/gpu/drm/qxl/qxl_display.c +++ b/drivers/gpu/drm/qxl/qxl_display.c @@ -281,6 +281,66 @@ static void qxl_send_monitors_config(struct qxl_device *qdev) qxl_io_monitors_config(qdev); } +static void qxl_crtc_update_monitors_config(struct drm_crtc *crtc, + const char *reason) +{ + struct drm_device *dev = crtc->dev; + struct qxl_device *qdev = dev->dev_private; + struct qxl_crtc *qcrtc = to_qxl_crtc(crtc); + struct qxl_head head; + int oldcount, i = qcrtc->index; + + if (!qdev->primary_created) { + DRM_DEBUG_KMS("no primary surface, skip (%s)\n", reason); + return; + } + + if (!qdev->monitors_config || + qdev->monitors_config->max_allowed <= i) + return; + + head.id = i; + head.flags = 0; + oldcount = qdev->monitors_config->count; + if (crtc->state->active) { + struct drm_display_mode *mode = &crtc->mode; + head.width = mode->hdisplay; + head.height = mode->vdisplay; + head.x = crtc->x; + head.y = crtc->y; + if (qdev->monitors_config->count < i + 1) + qdev->monitors_config->count = i + 1; + } else if (i > 0) { + head.width = 0; + head.height = 0; + head.x = 0; + head.y = 0; + if (qdev->monitors_config->count == i + 1) + qdev->monitors_config->count = i; + } else { + DRM_DEBUG_KMS("inactive head 0, skip (%s)\n", reason); + return; + } + + if (head.width == qdev->monitors_config->heads[i].width && + head.height == qdev->monitors_config->heads[i].height && + head.x == qdev->monitors_config->heads[i].x && + head.y == qdev->monitors_config->heads[i].y && + oldcount == qdev->monitors_config->count) + return; + + DRM_DEBUG_KMS("head %d, %dx%d, at +%d+%d, %s (%s)\n", + i, head.width, head.height, head.x, head.y, + crtc->state->active ? "on" : "off", reason); + if (oldcount != qdev->monitors_config->count) + DRM_DEBUG_KMS("active heads %d -> %d (%d total)\n", + oldcount, qdev->monitors_config->count, + qdev->monitors_config->max_allowed); + + qdev->monitors_config->heads[i] = head; + qxl_send_monitors_config(qdev); +} + static void qxl_crtc_atomic_flush(struct drm_crtc *crtc, struct drm_crtc_state *old_crtc_state) { @@ -296,6 +356,8 @@ static void qxl_crtc_atomic_flush(struct drm_crtc *crtc, drm_crtc_send_vblank_event(crtc, event); spin_unlock_irqrestore(&dev->event_lock, flags); } + + qxl_crtc_update_monitors_config(crtc, "flush"); } static void qxl_crtc_destroy(struct drm_crtc *crtc) @@ -401,55 +463,20 @@ static bool qxl_crtc_mode_fixup(struct drm_crtc *crtc, return true; } -static void qxl_monitors_config_set(struct qxl_device *qdev, - int index, - unsigned x, unsigned y, - unsigned width, unsigned height, - unsigned surf_id) -{ - DRM_DEBUG_KMS("%d:%dx%d+%d+%d\n", index, width, height, x, y); - qdev->monitors_config->heads[index].x = x; - qdev->monitors_config->heads[index].y = y; - qdev->monitors_config->heads[index].width = width; - qdev->monitors_config->heads[index].height = height; - qdev->monitors_config->heads[index].surface_id = surf_id; - -} - -static void qxl_mode_set_nofb(struct drm_crtc *crtc) -{ - struct qxl_device *qdev = crtc->dev->dev_private; - struct qxl_crtc *qcrtc = to_qxl_crtc(crtc); - struct drm_display_mode *mode = &crtc->mode; - - DRM_DEBUG("Mode set (%d,%d)\n", - mode->hdisplay, mode->vdisplay); - - qxl_monitors_config_set(qdev, qcrtc->index, 0, 0, - mode->hdisplay, mode->vdisplay, 0); - -} - static void qxl_crtc_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state) { - DRM_DEBUG("\n"); + qxl_crtc_update_monitors_config(crtc, "enable"); } static void qxl_crtc_atomic_disable(struct drm_crtc *crtc, struct drm_crtc_state *old_state) { - struct qxl_crtc *qcrtc = to_qxl_crtc(crtc); - struct qxl_device *qdev = crtc->dev->dev_private; - - qxl_monitors_config_set(qdev, qcrtc->index, 0, 0, 0, 0, 0); - - qxl_send_monitors_config(qdev); + qxl_crtc_update_monitors_config(crtc, "disable"); } static const struct drm_crtc_helper_funcs qxl_crtc_helper_funcs = { .mode_fixup = qxl_crtc_mode_fixup, - .mode_set_nofb = qxl_mode_set_nofb, .atomic_flush = qxl_crtc_atomic_flush, .atomic_enable = qxl_crtc_atomic_enable, .atomic_disable = qxl_crtc_atomic_disable, @@ -942,61 +969,8 @@ static void qxl_enc_prepare(struct drm_encoder *encoder) DRM_DEBUG("\n"); } -static void qxl_write_monitors_config_for_encoder(struct qxl_device *qdev, - struct drm_encoder *encoder) -{ - int i; - struct qxl_output *output = drm_encoder_to_qxl_output(encoder); - struct qxl_head *head; - struct drm_display_mode *mode; - - BUG_ON(!encoder); - /* TODO: ugly, do better */ - i = output->index; - if (!qdev->monitors_config || - qdev->monitors_config->max_allowed <= i) { - DRM_ERROR( - "head number too large or missing monitors config: %p, %d", - qdev->monitors_config, - qdev->monitors_config ? - qdev->monitors_config->max_allowed : -1); - return; - } - if (!encoder->crtc) { - DRM_ERROR("missing crtc on encoder %p\n", encoder); - return; - } - if (i != 0) - DRM_DEBUG("missing for multiple monitors: no head holes\n"); - head = &qdev->monitors_config->heads[i]; - head->id = i; - if (encoder->crtc->enabled) { - mode = &encoder->crtc->mode; - head->width = mode->hdisplay; - head->height = mode->vdisplay; - head->x = encoder->crtc->x; - head->y = encoder->crtc->y; - if (qdev->monitors_config->count < i + 1) - qdev->monitors_config->count = i + 1; - } else { - head->width = 0; - head->height = 0; - head->x = 0; - head->y = 0; - } - DRM_DEBUG_KMS("setting head %d to +%d+%d %dx%d out of %d\n", - i, head->x, head->y, head->width, head->height, qdev->monitors_config->count); - head->flags = 0; - /* TODO - somewhere else to call this for multiple monitors - * (config_commit?) */ - qxl_send_monitors_config(qdev); -} - static void qxl_enc_commit(struct drm_encoder *encoder) { - struct qxl_device *qdev = encoder->dev->dev_private; - - qxl_write_monitors_config_for_encoder(qdev, encoder); DRM_DEBUG("\n"); } @@ -1083,8 +1057,6 @@ static enum drm_connector_status qxl_conn_detect( qxl_head_enabled(&qdev->client_monitors_config->heads[output->index]); DRM_DEBUG("#%d connected: %d\n", output->index, connected); - if (!connected) - qxl_monitors_config_set(qdev, output->index, 0, 0, 0, 0, 0); return connected ? connector_status_connected : connector_status_disconnected;