From nobody Thu Sep 24 14:26:05 2026 Received: from mail-wm2-f13.google.com (mail-wm2-f13.google.com [74.125.225.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7138721FF29 for ; Wed, 23 Sep 2026 00:14:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122476; cv=none; b=DUfBh56iOnsoJOzOw5RmBlPjxoaw3CI/lAABd24vlu43sk40qW20G6LRKt2x3giXCvL+aQ0JD2Lh/fLD/LA11TH85qOlcFpC1P7jlqpJ3vHzL5KEuUJQ9hFfpG4KzhkOVmcgslxlN2pgzfKM0aQM0kkxxelg0/talnSSi2xpcH8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122476; c=relaxed/simple; bh=V8p7f+anGnSoL+KBB359kqfJ1ldhGnObhu2HYkCbO4o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JZQEEA/BQfRJ578X/GIkqVybfvtJ0FZ8SIc1JfbUOcEfL6cvKMM2Zm2x1nnn3bN6B1X1bP94gud/Rf32KX3aByqAIEMIWM9o36pjA3x1W1w6hoQrRjy+npxdKqZ9SdypK8teQQnX/k1GAlAFY8M2IZ1utNCieoJ8/n75ho0dFX4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QNg7j1ua; arc=none smtp.client-ip=74.125.225.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QNg7j1ua" Received: by mail-wm2-f13.google.com with SMTP id 5b1f17b1804b1-49cd4ba9f68so3503585e9.1 for ; Tue, 22 Sep 2026 17:14:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790122472; x=1790727272; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=yr4Xk59A6nBEe9AXu0gZsAXZVCEOldu1UBAKss+kKik=; b=QNg7j1uaGJNTgGrKq3IfIhTNSoWGpTa+9sPXhG8Dj8tVDHDfmxvFlL8cF2TxhJTzS9 YzvuOIsPwqkHjeNKsmfSDxOBRtrJm9RGPpFBi9WZ28wHznC4quLOZyerDD8tgsZakUmQ HAhBo1pXSsMxIVZDEUZ63WfEXD9l9DVpTvWeimJJP2zYGAiolmiFGgqQ61J6YmYq8jxh jjRrmcBF/ZtFZnGAJpqWinANuN2mqY5IkslVDOQSh33UaMr9V2aJ89EBuCj2q5TGVMsx C8y0cIW0jh44ppb94B5SszGzltuoswkhUWj4XS7OcFxerbXcOIZQHCYKZZPGMe+/g9Vf ePzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790122472; x=1790727272; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=yr4Xk59A6nBEe9AXu0gZsAXZVCEOldu1UBAKss+kKik=; b=L+fLYMpapD+5HKxg+Pmb692nLMY5vnNgK1/7zObR7OvUM3+0FddbUuFpAdOTSFfOah L+qYnW3DU14qMs1hmmiCWD60TRXIy1WgtsDbBR8F6VVVIyO2twP2ElvBDkTHbES6tOc5 misT7d23mbeDjXnJtSzzrHA67oOztMOTHvsjrQrZaHYX87dBCVWJan2pq1tqOnkoYboI Q49ShfBatzyVGQzRaBySc4hCmpYDnxtf/HCpauAgV4JpUqV86n3ckqVkSKlws+yenPP2 A1KgkntYvWfwMvNmAOhv6jn6V1GMC4UP7K3dj8ZJJ7t00Yn3GsScdJlhA7gFTftEZvQF M9+g== X-Forwarded-Encrypted: i=1; AKwUvBwJWunr/swRf4FEVhVyrb+gHP2DiGmp7LvBlyRBy3d3U81b1JUypVoJGICp+soMmm29C2+JMeLea9g+Gh8=@vger.kernel.org X-Gm-Message-State: AFuF++kaiiMXlkIQyVQaEDtzAdTqYPYCTvn5sLpzI5QIhve7W6cNLWm1 KEBl+JcaJQlbjvE+Ly2GlvTmcYZAGcWpNVMDbHWg1zNMcv9lYCjVdwd0 X-Gm-Gg: AYBFou2vBtVKGpvSU0FyvCh1rbMU0x3D+Q4yBGP3OLmBTnkXYYmhZstKS0Be3/IdKMM 3SJYY1L+Qj5Dm0+g33lXgQmlVnIMpuIJb/DSuhnuj2ab2rs1wmO9ifZO3U3zYhgIRQ3ZDala9ZC HqbaBQe4T711zKJdemxMlviOUs0HFM+ocpsMj/mCwchLIe1HzNeAngK2s/92muY4nVq2jhSEkSv eFmjh2mo6m6SviSuLAGq2oE5yvSQSfvcIPKl4DJt5dJAqq6o70hb4QCS3e2KTwScbNClImdYaSs PZtIzDhPY2CrFcxpfx0Mlm2Kw2IbzaLEVesN9xi7Sv24QhwjMtQeP37z0Zqxnh58aFu6a/AVwTe F8xQ0GafRNa7H9hgSUy1f868qD5JduTJ5O7aj9/rFhY1RaP55AGKwMgAxv+rlUIk8BolWpaVI7k InHu067S53LsHKStFHxFPJbDLfrSiftdyuB4EBQfkTQos4TlHKUfovlyAlfmBiDefj50vs5FwI+ NIcorgTX+Sot3tN+6WwQPIhpTNB+AVHOJ98aipXV4RYZTFcPiFiAf2cr9vXaB3CE0OMhXxwLeka FluILqBzqix1E7CbIqXOhosjKVKElBDziYqSU6oZBGXOi3lpQTMxWbJgsfoqUOwT2htJ/tU20Zi ipvs11K8apxbP4quzxByOezAkJGWUv6It X-Received: by 2002:a05:600c:8b86:b0:49e:745d:c317 with SMTP id 5b1f17b1804b1-49fdeffe2bemr9153455e9.12.1790122472466; Tue, 22 Sep 2026 17:14:32 -0700 (PDT) Received: from localhost.localdomain (dynamic-2a00-1028-c000-0ddf-8c68-4a09-6ad6-6324.ipv6.o2.cz. [2a00:1028:c000:ddf:8c68:4a09:6ad6:6324]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde180a39sm34612165e9.1.2026.09.22.17.14.31 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 22 Sep 2026 17:14:31 -0700 (PDT) From: Josef Schlehofer To: Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Hyunwoo Kim , Josef Schlehofer , stable@vger.kernel.org Subject: [PATCH 1/6] media: az6007: fix CAM status polling after disconnect Date: Wed, 23 Sep 2026 02:14:05 +0200 Message-ID: <20260923001410.30297-2-pepe.schlehofer@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260923001410.30297-1-pepe.schlehofer@gmail.com> References: <20260923001410.30297-1-pepe.schlehofer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" az6007_ci_poll_slot_status() returns -EIO when the status request fails. dvb_ca_en50221 treats the return value as a bitmask, so -EIO is interpreted as CAM_PRESENT|CAM_CHANGED. The CA state machine then handles a CAM change for every failed poll, without sleeping in between. After an unplug, every poll fails this way and the CA thread can spin forever in dvb_ca_en50221_thread_state_machine(), preventing the USB disconnect from completing. This happened when unplugging a TechniSat CableStar Combo HD CI with a CAM inserted, and rcu_sched reported a stall. Report no CAM when the status request or buffer allocation fails, and only inspect the status byte when the request returned data. A read error while a CAM is present is then treated as a removal and the CAM is reinitialised after the next successful poll. Fixes: 962f8f67e486 ("[media] Add CI support to az6007 driver") Cc: stable@vger.kernel.org Signed-off-by: Josef Schlehofer --- drivers/media/usb/dvb-usb-v2/az6007.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/media/usb/dvb-usb-v2/az6007.c b/drivers/media/usb/dvb-= usb-v2/az6007.c index 65ef045b74ca..4ce1afe01c3b 100644 --- a/drivers/media/usb/dvb-usb-v2/az6007.c +++ b/drivers/media/usb/dvb-usb-v2/az6007.c @@ -526,7 +526,7 @@ static int az6007_ci_poll_slot_status(struct dvb_ca_en5= 0221 *ca, int slot, int o =20 b =3D kmalloc(12, GFP_KERNEL); if (!b) - return -ENOMEM; + return 0; mutex_lock(&state->ca_mutex); =20 req =3D 0xC5; @@ -535,16 +535,18 @@ static int az6007_ci_poll_slot_status(struct dvb_ca_e= n50221 *ca, int slot, int o blen =3D 1; =20 ret =3D az6007_read(d, req, value, index, b, blen); - if (ret < 0) { + if (ret < 0) pr_warn("usb in operation failed. (%d)\n", ret); - ret =3D -EIO; - } else - ret =3D 0; =20 - if (!ret && b[0] =3D=3D 1) { + /* + * The return value is a mask of DVB_CA_EN50221_POLL_* flags, not an + * error code, so report no CAM when the status cannot be read. + */ + if (ret > 0 && b[0] =3D=3D 1) ret =3D DVB_CA_EN50221_POLL_CAM_PRESENT | DVB_CA_EN50221_POLL_CAM_READY; - } + else + ret =3D 0; =20 mutex_unlock(&state->ca_mutex); kfree(b); --=20 2.54.0 (Apple Git-157) From nobody Thu Sep 24 14:26:05 2026 Received: from mail-wm2-f12.google.com (mail-wm2-f12.google.com [74.125.225.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BC5C923A562 for ; Wed, 23 Sep 2026 00:14:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122483; cv=none; b=rkNac0beeuseLgP1A5MJOMfFYMrbncHmiWLJIgRgzVptBpa5ZIcPDqFfk1qmsPtysvvjCTaaAz6tB81JCT7qGn4U+Ysk6PPTbi/3XYlzcrgc75Q31pZKK1ACIyax6dhTTzlsXKxXr8t8yT9Luwngb36MQtfJ+pXIKLrY/gAdeEc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122483; c=relaxed/simple; bh=kKxpjMyiHK9lV9OtcBaphCHIS0puTCLcWrgvqpO3mqs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WSCk901HqsRlgUFSQLygqp/VgEkcmJVMQmGRu4uxWDXASiwm+88w8v5G9uS3kmUTnyaV6zSg3po2UNcTWLzLALUBRoZBbGs2B2GAflARymIG69v3GAM3mpQzvBmrEyoxf6ikTeGxbHfPblxxjhKZaH3yIjZ1RHgJogbWYMo4u1o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=M1jBLwA7; arc=none smtp.client-ip=74.125.225.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="M1jBLwA7" Received: by mail-wm2-f12.google.com with SMTP id 5b1f17b1804b1-49cc9f581c4so1124605e9.0 for ; Tue, 22 Sep 2026 17:14:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790122476; x=1790727276; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/lwakMGT3g+t2lkoiIlXbmB0IFTfs1dS2fNYFlIz4+A=; b=M1jBLwA7BqUBWNgeep3mnrL7hq3utgb5eWlkQ1TUK9mVpJUTud4KlxJ/7VcTH1Gndr Pdb/icbgeYg9xBYnJsbfy8jfbl8q5hL3TkAbm/VfzX/cGZWZcn2EDk4U8zVPygMxYkl9 f4rkbPCsQGHKx6ct1tVlticB4XVMw8aewdvJSx0rW2kNYsfsTO4myJUoe6BJAZOaDEXp GTT+ENDUqRNBcGhl+r41P9HgUivb3rZLVB2aKvgPgsAK9w2bnU/Ghc6kwVHCKG7efLOx ev8z82cYCPFAjE+/mvK585uH/LQg5y1pZ+59Me7e1s06Tqfef8RwxbeOxB6/sbxwZ/fx fx5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790122476; x=1790727276; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=/lwakMGT3g+t2lkoiIlXbmB0IFTfs1dS2fNYFlIz4+A=; b=H5I0l2tR+q8QQvaG1fH5gBAnVaP2CTiu6iiPAQ6gXie6ZSLBjcvcukEZhJlpyvDNbp 7PfRFniPXbLXAXpfqO2RoNvqZokFkXhCc1AETbGd22f5CTwid79UT4Y32BBKrKQ71L28 g6bLBOoQhIq+HGxEj4RA6Cnu5ZQcG4iq0snGzz7hpJ1D8vOQBLVYY4Jrfow26Xb/ZtjS +h+b+NHfOpq8L3u4CFaZPzKs9gWK3Hh45bavTpKoxxILoOw205uspUoI6DZE34fS/qsy eLerEAgdRhhZcz9q1pZzJobBQqxbJxBPaUtrG8imm2ASsNB39swCKb9q6FlYlW12bqcZ CDGQ== X-Forwarded-Encrypted: i=1; AKwUvBwRd145yOgrWCzcdmY+in862RYhQqoyPh8hG90W9bwbBS8dfsCL5nt92yCVx9UBAjGxqC9FZR3b1Awg7vw=@vger.kernel.org X-Gm-Message-State: AFuF++kN2W8p0JxGvwzrta8fAsMehGIqpjo1ZHh/QO7yx46FlABziyGA 1z8ICXplqcbhMsQ2xX2S6gl5Hi0zevuJhdZLuzRx6XyLUGl3CHVKADM2 X-Gm-Gg: AYBFou0KsSqoQXjvpJP4i5z/0QK2M9zzLm8El/jCP94oPNZdjYpc8VY7lAt3neJClvy iq+q8cYooHlxMZzqUQrC3hWKvXwBMV0LZOutuVAmhuFYzyzl9CHOuiOHAZDSHY/4kJ+xu4wZaDh 8OkcFUVW7/0X5DH+B6G5DpfrVWO/BBsr/im57pRi1vpc+jxm/Zbk6S1B/zRJJftdUK9Vjr5AO8+ Qy0m7vNPlnpG3xWhycjyNZQ7UoevTtjMJpeGa7MBWOWGbnZorrWOoaMBOqSDzwXUWc40rg9klf4 F+2OtOZcCQDRA15NkRd5Df/MmvonKzOubrj3Yc7Cv8gMszdzrLj2vRMDywjRxWJNa00goDQY/6u dg890doteL5xdjDSyfJL/bDFFdvNKflm1fD9jLROh41t5/pBswEQIDf1jiRoYt/56tXi8zZyAbA ilCEzltkYVqo/tGh6ncYcAS1t/IpdpK7/wBiJFbHn/xBqrQHiXWUvOAKwdhgHqXyAFjF3Mot4d7 HORWYB6pRHE8+cvxn9KJVGRrMN30fJpOVimMP32GAsavvY92BN/08kQhTDlKyCdR4gexwzhpidT a215lanI7VISkF9/eh4CV6mKhGTXvaeag1fWOkvGPFfscpsC3iU8kxUkaXnV21cPecXzcr8kR0X 1TIv9t9kjNthG2u+j5Q3wWw== X-Received: by 2002:a05:600c:6087:b0:49d:2936:8ad1 with SMTP id 5b1f17b1804b1-49fde360163mr16064825e9.1.1790122475827; Tue, 22 Sep 2026 17:14:35 -0700 (PDT) Received: from localhost.localdomain (dynamic-2a00-1028-c000-0ddf-8c68-4a09-6ad6-6324.ipv6.o2.cz. [2a00:1028:c000:ddf:8c68:4a09:6ad6:6324]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde180a39sm34612165e9.1.2026.09.22.17.14.32 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 22 Sep 2026 17:14:34 -0700 (PDT) From: Josef Schlehofer To: Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Hyunwoo Kim , Josef Schlehofer Subject: [PATCH 2/6] media: az6007: propagate USB errors from I2C transfers Date: Wed, 23 Sep 2026 02:14:06 +0200 Message-ID: <20260923001410.30297-3-pepe.schlehofer@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260923001410.30297-1-pepe.schlehofer@gmail.com> References: <20260923001410.30297-1-pepe.schlehofer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" __az6007_read(), __az6007_write() and az6007_i2c_xfer() currently map usb_control_msg() failures to -EIO. After disconnect, USB reports -ENODEV, but drxk cannot distinguish a gone device from a transfer error. Propagate the error reported by usb_control_msg() instead. Keep short transfers mapped to -EIO as before. This lets drxk stop retrying and accessing the device after disconnect. Signed-off-by: Josef Schlehofer --- drivers/media/usb/dvb-usb-v2/az6007.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/media/usb/dvb-usb-v2/az6007.c b/drivers/media/usb/dvb-= usb-v2/az6007.c index 4ce1afe01c3b..5449ceda87e8 100644 --- a/drivers/media/usb/dvb-usb-v2/az6007.c +++ b/drivers/media/usb/dvb-usb-v2/az6007.c @@ -109,7 +109,7 @@ static int __az6007_read(struct usb_device *udev, u8 re= q, u16 value, value, index, b, blen, 5000); if (ret < 0) { pr_warn("usb read operation failed. (%d)\n", ret); - return -EIO; + return ret; } =20 if (az6007_xfer_debug) { @@ -163,7 +163,7 @@ static int __az6007_write(struct usb_device *udev, u8 r= eq, u16 value, value, index, b, blen, 5000); if (ret !=3D blen) { pr_err("usb write operation failed. (%d)\n", ret); - return -EIO; + return ret < 0 ? ret : -EIO; } =20 return 0; @@ -782,8 +782,9 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap, st= ruct i2c_msg msgs[], if (ret >=3D len) { for (j =3D 0; j < len; j++) msgs[i + 1].buf[j] =3D st->data[j + 5]; - } else + } else if (ret >=3D 0) { ret =3D -EIO; + } i++; } else if (!(msgs[i].flags & I2C_M_RD)) { /* write bytes */ --=20 2.54.0 (Apple Git-157) From nobody Thu Sep 24 14:26:05 2026 Received: from mail-wm2-f13.google.com (mail-wm2-f13.google.com [74.125.225.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B7DF2459EA for ; Wed, 23 Sep 2026 00:14:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122484; cv=none; b=esmpqGvLJq1GgrCDCdf+9T5u1cB9t8s3K9JxZUs3mCX/JhX4AyPLX+6I3YebYCAMnoAMe8Y08lrvszPUJ46hMoV8lxGD8QUxX/L+r+9Aq2aGmU4x+ZTBhEX4N+w9z9mMkXqRbUZr2yOb3/2cBuF+sgcSJ8zpYRVm4p1Dc9Sskxs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122484; c=relaxed/simple; bh=7GlmDoyW4bfU/UvvrDoTiuGj6klREMUqUByskEivwuc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qRlHmwXa1pntol1HgDU+SbBw64WpI+CHNtoFduXD29yXeP448Quuh5johAWPxavW9b8F4FBRsOGgFd9QHNfT+2aBYDsVZ/aL+dxcKGO6nEYsZA1MwnOsmINmTO1ohWJfqzVvKEg0yrIBMA5EuecCh+GYxz5Pk3JgEs5rwdukhgY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=EmmxGNIt; arc=none smtp.client-ip=74.125.225.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EmmxGNIt" Received: by mail-wm2-f13.google.com with SMTP id 5b1f17b1804b1-49d1fb0cf5eso2022475e9.3 for ; Tue, 22 Sep 2026 17:14:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790122478; x=1790727278; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=7MGuNB3b/Yy22a1g9JOUlAf9mYM1EW7M9T3gG75yYmM=; b=EmmxGNItM0/oONoD3PEE5ChQ8lru54k99Fs6ABQTS7Pk74/sl9BJyadNYcxJthzyYU HCURTxvMD1cUW06O3MRVwAxcswZ0EOzjSWG/GRC0XoDrvRM2waKD8OB7qk+sYyNk6whJ lMempJ/7WPeZGqePqszC9knHFHCu2MCPEYmV3/mbD7NhLh6ahkBKU0g2EFWqBDYlAgwU 3FKnuooKvqKPito7BfMGGjCjrHLEt7iK6XlHs+I5sebw2Sqjfxe1KFprzjXX1ZQr0be4 uv6+Uv+XOw081tAuIAQtrygk+nua9Q5+Au2iYA4IuT51HlU65/KNWpEzY427p8SIaJx2 FNDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790122478; x=1790727278; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=7MGuNB3b/Yy22a1g9JOUlAf9mYM1EW7M9T3gG75yYmM=; b=y8O9ksJOqp9+jtP5XpH3iEGTo0rkcgPVnwBoT/uLCwp9oMxfLfu15tRvb2OjWqxfoM Z1u+GAfWIelzwObzK6320vw69IT0+DQs4yl6CSUjAHKi+1oGjwuf1ApJnERB188VDnih QWt2RhgvaHaAPlqe0NoW6NFYt3YGfUx2ij2scQqaPpaVo+7ozr9UClZ0zCjif6zPlwa7 eEqSjtj01mZQrvS4DHyi2K/Wd13/BNkkBTKf6wRUYiS9YcbFzZ7ZZ5hGEVs3Xjoeouyw hAfuzXxBU9DAP020+UO8FJp24rvr8xsWJk1JO1jZ0RdpYL+4BbXlgGFk7cUtu1GUFS8S g29w== X-Forwarded-Encrypted: i=1; AKwUvBwIlvxaMAJ/4qlRrJOJEwawqr08BW9o7GGw5DkKSqlnMMoo7U1DRvJBQXx6cuy/R+KdGMs/FHe+Q4bOCzE=@vger.kernel.org X-Gm-Message-State: AFuF++mks7u6I3PvEelrM++vtUW33WnMDUYRw2rDqzHhTTggRiVlUEjW Vz0jWbTQJuq/vxTwbTK4+qOTFvUZIp1aqmZaiq6p1WNrZJwnmutdmC8j X-Gm-Gg: AYBFou0zavPoI6QZS17OeDtR8NjBH/PnOKGtkuAVBJi1DtCLCACG3JK6k3T7gCocn8F zrr7ZYWEuk7u6W5AvPHUEl8SbgL0JOZ8jK/BJPSt6VHo6Q4IkIT3n9s2YS4O8NGfwN79gXtCipa 5zA5FjWBHIHCz/yEPk0pHDsKvB8mkI8fB3YIJJc8WltfPuYycWX1fHF5vmQQm8Z4qTJorapf0s3 fQRUItS4TZmt+g/MNK5j+G8/baOxxWeCmu3sNZwDEVEB4lGeiTqxILpP3eqP1Bl7rUvl9kllHcW huUL6bFSSNGM/0o1kQAGlFncvMfujJ3kBfF+cSIK0/4vCHMWxKDjEOYU4f6tNbJRO0MT6WaDcHP TKt7Nzx4CXJ1gE3N6RIhAOdyU+7mDkpPBEszRcezVTaRxKyaVaE2wbJPDa0tAkX2DMvgft5BbWs 1T5DuaWZbtUNAQCf8KaoHeaO3BsrwE8BFARsgewpYVbWgdo6oeESzS3H0f1PW4+AzGOhdbLS+N1 fyy1BU30OKvuYwuBxMI9VKSK1V6TXklgmCWx2+sZPlBe4jZ9/YJ2QRGSoAeZD+blgVoT8RKyj2p v4nOkawOXRPzAG7dcHrKKMsdG/w1OxmwChs8zw98P6axEZFPkF2XpYXKd44hDcXHHWY3mg0MVwu 9TJ53lqCkA6lVwRXyj6zZlwGOuxBaUARP X-Received: by 2002:a05:600c:1f90:b0:49d:17d4:aff2 with SMTP id 5b1f17b1804b1-49fdeffc657mr8698955e9.1.1790122478142; Tue, 22 Sep 2026 17:14:38 -0700 (PDT) Received: from localhost.localdomain (dynamic-2a00-1028-c000-0ddf-8c68-4a09-6ad6-6324.ipv6.o2.cz. [2a00:1028:c000:ddf:8c68:4a09:6ad6:6324]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde180a39sm34612165e9.1.2026.09.22.17.14.35 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 22 Sep 2026 17:14:36 -0700 (PDT) From: Josef Schlehofer To: Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Hyunwoo Kim , Josef Schlehofer Subject: [PATCH 3/6] media: drxk: stop retrying after disconnect Date: Wed, 23 Sep 2026 02:14:07 +0200 Message-ID: <20260923001410.30297-4-pepe.schlehofer@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260923001410.30297-1-pepe.schlehofer@gmail.com> References: <20260923001410.30297-1-pepe.schlehofer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" drxk's wait loops retry I2C transfers on every error. In dvbt_sc_command(), read16() can leave cur_cmd unchanged when the read fails, so the loop can either exit early or retry until the maximum when the device has disappeared. Stop retrying on -ENODEV and return the error instead of continuing with the command. In power_up_device(), check the final transfer status after the shortened loop. -ENODEV is only returned here after a USB device has been disconnected, so this does not change behaviour while the device is present. Signed-off-by: Josef Schlehofer --- drivers/media/dvb-frontends/drxk_hard.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/media/dvb-frontends/drxk_hard.c b/drivers/media/dvb-fr= ontends/drxk_hard.c index 47786d0610f0..0815083e54eb 100644 --- a/drivers/media/dvb-frontends/drxk_hard.c +++ b/drivers/media/dvb-frontends/drxk_hard.c @@ -467,9 +467,9 @@ static int power_up_device(struct drxk_state *state) continue; status =3D i2c_read1(state, state->demod_address, &data); - } while (status < 0 && + } while (status < 0 && status !=3D -ENODEV && (retry_count < DRXK_MAX_RETRIES_POWERUP)); - if (status < 0 && retry_count >=3D DRXK_MAX_RETRIES_POWERUP) + if (status < 0) goto error; } =20 @@ -992,7 +992,8 @@ static int hi_command(struct drxk_state *state, u16 cmd= , u16 *p_result) retry_count +=3D 1; status =3D read16(state, SIO_HI_RA_RAM_CMD__A, &wait_cmd); - } while ((status < 0 || wait_cmd) && (retry_count < DRXK_MAX_RETRIES)); + } while ((status < 0 || wait_cmd) && status !=3D -ENODEV && + (retry_count < DRXK_MAX_RETRIES)); if (status < 0) goto error; status =3D read16(state, SIO_HI_RA_RAM_RES__A, p_result); @@ -3199,8 +3200,10 @@ static int dvbt_sc_command(struct drxk_state *state, usleep_range(1000, 2000); status =3D read16(state, OFDM_SC_RA_RAM_CMD__A, &cur_cmd); retry_cnt++; - } while ((cur_cmd !=3D 0) && (retry_cnt < DRXK_MAX_RETRIES)); - if (retry_cnt >=3D DRXK_MAX_RETRIES && (status < 0)) + } while ((cur_cmd !=3D 0) && status !=3D -ENODEV && + (retry_cnt < DRXK_MAX_RETRIES)); + if (status =3D=3D -ENODEV || + (retry_cnt >=3D DRXK_MAX_RETRIES && status < 0)) goto error; =20 /* Write sub-command */ @@ -3252,8 +3255,10 @@ static int dvbt_sc_command(struct drxk_state *state, usleep_range(1000, 2000); status =3D read16(state, OFDM_SC_RA_RAM_CMD__A, &cur_cmd); retry_cnt++; - } while ((cur_cmd !=3D 0) && (retry_cnt < DRXK_MAX_RETRIES)); - if (retry_cnt >=3D DRXK_MAX_RETRIES && (status < 0)) + } while ((cur_cmd !=3D 0) && status !=3D -ENODEV && + (retry_cnt < DRXK_MAX_RETRIES)); + if (status =3D=3D -ENODEV || + (retry_cnt >=3D DRXK_MAX_RETRIES && status < 0)) goto error; =20 /* Check for illegal cmd */ --=20 2.54.0 (Apple Git-157) From nobody Thu Sep 24 14:26:05 2026 Received: from mail-wm2-f13.google.com (mail-wm2-f13.google.com [74.125.225.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06D14220F2A for ; Wed, 23 Sep 2026 00:14:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122484; cv=none; b=qbv2sJV21Cji3fcCYkfJEjv3mCee7DOcPB4+UCv0s7NACxAt2V9/6Kkc9HYDjXYx7dEAnn6NkAoV1rGDpj+0EsMwZfYXUxdmlLVdVaV6hQWSxxkDnTxngL7yxikMWFPWNKDHYrhHkv++4reIWwYXtWh78egi2IAt4DKpkvx3f+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122484; c=relaxed/simple; bh=w/aktebwl1Y3XGcI23NvEGJ5CAnVHvAXb/qbZPYpZaY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dGYUD/64a/PphY7AU+eLXYA0K/p5aOa2ICsIoNbALRM7JoG8ZI5XK+ygcyj9K2bacbTXtF2Z0erH5AngbUrdcOyMfsK9z/dYiKWHcRJLVCSxtJx48CZtSjw69PFG9UPeGEO9+Yu/Wn3R5ept5h94hgjir6Da8j/c0QjVtpaIED8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZaFcAjuV; arc=none smtp.client-ip=74.125.225.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZaFcAjuV" Received: by mail-wm2-f13.google.com with SMTP id 5b1f17b1804b1-49d1ca5b0d6so2733455e9.0 for ; Tue, 22 Sep 2026 17:14:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790122479; x=1790727279; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=43QVrNsixc1/5D2acx7HxxSlwhomqIkjYst8NKgVyIQ=; b=ZaFcAjuVYze3JesFBQXxiHNekH7ua22ghkYHsARl1JMy7QjA9bA2G6c1uE523IvghL cBNF0HqiJK1GWsotHY1oTEPu3dF7dhlWXKibZmqIEKq7WK5s+zHeXLOluRYXSCPaRru7 OyO1+0qJyeG5qb35Bkg4jwY2J5ASQZiYJREy1ghtnoceJnF2lJA4Zu8qTeXJZ/Ijju47 kkohcGNph8LmFK7KACCTb17sg5W7PjTI4qHeVCYjeuMSl9X2148/oBASzz9UoZnYQr57 or5yn0z411Jg1M40G0FBgQFZlr8iwJQLywoJ8eRsv3hCd/SnWKcrhjYd4XxZu2SWLVd5 Tf8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790122479; x=1790727279; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=43QVrNsixc1/5D2acx7HxxSlwhomqIkjYst8NKgVyIQ=; b=1GyshV4R2ceAYAV/BvUUnfc8+Ibn4qTFeHSv2tPOWB0C8whTSHZ8jM3l0lGm/6QLO9 YCBrO5d9a2YPxcFQ8GuVZ7gt0yS/ZtUcOAj8jR/9L9WT0Cy5X75WbPlRhaFF1NeC8hZ9 UmNtUruduBk1jAmZYE3WGqmSGGwPRobvxPhbCBs4E329fP7eniE6SRmraEElYLTqk+hD /6YKTkcBUCY5ZvnBvtXR6panAI7kxJt75GcBwxjXwRhSAX3kpBqX/6RusaUnBFIaL8ML IDXd+N9ZngwlCMuh7tXLZxT/50qBoPJcaNJaKwlPmADk7mAapwzWxs711zX+mmwOGSwI B9CA== X-Forwarded-Encrypted: i=1; AKwUvBytESJv5BP7gxTuN4f9tHDqn7WNvEaYQUGoDQ8iUJ4MD10t+6tDdQQx9YGpqDBSWAEmp4keGF2wBLI5y48=@vger.kernel.org X-Gm-Message-State: AFuF++nNbhxCUMB4nMVSUvl5MqUz6xIHYGCP/79hbKKcSwyASwrcmJ41 u0KsBcNxpjd01xCddPfSu6LDYBOZBe8xN1k1khy53//Tu19HoPCq3RG2 X-Gm-Gg: AYBFou3w9JdjIotsqOY9SV8luAUyfdtQ4o4E0E0c0NyqVatdEXq+u6ApPiU/dDHTFoh fEMje4/D7Ku6gjXFlLy35pQMV5zZaEzv7UfAQQO4unE0aqa8+D/MQW+6+TrPmHXXjdVrc1fgMV6 p2FIowIOv+9KChduxKF0c4wE27g/h+UGbgBktkyQjG8vPHSLCcdQPzVOYmJ/oj/50aIMfUKhuJk NU8z3+337W4LjNRu7LNKCBdcCNkTZm0GvT9HWg3B1Ks0ZM6xzMqMIBIp8kv3E2/U8kMf7dwQASE +eQdpWAK81M6Uab1mTfCThuMkQsNFJZX/JyUO/bMeTGQii1dfdbz3UAkdht4HdJB1E89DooY4WL RzvXOuwDnQXel8nYCO1XxwxY5NiiEUbeSIHAplcwJxRe2jGuoaqDJB3GOsxH0XJ0NR4GxdO41WD +kMWli5LUXYgkyl8Isbl1a0tt5nlEllCJlyt0MDpuMBKGdDczo9K2uWxsaV890+oDsDTm4x1jMs YiXsFv3ObRLDGK2ojoYOmltdYE1n+f3oa1qvGvO+P4osGh7O9aI64mYLpw103mfPh1fT6vhpi87 HVSYxnY9lDgHmpAAQ1/BgqqbuvKn6BZASHIb4vNmI2bGk50/x9SiMlsE4qlNX90/W61i5lKyzmK Q8EnS9GbaX6E+80NA/jSpH0lRVu4IfxGT X-Received: by 2002:a05:600c:a013:b0:49f:d58f:1f8b with SMTP id 5b1f17b1804b1-49fdf12bd26mr8409485e9.18.1790122479138; Tue, 22 Sep 2026 17:14:39 -0700 (PDT) Received: from localhost.localdomain (dynamic-2a00-1028-c000-0ddf-8c68-4a09-6ad6-6324.ipv6.o2.cz. [2a00:1028:c000:ddf:8c68:4a09:6ad6:6324]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde180a39sm34612165e9.1.2026.09.22.17.14.38 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 22 Sep 2026 17:14:38 -0700 (PDT) From: Josef Schlehofer To: Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Hyunwoo Kim , Josef Schlehofer Subject: [PATCH 4/6] media: drxk: stop accessing a disconnected device Date: Wed, 23 Sep 2026 02:14:08 +0200 Message-ID: <20260923001410.30297-5-pepe.schlehofer@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260923001410.30297-1-pepe.schlehofer@gmail.com> References: <20260923001410.30297-1-pepe.schlehofer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" drxk continues frontend status polling after its USB device disappears. read_status() keeps issuing I2C accesses, and drxk_get_stats() ignores the error from get_lock_status(), so callers see "no signal". Enter DRXK_NO_DEV when an I2C transfer returns -ENODEV and reject further hardware accesses in that state. Propagate -ENODEV from drxk_get_stats() so read_status() reports the disconnect. Also check the state after the tuner's gate control in drxk_set_parameters() before continuing demodulator setup. Signed-off-by: Josef Schlehofer --- drivers/media/dvb-frontends/drxk_hard.c | 29 ++++++++++++++++++++++--- drivers/media/dvb-frontends/drxk_hard.h | 2 +- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/drivers/media/dvb-frontends/drxk_hard.c b/drivers/media/dvb-fr= ontends/drxk_hard.c index 0815083e54eb..df5f5ea959ce 100644 --- a/drivers/media/dvb-frontends/drxk_hard.c +++ b/drivers/media/dvb-frontends/drxk_hard.c @@ -208,10 +208,27 @@ static void drxk_i2c_unlock(struct drxk_state *state) static int drxk_i2c_transfer(struct drxk_state *state, struct i2c_msg *msg= s, unsigned len) { + int status; + + /* Don't touch the bus once the device is known to be gone */ + if (state->m_drxk_state =3D=3D DRXK_NO_DEV) + return -ENODEV; + if (state->drxk_i2c_exclusive_lock) - return __i2c_transfer(state->i2c, msgs, len); + status =3D __i2c_transfer(state->i2c, msgs, len); else - return i2c_transfer(state->i2c, msgs, len); + status =3D i2c_transfer(state->i2c, msgs, len); + + /* + * -ENODEV from the I2C adapter means that the device is gone for + * good, e.g. an unplugged USB bridge. Stop accessing it from now on. + */ + if (status =3D=3D -ENODEV) { + state->m_drxk_state =3D DRXK_NO_DEV; + pr_warn("device is gone, stopping all I2C access\n"); + } + + return status; } =20 static int i2c_read1(struct drxk_state *state, u8 adr, u8 *val) @@ -6319,6 +6336,10 @@ static int drxk_set_parameters(struct dvb_frontend *= fe) if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0); =20 + /* The device may have disappeared while the tuner was programmed */ + if (state->m_drxk_state =3D=3D DRXK_NO_DEV) + return -ENODEV; + old_delsys =3D state->props.delivery_system; state->props =3D *p; =20 @@ -6487,7 +6508,9 @@ static int drxk_get_stats(struct dvb_frontend *fe) =20 /* get status */ state->fe_status =3D 0; - get_lock_status(state, &stat); + status =3D get_lock_status(state, &stat); + if (status =3D=3D -ENODEV) + return status; if (stat =3D=3D MPEG_LOCK) state->fe_status |=3D 0x1f; if (stat =3D=3D FEC_LOCK) diff --git a/drivers/media/dvb-frontends/drxk_hard.h b/drivers/media/dvb-fr= ontends/drxk_hard.h index a850a876deee..dc6ee0bb6854 100644 --- a/drivers/media/dvb-frontends/drxk_hard.h +++ b/drivers/media/dvb-frontends/drxk_hard.h @@ -106,7 +106,7 @@ enum e_drxk_state { DRXK_DTV_STARTED, DRXK_ATV_STARTED, DRXK_POWERED_DOWN, - DRXK_NO_DEV /* If drxk init failed */ + DRXK_NO_DEV /* drxk init failed or device gone */ }; =20 enum e_drxk_coef_array_index { --=20 2.54.0 (Apple Git-157) From nobody Thu Sep 24 14:26:05 2026 Received: from mail-wm2-f12.google.com (mail-wm2-f12.google.com [74.125.225.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 063E1233949 for ; Wed, 23 Sep 2026 00:14:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122488; cv=none; b=UUrx7HvwYKadLYntdg9o4MBCvAQV4TnlmYxx/DFH72m3dnYxqMTL2mWfxCeSPoDt4NLXOVsUUsSvRRyWisSXCB/t3XLrawuRSCrHsNhIc0zpAM32B5doFbN+fqnYWCbv8V+CSmex+7TxUud2tNwI67REXDY39uOisLbhVOt2z6o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122488; c=relaxed/simple; bh=aeNMuhZLVd8auv5KzMsrPSW1MpK+eJ8bpu5C3Os+nhQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hQudHDOEgdyL0qclwRzAT9eHOT8Adc5+xfF+hhq9hDsc8DNNW44u3w8Hp11/xmlaponHRKkU/LyaxshgcsPW8xrkj/BzDc3XAS92KwiLBADoA5VnBJsDKVPcPQahWF45kcwysGP7Ad4QxkBTLd6H977tIZOkqf6TmG6hFqdg2b4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=anN9cKE3; arc=none smtp.client-ip=74.125.225.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="anN9cKE3" Received: by mail-wm2-f12.google.com with SMTP id 5b1f17b1804b1-49b912e2406so1458775e9.1 for ; Tue, 22 Sep 2026 17:14:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790122482; x=1790727282; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=LMLRsg30TTBsYgaLuhHOpTrYOv4xBwe4rnv3RttCS9s=; b=anN9cKE32WSzpwxUvaLWx9EkH/FZrakZ29xdlcif4GYW/hk5ij/REmvUxK69LaD9mH kS6mSclXnjFgPtCQ8vGZZSbM90av8ubZKvoL9NP6KcLXx5ClIZmMt4QMMLv04rUfGR0a eh2IogPt3qcb6/uOAyCmcmaTaP69/90DJTPLTZ4Bzu+bHatAU4ZJ9Yy4zX327YBRynzh PvxhDJT1N9qmJHXIKrQ5MzJWAenA8Qa60bt9aCF2IC08qpHC7E6je14swG4cLKtMjE68 W1hIWRtM9cCyOw2Sb16ZMNsEtmEtHyZ7biuyQKosyo9Calm0YVKGahARYms70ed/VGdn HKKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790122482; x=1790727282; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=LMLRsg30TTBsYgaLuhHOpTrYOv4xBwe4rnv3RttCS9s=; b=rafWXItOr6DF/1+LajljCEQrH6hj0MT4Mn/aAy6QtakVLG6Bm8Ld0kScF2OoouXCkW onuv8UuC0q+n2QpnKCXi45Yl6xLTNjTqWvKN7lFvG5YU5Vn/LajSXUdwHZ4zWAADyof1 Sr0Cor0sWc42btuckMiBPSxo0uwoEXQu3gF/f4Sbw7DGq6TokBUUwcEn6MgQTSZSHIGY AnqH6C5BQlf2v0ps7Y8102j8T05qob/gPG9fR6/w6w7RT56sfUQDg5SE0x3/RYoPb62+ PFoR28WvPtWHTmTfoyZeGXsk4MZJhXOIjszmge+bJeqiyn9b3HHz71uqlulwNDNxOIyp v04w== X-Forwarded-Encrypted: i=1; AKwUvBy5b0pwz0895Ir7c76acNTzadn1rPKJXATEnSv4qRJ/fIpAnlktI1op0riGRJyDV4JhunbcsyHMeqUR29I=@vger.kernel.org X-Gm-Message-State: AFuF++mUpdoNFOB1cIXyKGDTXx8aDrFnZP5ZP6FNlLHkjIDVQPXvrF7K 1i3NRACyiIIMXZZyG8UNDKJunwQ0oBpwp9r+veMUGc+PJyvL+54dcBRR X-Gm-Gg: AYBFou2D+TuCrtPtIGXK+YFXEu721FCBZOrh7TTiI7sa/H5671okwPUaJCe/GGmsEtH DU1kXBw8hA2TMlt2vUb4wk60NjHFk3snbkoWdS51BbhXQujRT8fEV4d6pB+UH6aj24H5DnS1ZY1 ZGb+f9Qytx5VSA/VGcwtRvnU1ES72zq7LIwsoBS6As1AHPNWAIFfXv9BfL7p1PlNskMVulA1ySc 8sML29ChAjefvlXkstOlK1S23S3fjTkTFNxrFIKV9rXr+FyDdLodc0ZSdJaxJZsXtrAFZyftVLG +TnFpMMaGfdwsRt2Lm/emuZKDu6pS2FPDWts0aJ2G/6biLc+RTr5ZhvTukyYP8nB6aHzW26vruE EGHue7bLCXdigLOZPTY3YG9IjWzz8Q+TfkJ52oc9HUGl1ytHnvRRzkagUjduC4VVB+djk5j+GMK 0QSnXgJ7BQ1X7mv7Ce58iPt9Ea0URlJKLeXD3OXV2XVMguB5WTyv9Wl09gBxUXxgkYIyihd9xyq XCjEEiRVe9sMYyUmOmT+rrgWsQQ0LnnXObIB1/2A3ycpfZTbSbNmTdgF87R2wERCBZM/mNlW/N0 a7nbda1OKqXONonLtfJdLsORMSOJlVanydzudEmGvNwV3NQ8TXpuIeUFCyHScBFWJ9J3W5YEK5h 6MsaMJjinuEVbBXmIg80kKA== X-Received: by 2002:a05:600c:8a09:10b0:49e:65f2:db64 with SMTP id 5b1f17b1804b1-49fde36ffc6mr8931375e9.5.1790122482178; Tue, 22 Sep 2026 17:14:42 -0700 (PDT) Received: from localhost.localdomain (dynamic-2a00-1028-c000-0ddf-8c68-4a09-6ad6-6324.ipv6.o2.cz. [2a00:1028:c000:ddf:8c68:4a09:6ad6:6324]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde180a39sm34612165e9.1.2026.09.22.17.14.39 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 22 Sep 2026 17:14:40 -0700 (PDT) From: Josef Schlehofer To: Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Hyunwoo Kim , Josef Schlehofer , stable@vger.kernel.org Subject: [PATCH 5/6] media: dvb-core: dmxdev: wake up readers on release Date: Wed, 23 Sep 2026 02:14:09 +0200 Message-ID: <20260923001410.30297-6-pepe.schlehofer@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260923001410.30297-1-pepe.schlehofer@gmail.com> References: <20260923001410.30297-1-pepe.schlehofer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" dvb_dmxdev_release() sets dmxdev->exit and waits for open demux and DVR files to close, but readers blocked in dvb_dmxdev_buffer_read() wait only for data or buffer->error. Setting exit therefore does not wake a blocked read or epoll wait. The release, for example on a USB disconnect, then waits forever. Set -ENODEV on the DVR buffer and open filter buffers, wake their wait queues, and return -ENODEV from dvb_demux_read() once exit is set. Do not flush buffers when consuming -ENODEV so all readers see the error. Blocking DMX_DQBUF waiters are not covered. Fixes: 57861b432bda ("V4L/DVB (5511): Fix 2/3 for bug 7819: demux and dvr") Cc: stable@vger.kernel.org Signed-off-by: Josef Schlehofer --- drivers/media/dvb-core/dmxdev.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/drivers/media/dvb-core/dmxdev.c b/drivers/media/dvb-core/dmxde= v.c index 6a825d9bae43..5f872bc89345 100644 --- a/drivers/media/dvb-core/dmxdev.c +++ b/drivers/media/dvb-core/dmxdev.c @@ -63,7 +63,9 @@ static ssize_t dvb_dmxdev_buffer_read(struct dvb_ringbuff= er *src, =20 if (src->error) { ret =3D src->error; - dvb_ringbuffer_flush(src); + /* -ENODEV: the demux is gone for good, keep it for all readers */ + if (ret !=3D -ENODEV) + dvb_ringbuffer_flush(src); return ret; } =20 @@ -81,7 +83,8 @@ static ssize_t dvb_dmxdev_buffer_read(struct dvb_ringbuff= er *src, =20 if (src->error) { ret =3D src->error; - dvb_ringbuffer_flush(src); + if (ret !=3D -ENODEV) + dvb_ringbuffer_flush(src); break; } =20 @@ -1035,6 +1038,9 @@ dvb_demux_read(struct file *file, char __user *buf, s= ize_t count, struct dmxdev_filter *dmxdevfilter =3D file->private_data; int ret; =20 + if (dmxdevfilter->dev->exit) + return -ENODEV; + if (mutex_lock_interruptible(&dmxdevfilter->mutex)) return -ERESTARTSYS; =20 @@ -1457,8 +1463,29 @@ EXPORT_SYMBOL(dvb_dmxdev_init); =20 void dvb_dmxdev_release(struct dmxdev *dmxdev) { + int i; + mutex_lock(&dmxdev->mutex); dmxdev->exit =3D 1; + + /* + * Wake up everyone blocked in read() or poll() on the demux and dvr + * devices, so that they see the error, close their file handles and + * let the waits below finish. + */ + spin_lock_irq(&dmxdev->lock); + dmxdev->dvr_buffer.error =3D -ENODEV; + for (i =3D 0; i < dmxdev->filternum; i++) { + if (dmxdev->filter[i].state >=3D DMXDEV_STATE_ALLOCATED) + dmxdev->filter[i].buffer.error =3D -ENODEV; + } + spin_unlock_irq(&dmxdev->lock); + + wake_up_all(&dmxdev->dvr_buffer.queue); + for (i =3D 0; i < dmxdev->filternum; i++) { + if (dmxdev->filter[i].state >=3D DMXDEV_STATE_ALLOCATED) + wake_up_all(&dmxdev->filter[i].buffer.queue); + } mutex_unlock(&dmxdev->mutex); =20 if (dmxdev->dvbdev->users > 1) { --=20 2.54.0 (Apple Git-157) From nobody Thu Sep 24 14:26:05 2026 Received: from mail-wm2-f13.google.com (mail-wm2-f13.google.com [74.125.225.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F1871223336 for ; Wed, 23 Sep 2026 00:14:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122491; cv=none; b=fM7THRdLsLwbxo4aeKyu3Xksu3JMiBZ0SBVC7PvKwVIRwxCC25gRZS/vns8ek2OvzjZlzXlrPMVpR9MX8RIsCvAibPpgK2pbFXjaf6GZ7J0Vrl7/19ch+hI+HDo1DP/XOIHALLnFSk8qf5D6BRIbt0Sa4doUZbrA1cqzNlSZh6w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790122491; c=relaxed/simple; bh=cbGo4TQAahnvid5BzTcvwPcvLNuaLGXSG1MBAuo5OY4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z77D/oJlE0gJbsJrK4hgqQPSDvAzB66OFfj05qLq2lnAsXI/3AU/Hl8khxQ2++YK0j998M8ssj7st5gxoxY/6s41Q2v+W8qqMWOsUa/3xduU3KkFpmcM0BPYGfEIUln0J8Ae2dVhoTYIylQ/QY5gNDzt+mCCBKaLKOUOrVK0bvo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CysKucRj; arc=none smtp.client-ip=74.125.225.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CysKucRj" Received: by mail-wm2-f13.google.com with SMTP id 5b1f17b1804b1-49e8185e037so1497795e9.3 for ; Tue, 22 Sep 2026 17:14:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790122484; x=1790727284; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=k9P3MjJHm5LPq6fNgfWUG9o64JUvZTiy872DYV+9qyA=; b=CysKucRjAeHbUCuu1hB8404+eSBj109byUFUwmhFgg4L6sF5S6GeXDOPDlsORn1+8T 6DrC4GKo+nudfefJU5qot6RNuLEsmccusGn6Z+INVHw8vfjscnZwPyjaJjjlIo0ez1dm K/0eSpxxAkzNrrizfR3s4RKnxwKrRSCNZO9Ngcw6XAsLzUTKIv8AYySR7Qbbt6XG+QsC xBjh1c9kg6hY2t/MhC92GeIJGIU4exBrx5ff0pDMg4pyIQtI0kE7JZsdBTaiEkO1Now0 vYP0fPmAR4sxRCwLc3PLgZ+OXMPWdg5ApzPmtIY8LQMqg+tp/1XvIzUp2+GreNnfuba9 IqDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790122484; x=1790727284; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=k9P3MjJHm5LPq6fNgfWUG9o64JUvZTiy872DYV+9qyA=; b=K/VQtAMF3HUbtWpSLaW4bM+evdkJtxI6QQeorCgolKYgKnrP7zGci9YPxldwmrYJBS I4NxFiycwwi7yU5CSs2TEBmmTLrmZpWcHuWCFh7YhiaGBTKiR9LIOOpMYi5GrGZ4AVkn 0L+ipkq01sWcrqN9sgczzYmXrr9XbTXXJiVF7Obg9JTKWWAgYi7HSVLNGwJIMGf7sSQa WsAVkH58WkVg+hT2rKGD/hUDtwV9gAhr+2XGBmE7s4F6zC7vClvcVldPc5f+U871dDLw v1ri0RqGc8kkgHLh5pymoXtA5XUTQmzGQwK38q1oHu84oo4fXSXJk06PlP766jqqPs7V qVgQ== X-Forwarded-Encrypted: i=1; AKwUvBw3crNb+ty9SLki1yXLvR2l848IYU3KCJgQONqbLTbYObDnKiJ5BY9t/cZxACML2K2Aphf3GtL1Dy2QtYA=@vger.kernel.org X-Gm-Message-State: AFuF++nS29CfwVOjTAQ9y2vWGUzSaVseLKJiuOuRPG5IX4xWIQiA6r1G eC4TFgFpdRLnqADNhDVIgS2ooZBTZhglqY18EGvoS1MZF3aFmySdNgJR X-Gm-Gg: AYBFou2j2uliLSZhA/gTcRc5xn3w3eIqRV4vfUkaOad6fiOZYQTD0BpOYSJfbiX1ehX h1PVuBDCA/ftQ519LDqp2XCdEKwcr/s05/rnlEHLVelyTlVOOYXU81gc/eC+TjfzAw1IspVM5md XgWMva44PB2bRu2+6BVVo+UNvMTFUTbE0nSdvV/OL0uUe0Ylpw81rh/N50OayKE44dQAqyCMjla JkBsW8u4G75A3yFHvuy2vXWKN1Ao+uG2oFG7KuGwRtpjTs8xR2F5pPluto7Apd119VMHdrB9ZWo EfQU7J7kvx8XMJJlXrxZCX0iokVsbrs3JO9juyC3POwgRs7mgd+KTfijy6fWtRPcwqiGW4/262k j/FGwRHA7LWdVbros2Yk0gra4nFl8Q8zJ1E7hTeRJYX7PW3pwo9JEER3p9e7nng/KgHN6vhZZks 5h7KYnZyGkoHZxR/WRD1WT8JkcyZJ6XFR24iheCv1nAG9R9YyTMg+QtKiEa8ATkVvVhay7zfabB kULzH7Vyvy/GR1/hYfvK3yOt442RPASmaGeqk+U4kdnzJ4w5CVlJxbYapwfgxAhtL/SwMRxSbSP UcCnyp4r89+FYY+ONzZXhq3BzKcAV9KFWkHmQL6kutvztfV6SROE7dsg9uAUd6q4mgcUgu+4epa ZJbVeZx5yf+nKDyK6Ku4A+A== X-Received: by 2002:a05:600c:8b83:b0:49c:fea3:8633 with SMTP id 5b1f17b1804b1-49fdf14578dmr9080065e9.24.1790122484156; Tue, 22 Sep 2026 17:14:44 -0700 (PDT) Received: from localhost.localdomain (dynamic-2a00-1028-c000-0ddf-8c68-4a09-6ad6-6324.ipv6.o2.cz. [2a00:1028:c000:ddf:8c68:4a09:6ad6:6324]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde180a39sm34612165e9.1.2026.09.22.17.14.42 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 22 Sep 2026 17:14:42 -0700 (PDT) From: Josef Schlehofer To: Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Hyunwoo Kim , Josef Schlehofer , stable@vger.kernel.org Subject: [PATCH 6/6] media: dvb-core: wake up CA users on release Date: Wed, 23 Sep 2026 02:14:10 +0200 Message-ID: <20260923001410.30297-7-pepe.schlehofer@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260923001410.30297-1-pepe.schlehofer@gmail.com> References: <20260923001410.30297-1-pepe.schlehofer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" dvb_ca_en50221_release() sets ca->exit and waits for open users to close the CA device, but read, write, poll and ioctl can continue and blocked readers and pollers are not woken. Return -ENODEV from CA read, write and ioctl operations and EPOLLERR from poll after ca->exit is set, and wake the corresponding wait queues. Keep the release wait so the existing lifetime protection remains in place. tvheadend keeps the CA device open and waits for it with epoll, so it needs to observe the disconnect before it can close the device. Fixes: 280a8ab81733 ("media: dvb-core: Fix use-after-free due to race condi= tion at dvb_ca_en50221") Cc: stable@vger.kernel.org Signed-off-by: Josef Schlehofer --- drivers/media/dvb-core/dvb_ca_en50221.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/drivers/media/dvb-core/dvb_ca_en50221.c b/drivers/media/dvb-co= re/dvb_ca_en50221.c index 1b91ebb8f667..d478f995d5a9 100644 --- a/drivers/media/dvb-core/dvb_ca_en50221.c +++ b/drivers/media/dvb-core/dvb_ca_en50221.c @@ -1353,6 +1353,9 @@ static int dvb_ca_en50221_io_do_ioctl(struct file *fi= le, =20 dprintk("%s\n", __func__); =20 + if (ca->exit) + return -ENODEV; + if (mutex_lock_interruptible(&ca->ioctl_mutex)) return -ERESTARTSYS; =20 @@ -1460,6 +1463,9 @@ static ssize_t dvb_ca_en50221_io_write(struct file *f= ile, =20 dprintk("%s\n", __func__); =20 + if (ca->exit) + return -ENODEV; + /* * Incoming packet has a 2 byte header. * hdr[0] =3D slot_id, hdr[1] =3D connection_id @@ -1618,6 +1624,9 @@ static ssize_t dvb_ca_en50221_io_read(struct file *fi= le, char __user *buf, =20 dprintk("%s\n", __func__); =20 + if (ca->exit) + return -ENODEV; + /* * Outgoing packet has a 2 byte header. * hdr[0] =3D slot_id, hdr[1] =3D connection_id @@ -1635,8 +1644,11 @@ static ssize_t dvb_ca_en50221_io_read(struct file *f= ile, char __user *buf, /* wait for some data */ status =3D wait_event_interruptible(ca->wait_queue, dvb_ca_en50221_io_read_condition - (ca, &result, &slot)); + (ca, &result, &slot) || + ca->exit); } + if (ca->exit) + return -ENODEV; if ((status < 0) || (result < 0)) { if (result) return result; @@ -1819,6 +1831,9 @@ static __poll_t dvb_ca_en50221_io_poll(struct file *f= ile, poll_table *wait) =20 poll_wait(file, &ca->wait_queue, wait); =20 + if (ca->exit) + return EPOLLERR; + if (dvb_ca_en50221_io_read_condition(ca, &result, &slot) =3D=3D 1) mask |=3D EPOLLIN; =20 @@ -1965,6 +1980,13 @@ void dvb_ca_en50221_release(struct dvb_ca_en50221 *p= ubca) ca->exit =3D 1; mutex_unlock(&ca->remove_mutex); =20 + /* + * Wake up everyone blocked in read() or poll() on the CA device, so + * that they see the error and close it. The wait below cannot finish + * before the last user has closed the device. + */ + wake_up_interruptible_all(&ca->wait_queue); + if (ca->dvbdev->users < 1) wait_event(ca->dvbdev->wait_queue, ca->dvbdev->users =3D=3D 1); --=20 2.54.0 (Apple Git-157)