Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3783653pxv; Mon, 19 Jul 2021 08:39:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwEEjI9VfxUwfOn96Og+cfdikI/7O4JLH46w5ySUrqw99P1loMAQlMblCkgTVQE/Wsnoi5N X-Received: by 2002:a05:6402:160d:: with SMTP id f13mr35510086edv.295.1626709166141; Mon, 19 Jul 2021 08:39:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626709166; cv=none; d=google.com; s=arc-20160816; b=QnAPTLYdOwgOgBOb78mGSIwORRvcOVXT76/di9qbj0ymp3hSzX0W22ClenRslX/rkp Z3Hb51cYRUq4UrZ5x0i8OB35DkKcsSCTEw2J8YrmqC4fsKlvCUFYT7s6V0hFiuHEHgQ0 POQ2NhxQDCNfDhBAncoHTHDTPuonQ4Q7uJcFJjfhDzjS3O+EucuQQQlSXX3jMeLfXsih eB1L9oxlmRzgsMEgAZ2s5iiCCKWAGN+LV8QZZz87JAE8b77KKGhMvGxXwgvADTW+uNuQ o6V5okoclxVydiNppX7lhYnhwNCcLrcrvSyHFD0QIFAC+rQVX5t9adWrGvTSY9t3GDRD HaeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=QcJhd1ofpqBu2pObob/PEvIACgzJRICHZ1wZP9QvGUo=; b=z2cM4olRyI8yFZagW11CfS7Mx4wYZeflAqAwvsf0XDWRQxUVJ6sjhpwb1ByWzHfyBB 6XccoBjvzJatYclVGuvqbec6uNGwIz0bsoFSmi9sh10cKDPLPiOqDdEQuTG3wsqPI1yb 0jSYR0byCIIpLlN+hxV4j4asDN52J0EcJe1twq7sfxop9OErBY+okbogB3D9JpXP2XYy PCWqtIkJlXdHMwLVxbt/ldV8lb7Zhgsk5HoSgWsLN7B8Ywd1vmzBxjDJD739nuJ1z7Jd rk7DU45z1MkUnOckEZbZqmYouG4Q85EGzzdxwVj+k7AKWIGFBibaoaI0nQhS+yZxFKuC D2pg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=LAr73AaG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w4si1570778edt.123.2021.07.19.08.39.03; Mon, 19 Jul 2021 08:39:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=LAr73AaG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240514AbhGSOyp (ORCPT + 99 others); Mon, 19 Jul 2021 10:54:45 -0400 Received: from mail.kernel.org ([198.145.29.99]:46720 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243779AbhGSOfO (ORCPT ); Mon, 19 Jul 2021 10:35:14 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 1398A611C1; Mon, 19 Jul 2021 15:15:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626707752; bh=FITr/NCjK1NzcgUtmbigP0i/c3mBj4z9cXPwIzaZrz0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LAr73AaGNjhJYcEfJHRyYPRw1/q1rs35RLMpx3mqpAAo8gLixXwJqKAOWE6cCF8lC RmEE+90ObW6ENScoDnD0wmXz4AkMKP9vLZlxPjWM5HlQRj+q6F7AIln5FouzkfNdvM E91Q5hUgeBbiiyGrHHyqmg9arc8XkR9mNfxOUiys= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Hans Verkuil , Mauro Carvalho Chehab , Sasha Levin Subject: [PATCH 4.14 043/315] media: cobalt: fix race condition in setting HPD Date: Mon, 19 Jul 2021 16:48:52 +0200 Message-Id: <20210719144944.284329816@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144942.861561397@linuxfoundation.org> References: <20210719144942.861561397@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Hans Verkuil [ Upstream commit 3d37ef41bed0854805ab9af22c422267510e1344 ] The cobalt_s_bit_sysctrl reads the old register value over PCI, then changes a bit and sets writes the new value to the register. This is used among other things for setting the HPD output pin. But if the HPD is changed for multiple inputs at the same time, then this causes a race condition where a stale value is read. Serialize this function with a mutex. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/pci/cobalt/cobalt-driver.c | 1 + drivers/media/pci/cobalt/cobalt-driver.h | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/media/pci/cobalt/cobalt-driver.c b/drivers/media/pci/cobalt/cobalt-driver.c index 98b6cb9505d1..0c827f488317 100644 --- a/drivers/media/pci/cobalt/cobalt-driver.c +++ b/drivers/media/pci/cobalt/cobalt-driver.c @@ -687,6 +687,7 @@ static int cobalt_probe(struct pci_dev *pci_dev, return -ENOMEM; cobalt->pci_dev = pci_dev; cobalt->instance = i; + mutex_init(&cobalt->pci_lock); retval = v4l2_device_register(&pci_dev->dev, &cobalt->v4l2_dev); if (retval) { diff --git a/drivers/media/pci/cobalt/cobalt-driver.h b/drivers/media/pci/cobalt/cobalt-driver.h index 00f773ec359a..9f8db7eaa43c 100644 --- a/drivers/media/pci/cobalt/cobalt-driver.h +++ b/drivers/media/pci/cobalt/cobalt-driver.h @@ -262,6 +262,8 @@ struct cobalt { int instance; struct pci_dev *pci_dev; struct v4l2_device v4l2_dev; + /* serialize PCI access in cobalt_s_bit_sysctrl() */ + struct mutex pci_lock; void __iomem *bar0, *bar1; @@ -331,10 +333,13 @@ static inline u32 cobalt_g_sysctrl(struct cobalt *cobalt) static inline void cobalt_s_bit_sysctrl(struct cobalt *cobalt, int bit, int val) { - u32 ctrl = cobalt_read_bar1(cobalt, COBALT_SYS_CTRL_BASE); + u32 ctrl; + mutex_lock(&cobalt->pci_lock); + ctrl = cobalt_read_bar1(cobalt, COBALT_SYS_CTRL_BASE); cobalt_write_bar1(cobalt, COBALT_SYS_CTRL_BASE, (ctrl & ~(1UL << bit)) | (val << bit)); + mutex_unlock(&cobalt->pci_lock); } static inline u32 cobalt_g_sysstat(struct cobalt *cobalt) -- 2.30.2