From nobody Wed Dec 17 10:54:38 2025 Received: from mail-qt1-f173.google.com (mail-qt1-f173.google.com [209.85.160.173]) (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 7299F1EE7B3 for ; Tue, 10 Dec 2024 22:22:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733869353; cv=none; b=j9T4h+hMm+ZFtjyUzGIb3pDGbLTiKvhSdhi2rYGOrJzQ9B3aRmH0jINmus6z9dZliM+8ciBcZHeAMICmdmMzZhd9fK79C7tVmLFled1oSPo2r14/Jg+Xz/e0DnNyRzWO4N1I4mVdTldiFr7eplCmwYsDZ5fWHwV9/cQA6uc5T/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733869353; c=relaxed/simple; bh=yv8i9nHRCz0vaaoDZJOFBzaD6vQsxKrtwXv9v5tS564=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HwRNxFPkiGfpb4AT1NvtxSukR6cCZkEznsccDm9fYXvZUh3IoUM0k5Sik07VrKrLDHPVgESASO4QfDoo5OeMy6KqnITOipbtkLvynY4qI1asEf1ncTOMpO0yC6/6/m0O17kBgyfOWLXaHYBLcW2E0MV9RaL+YJxj4hw6KAevue0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=V6VEKau2; arc=none smtp.client-ip=209.85.160.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="V6VEKau2" Received: by mail-qt1-f173.google.com with SMTP id d75a77b69052e-467745731fdso10821351cf.2 for ; Tue, 10 Dec 2024 14:22:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1733869350; x=1734474150; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=MjQrugQYBz6Mf6XUxcZGSynpVjt6TTGZxVran2d8wNY=; b=V6VEKau2JlEXpdNMX38GBleTMYLXS2qBISlYRzGRklwl82BCVU5rvMSgYG71sB56EI pccp02n4V6Ho7Ma9zjKsYo56JgwV2WpyfJbGz7QRrCqK0TkQsanwxSEL27jhWhOHsVrU R7VDptPY2IQROe32yrN558AsZ3hBFNj1kpOFc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733869350; x=1734474150; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MjQrugQYBz6Mf6XUxcZGSynpVjt6TTGZxVran2d8wNY=; b=G5iRAOii6bY6qciLBL8n3AbwO07jgOz9VpvaThnvDoMlSNHn0OdTA6rHpE7YJzsTnr Zn087gpzBythMDC+ZJykMX0vCTQ+Hk20+BjkrfA1yxZme3OUDpz8FNO+8au+qTRFP3jW u8hHOxJjLOD2UUY1YdoXwsFeqdKm9jhPvRsY2QMy0ApkgKW11VpUfMmCsOYqVPIvYPPh 5zGSFmgSIWdfKrwW9c0tC+zxDGkYcERrPoSdWfA3tltSNvVdHcFE+AbngyC4AClON543 6ThMrGC//VlAN6tamv3FxbG1lambT+esa6VWGXzygYoIArSl4nzqIQ8c2WkfYx0go63Z VdNg== X-Forwarded-Encrypted: i=1; AJvYcCXfLybaYd/jpABKG7EB7x9d3rcDWa9edSKwCa7CFuHWNceHV7jKvk5yAkGQL14B6KTX8/HEu3LIafRPJn8=@vger.kernel.org X-Gm-Message-State: AOJu0YyuGcmE4fTB5oH5gR1ErVxI+f0cmTKwOUCTsuBQQslr9cLwwbZE PGCqBimoXJsgRLINe+UkYJJ7rivuEp5nFO2507Tv0VPwtQ4n3a5JQuhSBFAsHQ== X-Gm-Gg: ASbGncteoIuuTnROl24HtynW1We/60Ft8B6IEn7yQKBj/2sHNLgJJJZLw8/MBbBGfhr RUwkcdDB1vUDSSkBfurKhQF+yfXFnkfQ5OiftSSVV4nRU/pgN30e4eV5ZijSfn7HPtxh8lPqds4 4dZP73QYiNxroqMbZ8PmD8kvGvQVBEMv5TRlKhjCpH8aXJ8N4VXfWJl6h2AiIXR6BwTpJnnxY6T wOUW09NPH6fX4P70SZNvbQd17gWeCXkN1I2AcPWM5xnZv5efnGrXYjB8paDFioVbkLoZ0oQ30gD 5A2E/quwz0Z9dPCMJE8LaxTIVa7S X-Google-Smtp-Source: AGHT+IHXwNu2FHsl5zNm8GOLrnsaIJdyyD8xiUqBMDSYEmUuoHOfVqx8K6rcdS/IDyFjgfPy+EAgKA== X-Received: by 2002:a05:622a:1187:b0:467:1e96:645f with SMTP id d75a77b69052e-467892ea223mr8140481cf.6.1733869350436; Tue, 10 Dec 2024 14:22:30 -0800 (PST) Received: from denia.c.googlers.com (5.236.236.35.bc.googleusercontent.com. [35.236.236.5]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-467776034b0sm11232441cf.74.2024.12.10.14.22.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Dec 2024 14:22:29 -0800 (PST) From: Ricardo Ribalda Date: Tue, 10 Dec 2024 22:22:22 +0000 Subject: [PATCH 1/3] media: uvcvideo: Return the number of processed controls Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241210-uvc-data-backup-v1-1-77141e439cc3@chromium.org> References: <20241210-uvc-data-backup-v1-0-77141e439cc3@chromium.org> In-Reply-To: <20241210-uvc-data-backup-v1-0-77141e439cc3@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda , stable@kernel.org X-Mailer: b4 0.13.0 If we let know our callers that we have not done anything, they will be able to optimize their decisions. Cc: stable@kernel.org Fixes: b4012002f3a3 ("[media] uvcvideo: Add support for control events") Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_ctrl.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 4fe26e82e3d1..7e2fc97c9f43 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -1810,9 +1810,14 @@ int uvc_ctrl_begin(struct uvc_video_chain *chain) return mutex_lock_interruptible(&chain->ctrl_mutex) ? -ERESTARTSYS : 0; } =20 +/* + * Returns the number of uvc controls that have been correctly set, or a + * negative number if there has been an error. + */ static int uvc_ctrl_commit_entity(struct uvc_device *dev, struct uvc_entity *entity, int rollback, struct uvc_control **err_ctrl) { + unsigned int processed_ctrls =3D 0; struct uvc_control *ctrl; unsigned int i; int ret; @@ -1847,6 +1852,9 @@ static int uvc_ctrl_commit_entity(struct uvc_device *= dev, else ret =3D 0; =20 + if (!ret) + processed_ctrls++; + if (rollback || ret < 0) memcpy(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), uvc_ctrl_data(ctrl, UVC_CTRL_DATA_BACKUP), @@ -1861,7 +1869,7 @@ static int uvc_ctrl_commit_entity(struct uvc_device *= dev, } } =20 - return 0; + return processed_ctrls; } =20 static int uvc_ctrl_find_ctrl_idx(struct uvc_entity *entity, @@ -1910,7 +1918,7 @@ int __uvc_ctrl_commit(struct uvc_fh *handle, int roll= back, uvc_ctrl_send_events(handle, ctrls->controls, ctrls->count); done: mutex_unlock(&chain->ctrl_mutex); - return ret; + return ret < 0 ? ret : 0; } =20 int uvc_ctrl_get(struct uvc_video_chain *chain, --=20 2.47.0.338.g60cca15819-goog From nobody Wed Dec 17 10:54:38 2025 Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) (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 C3B9F1F1900 for ; Tue, 10 Dec 2024 22:22:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733869354; cv=none; b=dY4z6xwG353+FbRgpfZymNQCqDHDXEvuH89ECzssl9+LGdWBGAi084nWH8QuluDlbPqCT+97Dwp1hjuW96KimpxuLrWFtlNkvBd8Iqi3Cj8zJunn8lm4teR1Ktbw2nJYcA7X9fogRq7MUVVd8fAvmLUbubdEqRpwZv3uV+7b5iU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733869354; c=relaxed/simple; bh=K72388Mo46bPaPYonT5jJ6Lw47MWUey0RMwa7LB7+rA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HLixuU53hoJympBNQCQovIXFny5SJT81c4nMgMTBjmyDY9q0/RtHEftCP5GrkiCjoNshqAgcj5l69FPxMwBg+KQzpHPKyFE5/Jt4O0h+N++/8X/7nkyGeZU9zFcu+UJmTWjLASqAcntoKz+EYrgDTK4IicR3SD8bSCfQ66jnZ4w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=ZizVTI5a; arc=none smtp.client-ip=209.85.160.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="ZizVTI5a" Received: by mail-qt1-f176.google.com with SMTP id d75a77b69052e-4677230a9ccso20031101cf.1 for ; Tue, 10 Dec 2024 14:22:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1733869352; x=1734474152; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=tJLKxDvZkcys4CNhxAUoQwbKiFgypyACQZbRSa8Ir9s=; b=ZizVTI5a/DNfthesS7iIWDxpaRQfpXo4AiqT18JO7TPnDp+HCwawjlk9OvBgqhGxEb ie6ODoosk99RBcC6dh+MCvIMA7NLUYRKA++E647UOuJrn6/PsVFF5vGZGywKFDffHA9y NwIFfRFG9eJVrYFLWKSYZnjWVkaqJa02hONX4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733869352; x=1734474152; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tJLKxDvZkcys4CNhxAUoQwbKiFgypyACQZbRSa8Ir9s=; b=v+SY0OknBnMVsSQO4zjZRtoSYfZ6/wXVP59MIKQp/CG4XgmY/cvQJ++uWkM8nalrcE SiWFsdQEfQcQhELbQy6+IcC2wMlQ9AfagYJO8as1rohP6yjsa1jyrbjy9cWlhXFuXlge GYhkMRspQbXfjEqlJw2tWy7wKQJQN3EFsmiIIL5zTCiKVktOMPaBv27lPclMl+WIgbBa kpbutLxhcJzd5yHKtd+pQsi83T/ydm23Wzgma2usRAqtU7j8kC/6w4Fo9YM4sV8rrWiz 4eRzIw91V47TSquHvmzqNatgkzYSAMPuAzeUfWUyRg8pzf5yPkdM4mjvD1K494K9VBoY kscg== X-Forwarded-Encrypted: i=1; AJvYcCXdBTli7SUpOXGgiw85Cf266A+esZ1tQNbnM9zwRMNn4IKQH24KELIAJphZDYXFNho7xucQ4sUcM8HpsZw=@vger.kernel.org X-Gm-Message-State: AOJu0YyGQ3chjN1nUkVjfCGhriftLALXT4fq/PwmpK5kHlCeED36+u7y Lt5VVa0JWs3uLol/biOTdTawDYyz1eUadfOaLikPxB0aA6NbRaQgzmTzWKMPuXFZDH0QJuA9x7w = X-Gm-Gg: ASbGncu6e1wfcHFcyUS5qMYXCt9BQwhidJactEg9QvLyeh0CvPTviwDL15PQXoPyT49 M9vtyEHfHXgivkMIL6meJlc+LJixyt/ILgowNduJPhy9aEsH0C8KLYdW16dhz0LTx7LdvuuanxU 3ugrmZQ03XtNF4bDm9lN0gr2XVr65b/cm4+LtsG58+bK2VB29W53BaPCap4CX5FvtIGWCAMqe4G DJp7k6qTBF+vBEvOtVYbNOgU/fPc6V4y1lIb9Bb/5ODToaF8KoHVoaUDJOA/67vFj6qtX7CXBh8 XIxXxnvOjDFDwsTTXIoEgVAJdJqh X-Google-Smtp-Source: AGHT+IGwaoCAcWJN2GJxUO5RU2+RMPWc2ZQl9JG0CXgAkbSPwqLMrUX3CS7unfn384D0Zdx4YTo8rg== X-Received: by 2002:a05:622a:5448:b0:467:6833:e30c with SMTP id d75a77b69052e-46789309cdfmr11188201cf.30.1733869351829; Tue, 10 Dec 2024 14:22:31 -0800 (PST) Received: from denia.c.googlers.com (5.236.236.35.bc.googleusercontent.com. [35.236.236.5]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-467776034b0sm11232441cf.74.2024.12.10.14.22.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Dec 2024 14:22:30 -0800 (PST) From: Ricardo Ribalda Date: Tue, 10 Dec 2024 22:22:23 +0000 Subject: [PATCH 2/3] media: uvcvideo: Do not send events for not changed controls Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241210-uvc-data-backup-v1-2-77141e439cc3@chromium.org> References: <20241210-uvc-data-backup-v1-0-77141e439cc3@chromium.org> In-Reply-To: <20241210-uvc-data-backup-v1-0-77141e439cc3@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda , stable@kernel.org X-Mailer: b4 0.13.0 Only send events for controls that have actually changed. E.g.: We are changing entities A, B and C. If we get an error while we change B we do not continue setting C. But the current code sends an event also for C. Due to the fact that the controls are grouped by entities, and the user might group them in different orders, we cannot send the events at the end, but when we change an entity. Cc: stable@kernel.org Fixes: b4012002f3a3 ("[media] uvcvideo: Add support for control events") Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 7e2fc97c9f43..9496ac970267 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -1669,7 +1669,9 @@ static bool uvc_ctrl_xctrls_has_control(const struct = v4l2_ext_control *xctrls, } =20 static void uvc_ctrl_send_events(struct uvc_fh *handle, - const struct v4l2_ext_control *xctrls, unsigned int xctrls_count) + struct uvc_entity *entity, + const struct v4l2_ext_control *xctrls, + unsigned int xctrls_count) { struct uvc_control_mapping *mapping; struct uvc_control *ctrl; @@ -1680,6 +1682,9 @@ static void uvc_ctrl_send_events(struct uvc_fh *handl= e, for (i =3D 0; i < xctrls_count; ++i) { ctrl =3D uvc_find_control(handle->chain, xctrls[i].id, &mapping); =20 + if (ctrl->entity !=3D entity) + continue; + if (ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS) /* Notification will be sent from an Interrupt event. */ continue; @@ -1911,11 +1916,12 @@ int __uvc_ctrl_commit(struct uvc_fh *handle, int ro= llback, uvc_ctrl_find_ctrl_idx(entity, ctrls, err_ctrl); goto done; + } else if (ret > 0 && !rollback) { + uvc_ctrl_send_events(handle, entity, + ctrls->controls, ctrls->count); } } =20 - if (!rollback) - uvc_ctrl_send_events(handle, ctrls->controls, ctrls->count); done: mutex_unlock(&chain->ctrl_mutex); return ret < 0 ? ret : 0; --=20 2.47.0.338.g60cca15819-goog From nobody Wed Dec 17 10:54:38 2025 Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) (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 0BB84211277 for ; Tue, 10 Dec 2024 22:22:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733869356; cv=none; b=Nybp7FcQchU+rmNM6iOSr9EI+GgV304+8KNypwH/BbBCa26UOaOdNjxzSCzzmCUcmpLEgvKM8CSxjd1qPFm63WOJWCkKrqPaEKPvfdSz0VFPnaMlb3LJEQUUdW/l3TBF/36fuLefivvxudzWLJSW+SGI7oSPzJAkUtrWvgtJjR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733869356; c=relaxed/simple; bh=D0ZexnELTKVfQSmyeA71ynoDvywobwhOrZ/0Katurbk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TOaPcd8kDzEvdOEEuaD9avTb2A4T3vDQk0CWla/wRxCYfrLwh/Oo7SDTYqMtq6chHOyqrvSECs8qVEZtxLDL/T4T5sdTZYNSOzfY8lhZbR5X08v42fOjS4m7U7fAiGZoeYUh1bV6g5J21MPJleOCiNYBsuWvTXKOtXAFz39z8uQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=YAXYICRv; arc=none smtp.client-ip=209.85.160.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="YAXYICRv" Received: by mail-qt1-f181.google.com with SMTP id d75a77b69052e-46769b34cbfso35129771cf.0 for ; Tue, 10 Dec 2024 14:22:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1733869354; x=1734474154; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=kcafMw9Z0U3vF7FScCVFpDYTrMToPYmiLDGfXKQJyjY=; b=YAXYICRvgicHaSE72QRN8t/j9+S1e+f832n3k+6VXCMXRCYMWSzIl9vtDm2SxcV8sZ CjLym5feYxtUQ79KHOHXhzn97o7QSE/gYcx6evnlaywxy98llZrt8xNnAxwihLKUOXWI UTnzwDRmRs/ojbOWEqBTsCtbiNUONvaSYQWkA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733869354; x=1734474154; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kcafMw9Z0U3vF7FScCVFpDYTrMToPYmiLDGfXKQJyjY=; b=qbBKbz6VR2hitfkLAb6SFencx19z+mjFuQCvE0pgFIt3gbWnHKW3BjiRRW0/CkB13m kB+BbEtM53s4U+7vDGyk/Xhcr0eFkQBrEVjsPyGIq13nk7Bs6A+LO3RdQQCJx7wZl9QR H9I55ovULAeephE07srrlh1R5dcSjcO4P+wFVB23G5xd51PsjTWMUN/kQCUzO00/IMya LqeemOXaRQE1rW2Dmn5kmUtO9SGEI8GUmGJajUefCpAKvu1jCzFusjXC9KFIKbGNDTCd /GtNfh//PXlEsBLvUzgFyWMaZob7MP+Y80RMsqRKo2DPbs3dpZhMEi3KmD9b+CjbFCrq YvmQ== X-Forwarded-Encrypted: i=1; AJvYcCXBnCUsJEGX8wrRQV4jpQJoFu+xrZdoxWLsLoR+ulz9WjxdmUSFN7arvK08sfLY6GntpuvHs26Hsdxr6Ig=@vger.kernel.org X-Gm-Message-State: AOJu0Yx5okmhP3kFOg0/XyIH01VWeAyhKkfG4siFDnxDodQB95Ei+Dke eBH8V1DRku56kGjv6VSUXVhr/zzxSnd+Y9CvQqVyHMBF2aVey7afLhvvx+EdsQ== X-Gm-Gg: ASbGncsLKhlAs9SCQfePYPlAcxAuKCqC0gyN7nzcCDy70tgiCMwjROeqGzqZu0YfqoT KdvMrOK1B1KwPZWCwsF/SHD9yWTEec6WdbEj2jKJNUCeJ8OWRj6wFE18VlHgnljxTgAXvF6eKLr R1zaOK/yk6BHFWmWKIQtqSJJxTGuNFTzOnOxFlyGlAyK76LGShh8gZ6GTjkHyusiryc61UW00WM GxmrTpIKMYboO+cPfHh2Y/dZShYdApVocVOpfqJ0wmqYGhCQWTmoLQbOnMF0bsTooKpzR5axKwJ CASg+YNPEQHg8Uy4vPpHT8TVgo3e X-Google-Smtp-Source: AGHT+IGo9/Hxonb35H4V5LFXpS6P8ognfkxmBy4lOIHwm8Bg86/UKY88TGsyICxmZNUCI03BbZfnNQ== X-Received: by 2002:a05:622a:1b16:b0:467:60a8:8a9d with SMTP id d75a77b69052e-467892932e9mr12907201cf.8.1733869353966; Tue, 10 Dec 2024 14:22:33 -0800 (PST) Received: from denia.c.googlers.com (5.236.236.35.bc.googleusercontent.com. [35.236.236.5]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-467776034b0sm11232441cf.74.2024.12.10.14.22.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Dec 2024 14:22:32 -0800 (PST) From: Ricardo Ribalda Date: Tue, 10 Dec 2024 22:22:24 +0000 Subject: [PATCH 3/3] media: uvcvideo: Rollback non processed entities on error Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241210-uvc-data-backup-v1-3-77141e439cc3@chromium.org> References: <20241210-uvc-data-backup-v1-0-77141e439cc3@chromium.org> In-Reply-To: <20241210-uvc-data-backup-v1-0-77141e439cc3@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda , stable@kernel.org X-Mailer: b4 0.13.0 If we wail to commit an entity, we need to restore the UVC_CTRL_DATA_BACKUP for the other uncommitted entities. Otherwise the control cache and the device would be out of sync. Cc: stable@kernel.org Fixes: b4012002f3a3 ("[media] uvcvideo: Add support for control events") Reported-by: Hans de Goede Closes: https://lore.kernel.org/linux-media/fe845e04-9fde-46ee-9763-a6f0086= 7929a@redhat.com/ Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 9496ac970267..93c355b53101 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -1825,11 +1825,14 @@ static int uvc_ctrl_commit_entity(struct uvc_device= *dev, unsigned int processed_ctrls =3D 0; struct uvc_control *ctrl; unsigned int i; - int ret; + int ret =3D 0; =20 if (entity =3D=3D NULL) return 0; =20 + if (err_ctrl) + *err_ctrl =3D NULL; + for (i =3D 0; i < entity->ncontrols; ++i) { ctrl =3D &entity->controls[i]; if (!ctrl->initialized) @@ -1854,8 +1857,6 @@ static int uvc_ctrl_commit_entity(struct uvc_device *= dev, dev->intfnum, ctrl->info.selector, uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), ctrl->info.size); - else - ret =3D 0; =20 if (!ret) processed_ctrls++; @@ -1868,12 +1869,19 @@ static int uvc_ctrl_commit_entity(struct uvc_device= *dev, ctrl->dirty =3D 0; =20 if (ret < 0) { - if (err_ctrl) + if (err_ctrl && !*err_ctrl) *err_ctrl =3D ctrl; - return ret; + /* + * If we fail to set a control, we need to rollback + * the next ones. + */ + rollback =3D 1; } } =20 + if (ret) + return ret; + return processed_ctrls; } =20 @@ -1904,6 +1912,7 @@ int __uvc_ctrl_commit(struct uvc_fh *handle, int roll= back, struct uvc_video_chain *chain =3D handle->chain; struct uvc_control *err_ctrl; struct uvc_entity *entity; + int ret_out =3D 0; int ret =3D 0; =20 /* Find the control. */ @@ -1915,16 +1924,23 @@ int __uvc_ctrl_commit(struct uvc_fh *handle, int ro= llback, ctrls->error_idx =3D uvc_ctrl_find_ctrl_idx(entity, ctrls, err_ctrl); - goto done; + /* + * When we fail to commit an entity, we need to + * restore the UVC_CTRL_DATA_BACKUP for all the + * controls in the other entities, otherwise our cache + * and the hardware will be out of sync. + */ + rollback =3D 1; + + ret_out =3D ret; } else if (ret > 0 && !rollback) { uvc_ctrl_send_events(handle, entity, ctrls->controls, ctrls->count); } } =20 -done: mutex_unlock(&chain->ctrl_mutex); - return ret < 0 ? ret : 0; + return ret_out; } =20 int uvc_ctrl_get(struct uvc_video_chain *chain, --=20 2.47.0.338.g60cca15819-goog