From nobody Fri Jul 24 23:30:13 2026 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 AAFC2339379 for ; Wed, 22 Jul 2026 10:23:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715838; cv=none; b=o4AdredTtgprdMuymepy4RHSrDtr/iGsd0Mk9Zkc+fu2wCAJhSUgGbDUSf68xniNF4vH6OuaUkvSr0m1sOznLi4Mif5uDt5JjRjftEmu1adVjbbTANIMAUY6y/6huHZr9NWNv++rrYPYCyvWW/FJe7+a27DwZuPWczYYyFluOaE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715838; c=relaxed/simple; bh=H7Nca37WRkQauVBsrDNcHqeWLZsewmKW59qsuV9SkhM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=nO+2sDygmAlB8lt4I+3oTKOEYtjZtcWwNoHgnanfE2bQR4EpqiRLXuXBK6Lxs/2bXmXJ+mPRVlFZ3sBjDwViQNVIafsGxj0k1XEVRfpdFgt7xk0uj9lvq+6aDwQMa59g/qOogqGrkW1KChffeOQSrFf67qA4Ze3RQwQnN5g1FsI= 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=sumYmjsa; arc=none smtp.client-ip=209.85.218.54 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="sumYmjsa" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-c167aa9500dso997806366b.3 for ; Wed, 22 Jul 2026 03:23:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784715834; x=1785320634; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=toUhRicgKnyayDX2ZRlKZA5Y5hvlvcz+H/bR233rzCg=; b=sumYmjsaAwyW4yMnLGDOuUnxBaAVY/FOPtDGk5Elhe3AOOq9RQlKxwCS3HXw2zhS6A 0on3mqGnI5Akv3aRjdZtJhFxZHEVWqoDWXann2tF8wldZZmH4wXYOHlELp5YuU2Ooa0J PK2wAgPsaOZp9Um7mqWjWQ7tmBNRw17gqzvoHFCrUojtLiKzgmsDP28Nf8C1VW06u6j9 AEP6aGemiuESQOD06N1urtp6APZ9AayAvDylG7nNRngU4aZaMV+NR4gAt/c3kDvZ8URy 2NB6O1kxZ5L5x+MerBn5dTLqZN2ncQHNJgNfsRmq5QAxa7EkhM6A7DTJPFSJJPGfqa5l wnbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784715834; x=1785320634; h=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=toUhRicgKnyayDX2ZRlKZA5Y5hvlvcz+H/bR233rzCg=; b=eT9mNCjCXDb1vGRBMENSTWzCh8/bu3RBwF0CBND9EJoHJTIB2OrwM6jxUcD52nWrwj Vvxrw4vC91S2Tvh6HZMG/o5tjkEB13yQd5gL/wr7w1MyWHn5AEemIOLSUFbn6620930q PBMQU+M6v+yODe6XVWfx0Y36xhhXjShQi35wu3v15ppQ8s6BLps8nuqi5t5KkqycC9Us jPvgZ3O67BjsG+lA7E8fn7RjGgNYCZ52ZRW3mPrN483IzDHs6T4pI6EHiwyNzH2rByR1 9Jwq0mFn39Fd7JuFicnPWoTTuvAoVuEeO4hin3lzccrN6iPEY9ufZd5ER+UnlY37Zs8m Fc4w== X-Forwarded-Encrypted: i=1; AHgh+RpOG0UyEftY0a6C2IL9gVds84v9bYdLRFRDZi6pewg1kyOvW5RtGIThEKXHaMuhaR4Hxx+A9FB5tL2veo0=@vger.kernel.org X-Gm-Message-State: AOJu0YzcPGc7HkmoID672UKxowf/eeRD04ihP6dE7RUYO+bNJFheSMmL t7MWHGhYtI+8iChk3g+XRnOw+HV7NA8+AZ3Itd0fQUJmRVSVcTsyWZFxPefjiw== X-Gm-Gg: AR+sD12fEjrA8FXK8PmSYKObNTlCx5hUoWxtntIg0mPjONDNgf/HTK7AlJ03+VvYkpa V391xWczhGQKYsB2Ja7ZUd0KmXP7+lcdrIx12OrLYJNSK35Vdtu1HN2bfVqQU4KMBX71c8uF2mG c0gaBadbO1b1+mfw8NcuOp2ljcE/CN+W2eN+lYFjwRH0/hPAnBbcKCPUNos6DwoZw/Zh762BAiK kCiebx4lihVnI6HM0XSMCwzK8qtAu9mdR3a7rviNkAja5HRPx8tWrAgR99M+UX8QbwB5QA+CbHW QeUueo3LcQiQ4KjkDLNo0HBSQoeA3jW9pQqUrqgmYzkqV3sK3FkIBA98tNsNRIyrECy/ukTbNqO e5ou0HOC2DB39EFt1QDuY5g9lbMO5gsxnJEGhl9OUD/o7z4+VmcdGZCosCsc1AXf9scuepvKEbQ pxmf88SkYdCeTWrYXOVu8oBlUZzAkOkgIZSi3jF+Ku X-Received: by 2002:a17:907:e84a:b0:c16:e3b:7d6 with SMTP id a640c23a62f3a-c16b4807dfbmr929383566b.54.1784715834341; Wed, 22 Jul 2026 03:23:54 -0700 (PDT) Received: from localhost (c-85-228-45-68.bbcust.telenor.se. [85.228.45.68]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c1c32c8ea94sm82894266b.41.2026.07.22.03.23.53 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 22 Jul 2026 03:23:53 -0700 (PDT) From: Eli Billauer To: gregkh@linuxfoundation.org Cc: arnd@arndb.de, linux-kernel@vger.kernel.org, Eli Billauer Subject: [PATCH v2 1/7] char: xillybus: Improve control of execution flow with mutexes Date: Wed, 22 Jul 2026 12:23:01 +0200 Message-Id: <20260722102307.49090-2-eli.billauer@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260722102307.49090-1-eli.billauer@gmail.com> References: <20260722102307.49090-1-eli.billauer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This commit addresses two issues by using mutexes: (1) Add a mutex to protect the fifo_buf_order global variable. The purpose of this variable is avoid repeated failed calls to __get_free_pages() for allocating FIFO memory, when the chunk size was too big. However, if two drivers are initialized at the same time, fifo_init() may run in parallel, and fifo_buf_order may be reduced too much. This is a far-fetched scenario, now completely prevented by fifo_buf_order_mutex. (2) setup_channels() acquires process_in_mutex to prevent process_bulk_in() from accessing the xillyusb_dev struct. With correctly working hardware, process_bulk_in() is never called while setup_channels() runs, because the device has no reason to send data in that phase. The mutex ensures that process_bulk_in() does not touch the members that setup_channels() alters. There is no similar protection for data flow in the other direction, because during the setup process, the only outbound data is the BULK endpoint used for commands, and it remains untouched after its initial setup. Signed-off-by: Eli Billauer --- Notes: No change on v1->v2. drivers/char/xillybus/xillyusb.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/char/xillybus/xillyusb.c b/drivers/char/xillybus/xilly= usb.c index 34e7ad3bcab3..a28e6416cb01 100644 --- a/drivers/char/xillybus/xillyusb.c +++ b/drivers/char/xillybus/xillyusb.c @@ -50,6 +50,7 @@ MODULE_LICENSE("GPL v2"); static const char xillyname[] =3D "xillyusb"; =20 static unsigned int fifo_buf_order; +static DEFINE_MUTEX(fifo_buf_order_mutex); static struct workqueue_struct *wakeup_wq; =20 #define USB_VENDOR_ID_XILINX 0x03fd @@ -375,6 +376,8 @@ static int fifo_init(struct xillyfifo *fifo, =20 unsigned int log2_fifo_buf_size; =20 + guard(mutex)(&fifo_buf_order_mutex); + retry: log2_fifo_buf_size =3D fifo_buf_order + PAGE_SHIFT; =20 @@ -1943,6 +1946,9 @@ static int setup_channels(struct xillyusb_dev *xdev, struct xillyusb_channel *chan, *new_channels; int i; =20 + /* Don't let process_bulk_in() run while we change the channels */ + guard(mutex)(&xdev->process_in_mutex); + chan =3D kzalloc_objs(*chan, num_channels); if (!chan) return -ENOMEM; --=20 2.34.1 From nobody Fri Jul 24 23:30:13 2026 Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (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 7DE41339391 for ; Wed, 22 Jul 2026 10:23:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715839; cv=none; b=iDQzW2aeEogADyacRera+fzuttHaKOl+Awifxp45GC1Xld8ky/5RSnlDGqTTbLVg/+VIdh9CmFkeHcvMEX3OF1a7z/FyDZf7s3OGydzA9PVwAMGGsUqV4gKTvlZO+cIWGi+Q47f6EuFqRVUW4sWGZnxeJ5UP/pPtmX6i3t0jGIM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715839; c=relaxed/simple; bh=PjVQTQnquPIyhfa6NQOHnfbMIM85MAEZdQiapatx7IA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=B0x0u178CuCBgrie1fZmDv/jsCF7vI9XbqSOZN5OlEQeUkFif9oz9qlS9rPpsqMPx3NcG7ZnESZd6sLtK+pWMAOadbIXDA266SYJ8w8Xi7f/BAZzyudNbKjDLKwUgXei7WTM30vjpcoovLvfbujmvxMv8aMvXYKzTiz876PEBEE= 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=R4dlOFqO; arc=none smtp.client-ip=209.85.208.54 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="R4dlOFqO" Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-6983d3dae7aso8570475a12.0 for ; Wed, 22 Jul 2026 03:23:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784715837; x=1785320637; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=fDyQ43DZ4ayy3UKtGwQz8F5jc04Dh6m9pPwr+FNqfZ0=; b=R4dlOFqOO82Zqxk/mCKXGa7nM3IVveEUJ46ru67ugSs7QMcCWg4A0PU2pTpC7D0HFu lENNretbd2BytaWs+Bx+4mw318D2m+5fZs9y8W73XzI/dOP1xsHmIEOeiJcLZO1SC9j1 7497uB6kKWWY9ajHxkHdBYCEsxpWA4ij4iCb9kzw08u/PbC/cplPwtlXT8idIkQVxpBg kPS6H3X6lo+jGviP1bBIUEzZnSn+iyhtaarGi07i9q2fu7y/6uVbdD+hMS3OMiyUQbYP wrPXBwxi6pQxEdDBSPYTx/xAzJKZKeNjm2e8D4ocfFxL4fSAEeQWU9imSx56FMPXcyxO 0LeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784715837; x=1785320637; h=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=fDyQ43DZ4ayy3UKtGwQz8F5jc04Dh6m9pPwr+FNqfZ0=; b=OQ48Ay+RoMjtPwo7/S7ODFhAa11UXay9DPJREMgXiUZ69jZ2zrgMlA+/z7xKXk3ZEC kyDJnX7whrgKI33InT+cLIxA+39dqHuSKUZklvMnWGD/nCopZQtNKjpujXE7r9aoJdtB LX4pMVukketR0m2ZRVVYJGt29jETjrLmAUYm2Ppez9yK6QgQGx7+2QWI+sMcgkYbLstF nn3X9SBJ3KMwjJ2jYmqvhrh8JCeNwvthZ3oD5B6regOCLdp+VCJMS9qOQ8Qh2dm25+tm 5DQU38nv88O6BsadM8NP7RouhXrRe7N4uEN1Ej0MYxmLvrZj6oQuX6FM2ZEIEsA/9RXX z89g== X-Forwarded-Encrypted: i=1; AHgh+RpY9zYrbsPGik0YKHdkqBxYGkafpqWTRHczwo4eVqA6ZHygxIiFRYPuRQIWnj0mcajQufpfPy2S3SLSmF4=@vger.kernel.org X-Gm-Message-State: AOJu0YwWkDx+8wXBXNIPs4BZTLA0FEEsWv2RoD0xvYI7Ldqr3s3YLJ4Y aDvj0onlR3JaRcd2y1nlt+L0nGiwYPkweyk33DE7cFcy8kPy9dn6HYTR X-Gm-Gg: AR+sD126NJeTlrWqGtvefrs22FnjqrNFi2cBE5HKEDZaNaCtgbEdXHMjRGw8wLZGdwi 9yMpxQabY9y5tJe2gP6hfsnkSz6pqbCdkF6L8+6xmXZHv7R54v9MpsCr9R1yewOSswR5oQXtMcl b/TcwzBpPMvyOdOB+yX2InHgxKLcmeIbLMG/jBi0W1EnODrU0BoRsn08i3kR211ud6wju967OKG ZsKbijfP7HaE0cQYBezmPmtw5kofn6pAvfVjrx5ip3hynIe6oIoLq9ebOFPHDgBzIiJQExjdTNZ nhEtnFqzy9aYQWTjuIMYqpK+Josp1EuT3/IY3vb42tQnqaoyaMMmpf/hCQLCSwlo3fOgqaNJn0a Bcmz2MLwq9HwgDNwFXwVfEzyNTU/dhWRO9ewfCFl4YCxeUbKhAZOIqZCNnNCvi7Od9PtmHNxtZI X6Nww/MCQCfvMp/lQr3l0gLwL5JtQspA== X-Received: by 2002:a17:907:985:b0:c12:6280:33c9 with SMTP id a640c23a62f3a-c1c310059f5mr143556566b.28.1784715836648; Wed, 22 Jul 2026 03:23:56 -0700 (PDT) Received: from localhost (c-85-228-45-68.bbcust.telenor.se. [85.228.45.68]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c1c32f19c57sm82225666b.58.2026.07.22.03.23.55 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 22 Jul 2026 03:23:55 -0700 (PDT) From: Eli Billauer To: gregkh@linuxfoundation.org Cc: arnd@arndb.de, linux-kernel@vger.kernel.org, Eli Billauer Subject: [PATCH v2 2/7] char: xillybus: Remove duplicate error path code Date: Wed, 22 Jul 2026 12:23:02 +0200 Message-Id: <20260722102307.49090-3-eli.billauer@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260722102307.49090-1-eli.billauer@gmail.com> References: <20260722102307.49090-1-eli.billauer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" No need for dedicated code for the error path. The removed dedicated error path code differs only in when the mutex is released, and that makes no difference in this context. Signed-off-by: Eli Billauer --- Notes: No change on v1->v2. drivers/char/xillybus/xillyusb.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/drivers/char/xillybus/xillyusb.c b/drivers/char/xillybus/xilly= usb.c index a28e6416cb01..ab5f9159aa17 100644 --- a/drivers/char/xillybus/xillyusb.c +++ b/drivers/char/xillybus/xillyusb.c @@ -1419,16 +1419,12 @@ static int xillyusb_open(struct inode *inode, struc= t file *filp) if (filp->f_mode & FMODE_WRITE) chan->open_for_write =3D 0; =20 +unmutex_fail: mutex_unlock(&chan->lock); =20 kref_put(&xdev->kref, cleanup_dev); =20 return rc; - -unmutex_fail: - kref_put(&xdev->kref, cleanup_dev); - mutex_unlock(&chan->lock); - return rc; } =20 static ssize_t xillyusb_read(struct file *filp, char __user *userbuf, --=20 2.34.1 From nobody Fri Jul 24 23:30:13 2026 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (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 5FE6B4C77A5 for ; Wed, 22 Jul 2026 10:24:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715841; cv=none; b=o4eoBUzaV2Xzzxwkv8KE/5caRL5qfzhJvs1R3Ih2Ww9zJmnxgXJyAKYr2LNS7Pa3UgbIEtukM6RPuyhLoOrBXnOlvBPQTQGtvjBlWXZlxCGMigFs5Tgozk4p6TV+97kspqST22GUeJJ0Gzxa68+CJ5MGbAsWWyo12hKyj3aWo8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715841; c=relaxed/simple; bh=R9x84WLfy9N3m82gL3BIzsT4teMe51dzCzda44DTspc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=WSxxNeo0I65LmiuWl9IP/Vb8oZnxZvZnZg10WGYaSQRCwQRsqL6f9vPnGAtkNp52ztvYuydPapILyBRmXQss8o5CfTnYWnq1MX/VvUmK9Wn7Tfwm6BU2AMaZzLIJxaCbkb+ZA6ybEq1gWFcPyn+Uy1t+J1hfNxl3KnUhLFfZiYA= 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=p4Sk4A3/; arc=none smtp.client-ip=209.85.218.53 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="p4Sk4A3/" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-c15b33f7b23so1794838566b.3 for ; Wed, 22 Jul 2026 03:24:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784715839; x=1785320639; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=Npyeg4mA7fQmbHsvxRYXXpRAdqgboF4U7hMMrZcw+wI=; b=p4Sk4A3/PYq5zy3UDV3QE5WbpV6Gd+EGp0I9tWPiVNA4TaJ3U8jKIkH13qhv4gOSm6 Xe4vPQii7mi8jNRzXT4QeeCt5aGGhPFq/RYqvI3z8Ubo/VP+SfbxTJopCg8+4doMFwcj GwDakMA15vUNSvLCMI7hsKWodj+9M4es26mgQ2w7LQ2BWKepx1MqznKCCGmLs5ZSGV6Q 5lX+vMxEC5daFFeFFE8OFfVzZifQtwdcI3gG5ACIPkwBqX59Uknd9edEck3mh8mVWoje C0P9lD1uGJDscLG7gns3TD3MrvLbSR6VGh4oPNF41uGNwaGY6NsrYAatS2zQpZXb6oAJ 8dHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784715839; x=1785320639; h=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=Npyeg4mA7fQmbHsvxRYXXpRAdqgboF4U7hMMrZcw+wI=; b=PTVt3IRTq6CCq1K9u9W0jA4OkXgrkoc47Sov+2RECH+jeWABnSia6IQ53clz4/DJCk 8YLPTJUhF7N102SMp+z71NoQ5tMYr970xnso/HsCMVqnpQc2td9GcIJcMesfIBdHb1gU /lI0Cr8I2rvWjLDmxU7hBs4gHtT/qMSKiLRPCYHYug+/gkSN8ezYUyKzJyzrMJY8KH+0 JRmCZRnuAOPbpo+kBdvbrsLpsVTWKoY89E9Q3av3cCTdBu6JgW+zL1ZDM1nnRE9K31fL n+WN9dCHI0DyNgGSGprwzpzLfTW8qRmoO2mo4ohf7rCECg4e7Zmp3H9RNU/fdTFX24p4 uQCA== X-Forwarded-Encrypted: i=1; AHgh+Rou1/INkz3ksn4LWv/CqeTOfD9bN5iheQy8U3qr51sMe6azuV4ezXq7NSNuRo556delgJhHCS3RjflHHrg=@vger.kernel.org X-Gm-Message-State: AOJu0YwSwNQU6m0EO89qvTGWzuWwO//d+Dms/PBJd/ad6LfwZDNWqKvd Wcvu4Yy0+hnZj8QP76lTkIDsr5pgIWO/R8B4/dBb8ai2rRWk6U4j2z3nDHO2Aw== X-Gm-Gg: AR+sD11cAciyCY6TVWSCpdLHxha1yeHPVT9V6RHpC/OSL9LVYNZ3IQVu/5PiiUZQWPw r1Oako0H87H5G27uk424WcDYM0UU1IkTB7gpSfK0HLFSsyi6C97Cd+CUe8OoyqFaA5JiM2xgksK 3E7pqAHlMm2Z/7dhFSHAjCkMlThZjOvcnDyTX3dBxAw3FRV5yaxT9YRKmo6jWkVnTBRUIKZohQK /Ut5UMWAtbgWIl53FKEknpjy0I/hOljzs6cfKM+SQQDtWQWs0XXEmdCDCw62g4fRLzm7JanZf7I 7ZRga0uR484yzouho6dlu8Kv9IgW3LLQpmwzQArKPcqIM5DvYivWN3xEFigELzBzz74kxRE3OY0 3AeYZjf+YydvPtaauXI8v2lEm+UUqoRuYT9wemdJUL/9PIz9Zwn8wjSSTFP0fdiMT7u+nWYM9tR j5M8wNy4PdcBMgyCJMQm/hc97zzMLy/g== X-Received: by 2002:a17:907:980a:b0:c16:2f5d:6153 with SMTP id a640c23a62f3a-c16b46d2c3dmr967776766b.20.1784715838584; Wed, 22 Jul 2026 03:23:58 -0700 (PDT) Received: from localhost (c-85-228-45-68.bbcust.telenor.se. [85.228.45.68]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c1c32c9030dsm83825266b.36.2026.07.22.03.23.57 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 22 Jul 2026 03:23:57 -0700 (PDT) From: Eli Billauer To: gregkh@linuxfoundation.org Cc: arnd@arndb.de, linux-kernel@vger.kernel.org, Eli Billauer Subject: [PATCH v2 3/7] char: xillybus: Avoid possible bandwidth inefficiency Date: Wed, 22 Jul 2026 12:23:03 +0200 Message-Id: <20260722102307.49090-4-eli.billauer@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260722102307.49090-1-eli.billauer@gmail.com> References: <20260722102307.49090-1-eli.billauer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The host flow controls the payload data flow from the FPGA by sending OPCODE_SET_CHECKPOINT messages. Fix the condition for sending such a message, to correctly handle the case where leap < 0. The previous expression leap > (fifo->size >> 3) was not intended to evaluate true when leap is negative. However, due to C's integer promotion rules, leap (of s32 type) is promoted to unsigned int when compared with the unsigned fifo->size >> 3 expression. As a result, negative leap values are interpreted as large positive numbers, causing the condition to evaluate true unintentionally. Consequently, the device receives correctly formed checkpoint messages that encourage it to send data, but too frequently. This may cause the device to send short data chunks, wasting USB bandwidth. Signed-off-by: Eli Billauer --- Notes: No change on v1->v2. drivers/char/xillybus/xillyusb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/char/xillybus/xillyusb.c b/drivers/char/xillybus/xilly= usb.c index ab5f9159aa17..7d2434c02fa7 100644 --- a/drivers/char/xillybus/xillyusb.c +++ b/drivers/char/xillybus/xillyusb.c @@ -1507,8 +1507,8 @@ static ssize_t xillyusb_read(struct file *filp, char = __user *userbuf, */ =20 if (chan->read_data_ok && - (leap > (fifo->size >> 3) || - (checkpoint_for_complete && leap > 0))) { + (leap > 0 && (leap > (fifo->size >> 3) || + checkpoint_for_complete))) { chan->in_current_checkpoint =3D checkpoint; rc =3D xillyusb_send_opcode(xdev, chan_num, OPCODE_SET_CHECKPOINT, --=20 2.34.1 From nobody Fri Jul 24 23:30:13 2026 Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) (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 A902C4C9009 for ; Wed, 22 Jul 2026 10:24:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715844; cv=none; b=ZSnEbi8c9QiXcAqqgWos3Ess8546CUjv0t9iMCbdH0bUzNbdxvspMSxzVW1SoPQmEfZQVIlLc9RYwWqc4dJrgBWwgkn3XOc+IDEphzodXquq5sOQ/soy/Eh8bL8vsh33M821iFpNETreBdd/s9/x/Vb6rpoTTXhV5umNlR0vO7w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715844; c=relaxed/simple; bh=Ptxom8yk4fASx77MPZiuRpsTqYpzV5pGr1a0xQNneJo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=cOe+9lE0zBbVxSeognjSD/qqtvrkAYswPp8x52GiZVOK81ZfCi5dnOlqckXyJwmgPhyqxd/MZIx+UAbwLYwvlbJgpugIGf1JCVnkdY9IVtbzU6NQft1/+C4KZnr8/tNVhnX71Ay/mWY/X8q1i4Z0sclpDAbhK1htDb/P+DD1N/0= 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=RWOKvmvk; arc=none smtp.client-ip=209.85.208.53 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="RWOKvmvk" Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-699fbcd23ccso18055420a12.1 for ; Wed, 22 Jul 2026 03:24:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784715841; x=1785320641; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=pZpUKijcNxUS+SVWi3is1Z3jVhvqi+q/3wghy2nKPr0=; b=RWOKvmvk97iTX2I86Qe2YbtT//Q4zZKCs3XV45Nsi+qyfW2G/DkXI/jWeiAA+3KVUJ QeSXa5kZxpCIS8tUdeF3hExYBknls/W9kPF6YF+/9YLBBsT3cvaao2u6nt0zeTnAzr/S Lam7uClJDna/leG+Fx+3cobi2fCTsqFK4EHPM12UTV5YQlK+UOvobLD7DpnQhBx9puuV 1w8ZGpJkzcCyi+0bXsMDuoZQbOP+dqDQM9akJGbzJaiEQyr0agvMz7IRFR90n9gqRy0e 8f1qHPTcdjZzq3VLfKLw99q21fRXhZ2eEynllDHD2bHbhE67/sM2R2GlnKQY1WbvQZz4 uQeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784715841; x=1785320641; h=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=pZpUKijcNxUS+SVWi3is1Z3jVhvqi+q/3wghy2nKPr0=; b=MMr7K9eGhryAWAR9XFlHuQhoGrGxwM8Gmu/e8uws5wvBnnsvGrSTl3a1ZA2J3EN5wF J8lI9j8bujdVRU3okoFwhm6QvKbKpp4B7ihRfkElAV6xyPp30uQkyAcJAPa/3PIp7bck 0AkQAATRO6zhpmgc1UhsSRkuQNWJA/N7COVVs9hBGelg5DNWfHjy9XVeNkAWU7hgbApY A+CoEiUmgllpjCjOpS7wMQlluWkSQh1AUNgaufAYI5PwZ3TTo7n2/oHqix8enV4CqIyf lJBslCXQRbKCWi0zNxf9jnICNhqU2s3+N/hyd/CRouSoPbqZPwsG1oFlu4L3rFCMuEwt gPPw== X-Forwarded-Encrypted: i=1; AHgh+Rq24Hlyrpk+AAb1yw5R6O69opaVi5f8G0IATwecavVhW2MsvTo+PR2Zdn9an4NF2VlTZz2jfd468476cps=@vger.kernel.org X-Gm-Message-State: AOJu0Yyaq0bqCMk7FK96WQsDBJx2ZDPmy7th2t9zusFK5H0uV8qId7X9 OAx3SQx73UrWIuJ+a9GxwVHgrnIuaCXWchdp79LdAeITmcSBFKIl/4H8vgelHA== X-Gm-Gg: AR+sD12vT2pZ+nojgvo0lncCacScvMdScr4DpBCTK5Ay/ME0OS5T+d6jD1qGYkWJK3B Ui6m5gGBK3XwtnqJ+bMHNWOATJ2X4pu3pUauzJMLY9oSql0mwvdeYXsdkEdUGjQVweH3Hd7liXR mgFC0ll5QMugv3xon4OidPps0bQ1hK+vaquNf0UFoyqLA/tc24Gp45Oyt6zcifjtBuLMvbdgW9x L7LgyvjxtcsbQIJ7sm/tlqdjwhjpc2I23Vxocfqbd0TfPR0KtjgQL4c3GBse6jtHjrKjhHTCDIx YlQ+muJLpJ01Wux6GJDHnHmeyoB/ci5tBRcsguZsYPIYQZHpNaqoXOO6k/EepUELlM2uS5ZM+6g NAU9XhNJYrTofU7SfVzc2Iz8j5ZTqjZqRKrPe/hHLuWiSv/B/Ip1egFvt0HLfSHpKP38R7txK0A dSPFV9yRUB06JQPfWwvbAO8sjgI3b7cQ== X-Received: by 2002:a05:6402:5055:b0:698:4291:b85c with SMTP id 4fb4d7f45d1cf-69e65257a59mr7126187a12.8.1784715840825; Wed, 22 Jul 2026 03:24:00 -0700 (PDT) Received: from localhost (c-85-228-45-68.bbcust.telenor.se. [85.228.45.68]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-69f350365desm758729a12.26.2026.07.22.03.23.59 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 22 Jul 2026 03:24:00 -0700 (PDT) From: Eli Billauer To: gregkh@linuxfoundation.org Cc: arnd@arndb.de, linux-kernel@vger.kernel.org, Eli Billauer Subject: [PATCH v2 4/7] char: xillybus: Use unsigned arithmetic for jiffies differences Date: Wed, 22 Jul 2026 12:23:04 +0200 Message-Id: <20260722102307.49090-5-eli.billauer@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260722102307.49090-1-eli.billauer@gmail.com> References: <20260722102307.49090-1-eli.billauer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Change the type of jiffies-related deadline variables from long to unsigned long, and remove unnecessary casts when computing time remaining as deadline - jiffies. No functional change is expected: although signed overflow is undefined in the C standard, processors perform the calculation correctly in practice. Using unsigned arithmetic is nevertheless the proper way to handle jiffies differences. Signed-off-by: Eli Billauer --- Notes: No change on v1->v2. drivers/char/xillybus/xillybus_core.c | 5 +++-- drivers/char/xillybus/xillyusb.c | 17 ++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/drivers/char/xillybus/xillybus_core.c b/drivers/char/xillybus/= xillybus_core.c index 952ef149aba1..7acebc1e6050 100644 --- a/drivers/char/xillybus/xillybus_core.c +++ b/drivers/char/xillybus/xillybus_core.c @@ -694,7 +694,8 @@ static ssize_t xillybus_read(struct file *filp, char __= user *userbuf, unsigned long flags; int bytes_done =3D 0; int no_time_left =3D 0; - long deadline, left_to_sleep; + unsigned long deadline; + long left_to_sleep; struct xilly_channel *channel =3D filp->private_data; =20 int empty, reached_eof, exhausted, ready; @@ -938,7 +939,7 @@ static ssize_t xillybus_read(struct file *filp, char __= user *userbuf, return -EINTR; } =20 - left_to_sleep =3D deadline - ((long) jiffies); + left_to_sleep =3D deadline - jiffies; =20 /* * If our time is out, skip the waiting. We may miss wr_sleepy diff --git a/drivers/char/xillybus/xillyusb.c b/drivers/char/xillybus/xilly= usb.c index 7d2434c02fa7..aa08206a18ef 100644 --- a/drivers/char/xillybus/xillyusb.c +++ b/drivers/char/xillybus/xillyusb.c @@ -1127,12 +1127,13 @@ static int xillyusb_send_opcode(struct xillyusb_dev= *xdev, */ =20 static int flush_downstream(struct xillyusb_channel *chan, - long timeout, + unsigned long timeout, bool interruptible) { struct xillyusb_dev *xdev =3D chan->xdev; int chan_num =3D chan->chan_idx << 1; - long deadline, left_to_sleep; + unsigned long deadline; + long left_to_sleep; int rc; =20 if (chan->flushed) @@ -1141,7 +1142,8 @@ static int flush_downstream(struct xillyusb_channel *= chan, deadline =3D jiffies + 1 + timeout; =20 if (chan->flushing) { - long cancel_deadline =3D jiffies + 1 + XILLY_RESPONSE_TIMEOUT; + unsigned long cancel_deadline =3D + jiffies + 1 + XILLY_RESPONSE_TIMEOUT; =20 chan->canceled =3D 0; rc =3D xillyusb_send_opcode(xdev, chan_num, @@ -1152,7 +1154,7 @@ static int flush_downstream(struct xillyusb_channel *= chan, =20 /* Ignoring interrupts. Cancellation must be handled */ while (!chan->canceled) { - left_to_sleep =3D cancel_deadline - ((long)jiffies); + left_to_sleep =3D cancel_deadline - jiffies; =20 if (left_to_sleep <=3D 0) { report_io_error(xdev, -EIO); @@ -1202,7 +1204,7 @@ static int flush_downstream(struct xillyusb_channel *= chan, } =20 while (chan->flushing) { - left_to_sleep =3D deadline - ((long)jiffies); + left_to_sleep =3D deadline - jiffies; =20 if (left_to_sleep <=3D 0) return -ETIMEDOUT; @@ -1435,7 +1437,8 @@ static ssize_t xillyusb_read(struct file *filp, char = __user *userbuf, struct xillyfifo *fifo =3D chan->in_fifo; int chan_num =3D (chan->chan_idx << 1) | 1; =20 - long deadline, left_to_sleep; + unsigned long deadline; + long left_to_sleep; int bytes_done =3D 0; bool sent_set_push =3D false; int rc; @@ -1464,7 +1467,7 @@ static ssize_t xillyusb_read(struct file *filp, char = __user *userbuf, bytes_done +=3D rc; chan->in_consumed_bytes +=3D rc; =20 - left_to_sleep =3D deadline - ((long)jiffies); + left_to_sleep =3D deadline - jiffies; =20 /* * Some 32-bit arithmetic that may wrap. Note that --=20 2.34.1 From nobody Fri Jul 24 23:30:13 2026 Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) (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 43DBC4C8FEF for ; Wed, 22 Jul 2026 10:24:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715845; cv=none; b=jyhD9fzvmURc5BAj6dS4xBRJ/lEeGZQ2K51aWWPEhTAl9Wx27oI3QmRako61Qb/WbKPlma2t0o5ChOTyyTrMaQEUVfE6/8bXpL+WZduQFUFVdUjqlONwAZUH054a+MrVf2odVFne0Bp82K5vaIzHmTdMthKzf+sKPI0TA8AX9rc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715845; c=relaxed/simple; bh=xcSwUOWwbHN68RSMdIrAWHC+mmFpQlBkZfYm1XY0SRE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=VuuGQSTcTtWltEtC+s+Ifecd/AvCFfV4+kK2z1Cq+PfrHz/8fbUzLuxXfxNbx89N0KF/Uc2Gy4IXY1ucqtX8gCVmIzhuAa6Qc8ZlcPjfH1zB8aG7sumZ4xf8Pw7cAeiOgRB0FWzew05KadWSfn6WAzk1GMEU7kuWDva2nu5NXr4= 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=ftEFiz1Y; arc=none smtp.client-ip=209.85.208.44 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="ftEFiz1Y" Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-698ae09e356so16905982a12.2 for ; Wed, 22 Jul 2026 03:24:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784715842; x=1785320642; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=n+preuA+nMVyBQobrPRWiLJ/mQb+BZ/kyfSM4bj8ukI=; b=ftEFiz1YTpe7kPygeLyj+2vE73LfoltknG2ANDL9PUGYB0a+METk5jP2u5BiH17AC4 kaSR5wzUgogi7ZHNQHpw7DMUTy7A/MIKf6vWQsqvBYNac7fBJl7pBQPuX9I/Ck9KnTPG EbtTcIUunL2cJv0RzpVKtpwLLKOZS0AGI/q16axXP5OtpWAq9WYBSLGIuBzCG/1x/Mtj JEV2P24OI5h0++MgtCu+1CeJsNZvBqSRsmuzJUoCFaQgs0OWst9wmzFyMW5qzVveI077 tUbCgKVW9BtK4sCyyDvBZnjNk45fKpybFPk8kQ1rl2bH1J0zP0kPk5MauVqUtmU4oL0u JfAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784715842; x=1785320642; h=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=n+preuA+nMVyBQobrPRWiLJ/mQb+BZ/kyfSM4bj8ukI=; b=RKFaUtDZPQYSlXxd7l+KaSv6xP/aV4SjDf+q3OYaj8RcvMOaULe2KhnWHu/P/XEsgp cXBxlJwmW2ppbcRBtRFZEgoQNAnos0StXLW1BBFhUXBs5rxC3kEfWxld81AEUKr166s8 a3UgutxJv2U5OUibuNCN/GVYbY58swD/xbU453rGbgp2CUmkQNnWLi4WRFZinyzH4IVB TsNyTE77Q2IwbwAeLqrIy13RO6RNLxZ+QFONeHmaoNB+C5jYUV2HXlXitkPxYWH27P1u M6x5MNKYmflVDqSORQHjog3Pm6OPaqfcVLVwSeRBlm075cLJe8JtGLGFxB4awkRxSdu4 fs6g== X-Forwarded-Encrypted: i=1; AHgh+RoX0QhW/yYuvOBZRP6k5LJDO2E++SfbRukZVoKZL29b+pco0FVPrnucbBIYipAEA8w+PJJDqGeXFMU2ByQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yw1AI3KKdC9fZWXw1s1U28EV3DkqI43cnewBqubHZxBoWeNNDra 42VxdMZ8yod3Ce7me6wXWH2sUFvXgd6qhdW2SAMSSM/UnHDyuC0CVcH2 X-Gm-Gg: AR+sD11iW7ZQJwSN0pI23RINn8HTx2ncNaRQhD8WzCEURG2ep30FIGF1iFQIYAvllLm Rua2H4Bbt/zNxcVdw1l2ZQalgMZtwfmIz938KDIXz4vm+dhR1JzWH7ymQnGvS9NO9AcYPaI5Puj xsUwEBAhoqck1h9d6juNrlXQEiIbgC5o+82rT0a93cG3f4oZJgBQn/qBKHPs4X9H7O8RS1iWzeK SStVbqPOMpfx0kNaR3HUVLbpiN6pnHLj/gdbtoxLA62hEM/l7bluQl3KVCaiEmMbiGy03Ibfyrd 5Zeae62E5GmW+14g8ivR9YcmflrqQBZg9gaYGk6Q/w+yZxFlcTCpqAhe2zQZECcJfk0iH4YN5DG U0FRWdI+UUgO55xWaMvnVtQP0x9cJmOpvC2OrwQx9fDVxl9+PJRg5olNQWTPu+tqgjPG3Cw1xOo Ugh+0ZqHNyNiy/L0d8G5cQarlCBBYrqg== X-Received: by 2002:a17:907:a0d6:b0:c1c:2218:f316 with SMTP id a640c23a62f3a-c1c22190b90mr274000366b.59.1784715842361; Wed, 22 Jul 2026 03:24:02 -0700 (PDT) Received: from localhost (c-85-228-45-68.bbcust.telenor.se. [85.228.45.68]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c1c32ac6ff3sm83628366b.19.2026.07.22.03.24.01 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 22 Jul 2026 03:24:01 -0700 (PDT) From: Eli Billauer To: gregkh@linuxfoundation.org Cc: arnd@arndb.de, linux-kernel@vger.kernel.org, Eli Billauer Subject: [PATCH v2 5/7] char: xillybus: Integer arithmetic improvements Date: Wed, 22 Jul 2026 12:23:05 +0200 Message-Id: <20260722102307.49090-6-eli.billauer@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260722102307.49090-1-eli.billauer@gmail.com> References: <20260722102307.49090-1-eli.billauer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Choose unsigned integers instead of signed where natural, and also ensure overflow wraps as expected. Simplify an arithmetic expression too. No functional change is expected, as the relevant variables normally never reach values where this transition matters. Signed-off-by: Eli Billauer --- Notes: No change on v1->v2. drivers/char/xillybus/xillybus_core.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/char/xillybus/xillybus_core.c b/drivers/char/xillybus/= xillybus_core.c index 7acebc1e6050..b264578b2572 100644 --- a/drivers/char/xillybus/xillybus_core.c +++ b/drivers/char/xillybus/xillybus_core.c @@ -343,7 +343,8 @@ static int xilly_map_single(struct xilly_endpoint *ep, static int xilly_get_dma_buffers(struct xilly_endpoint *ep, struct xilly_alloc_state *s, struct xilly_buffer **buffers, - int bufnum, int bytebufsize) + unsigned int bufnum, + unsigned int bytebufsize) { int i, rc; dma_addr_t dma_addr; @@ -431,8 +432,8 @@ static int xilly_setupchannels(struct xilly_endpoint *e= p, struct device *dev =3D ep->dev; int i, entry, rc; struct xilly_channel *channel; - int channelnum, bufnum, bufsize, format, is_writebuf; - int bytebufsize; + unsigned int channelnum, bufnum, bufsize, format, is_writebuf; + unsigned int bytebufsize; int synchronous, allowpartial, exclusive_open, seekable; int supports_nonempty; int msg_buf_done =3D 0; @@ -531,8 +532,7 @@ static int xilly_setupchannels(struct xilly_endpoint *e= p, channel->log2_element_size =3D ((format > 2) ? 2 : format); =20 - bytebufsize =3D bufsize * - (1 << channel->log2_element_size); + bytebufsize =3D bufsize << channel->log2_element_size; =20 buffers =3D devm_kcalloc(dev, bufnum, sizeof(struct xilly_buffer *), @@ -589,7 +589,7 @@ static int xilly_setupchannels(struct xilly_endpoint *e= p, static int xilly_scan_idt(struct xilly_endpoint *endpoint, struct xilly_idt_handle *idt_handle) { - int count =3D 0; + unsigned int count =3D 0; unsigned char *idt =3D endpoint->channels[1]->wr_buffers[0]->addr; unsigned char *end_of_idt =3D idt + endpoint->idtlen - 4; unsigned char *scan; --=20 2.34.1 From nobody Fri Jul 24 23:30:13 2026 Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) (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 AC5104CA272 for ; Wed, 22 Jul 2026 10:24:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715848; cv=none; b=rvT0/0ZH7lY7Knwk+GtqzVC6meaFkpk+NmYuaxZMz7Nsx/Uc4eoU2P7GpFYx1/nmYZ5DPwBGM2rBD9MO4IXzfoAU7ZajSIoOwoXe+jrbxjCxKbw8ZtDBI7juBqbbK31lVBWFuoXPtpDyFMuvgtR1ZvGUA0qZfM38IkFehSoIWBY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715848; c=relaxed/simple; bh=li4LMy4fI9aAOXByzZ2JruckNk0fArqYLjUvKcx6veE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=lVI4HE2hqzFH/1rLM8ssDXmuasfTHqwEKPALVxJMOs7CWagagBxexjCZbHqwFvpZeUnc4R33daoXLVB5Zx0ykNC6yOCC7gl0ryt33qjGEGQ4Og9QBsi5E5AEcrM2V7zUuMoLyx+VrIIUuaOuST/eVIkryIxwsjvVmhK6XmG44bg= 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=lueSJmHp; arc=none smtp.client-ip=209.85.208.47 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="lueSJmHp" Received: by mail-ed1-f47.google.com with SMTP id 4fb4d7f45d1cf-698e5859a3cso12120361a12.0 for ; Wed, 22 Jul 2026 03:24:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784715845; x=1785320645; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=KlLsbsypXFRE7XDmvQcCRQA6vq9FCB9SGajwxDUCP8o=; b=lueSJmHpbXzbisQwX5ZTg+dmHiMURdYcr+d9FD8n1txBPGTuCa8tio3s/gfZ/cbIOk wyVg8YWtc0ncbw5upjEy31VMpWCaXoD1DxBDDWhqKKVvxulBKUmEQXWQT+iRHSEEkNKu Iu1D8H21DwMWmf0PJJmiSReCel5UIc0So+ooPhRZ8lqwe6UpKMF4lSDwnJlhmI3v31am hItgDMJIa1uoaYPnPglw0/MVZ1fAbBiAsKPJr+HFWf5TTgYOfH3+2CwZqQ8VgmWJVjbO +L4X+PN0woGUGkqPUHSHUKaDSD4DeaetWRx5h/VSdKiXEUvgve+VWNO/YzSqFF0Q3591 S0Rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784715845; x=1785320645; h=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=KlLsbsypXFRE7XDmvQcCRQA6vq9FCB9SGajwxDUCP8o=; b=khLhj4L9JRjVkVPzyA10Cm8b9D1yn8Y0ORCv4VUSWo97kpv13YkgUHO4lS3jVwfojz zyd/8M4yw1TKg5O2hZLRxYLfnr6KXKFg1oOrwW5DQ31Pzl5EZNrsmvotDHS7kAQfTlBt Fyxg+05CeZWepnkiTh5YF48xdwf/NR/VROqg/+QKX63WqYCTu3kNxx9Tv875slUBtSHA 1zkMKW7zO8UyetsEsGThb+ELFrenXdlrVyrhjH9/nGug7BMQYWmzvv+3rwPpRKAoTiGf mBa4LIUZn6T03EhIefncotNXZkTwfdyoAEm6rqZYE2bJMizkw9awABoAhf8W3N5ns0Ml 7LRw== X-Forwarded-Encrypted: i=1; AHgh+RrzGluPVhZnJ6dS/OZJwPuuMRBcvExoNnjgVrF5vpkju/acK9Gtd6SLDa1716EsyhOhpHuA89PhYC5Anmo=@vger.kernel.org X-Gm-Message-State: AOJu0YwTqClB8qbpvebAN7np/W7WTKuBSHtMxu3jjEWAAlCKLqshjPao fQ3TOd6uMTP77wx+8/CdF7MuEhdzSsRqJ8YSUNjiu0BfmKWCxRdd4Os/96bFmw== X-Gm-Gg: AR+sD10veD9uFqDC+eDSQWaG9/Lsx/5Dsu8toSNoF+gijG64sbN6FpRxJYsA36sWibF /hwAgUjvN7ZC4icvIbRFvPrrFBIwu2zdfGLwv2uihZ3fSLNgQo2PetveFqdWjZVnLnct55+lW9L +sBxZjsq5UV8fMOcPBUfV3lFK75nBEdKG3KRoqmobqHfkthdhh+o3I40QDhasiZKhDQbAFHy2Mr lJr1c+npoTrkWGp7ovfx20DQD9md4ILwmH/S1+BiTzwglf0+j5XFDpsP06d0HPlZ0lLj9BrHgEu xNl49VAbIzsecVA2bni1UaBt47sVmdtMjRqgG0K/o5ADepYWdpH7pyQ88u+VKMpahLrpygx7kKt 766hKklK9IE6lUPqnFVZmMhLr7MGyNQD6AA9Hdy0qgPS6hfiPOD513WlBNIyzV1n6QMsX1mGGKY 3z0bnWObyhGr1Iw/gobqxxgCj+29Zduw== X-Received: by 2002:aa7:d314:0:b0:698:bebf:3826 with SMTP id 4fb4d7f45d1cf-69f34e03461mr976788a12.15.1784715844797; Wed, 22 Jul 2026 03:24:04 -0700 (PDT) Received: from localhost (c-85-228-45-68.bbcust.telenor.se. [85.228.45.68]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-69f35026b10sm760091a12.25.2026.07.22.03.24.03 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 22 Jul 2026 03:24:04 -0700 (PDT) From: Eli Billauer To: gregkh@linuxfoundation.org Cc: arnd@arndb.de, linux-kernel@vger.kernel.org, Eli Billauer Subject: [PATCH v2 6/7] char: xillybus: Add defensive sanity checks Date: Wed, 22 Jul 2026 12:23:06 +0200 Message-Id: <20260722102307.49090-7-eli.billauer@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260722102307.49090-1-eli.billauer@gmail.com> References: <20260722102307.49090-1-eli.billauer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add validation checks for values derived from hardware or user input to prevent incorrect behavior with malformed data. Signed-off-by: Eli Billauer --- Notes: Changes v1->v2: -- xillybus_class.c: Assign @rc a value before goto in xillybus_init_chrdev(). -- xillybus_class.c: Improve check on @inode in xillybus_find_inode(). -- xillybus_of.c: Remove redundant dev_err(), as platform_get_irq() outputs an error message if necessary. drivers/char/xillybus/xillybus_class.c | 18 +++++++++++-- drivers/char/xillybus/xillybus_class.h | 4 +++ drivers/char/xillybus/xillybus_core.c | 37 ++++++++++++++++++++++++-- drivers/char/xillybus/xillybus_of.c | 3 +++ drivers/char/xillybus/xillyusb.c | 29 +++++++++++++++++++- 5 files changed, 86 insertions(+), 5 deletions(-) diff --git a/drivers/char/xillybus/xillybus_class.c b/drivers/char/xillybus= /xillybus_class.c index 5e8f03b77064..f7e0da233e2a 100644 --- a/drivers/char/xillybus/xillybus_class.c +++ b/drivers/char/xillybus/xillybus_class.c @@ -57,6 +57,9 @@ int xillybus_init_chrdev(struct device *dev, size_t namelen; struct xilly_unit *unit, *u; =20 + if (num_nodes <=3D 0 || num_nodes > XILLYBUS_MAX_NODES || !idt || !prefix= || !dev) + return -ENODEV; + unit =3D kzalloc_obj(*unit); =20 if (!unit) @@ -68,6 +71,12 @@ int xillybus_init_chrdev(struct device *dev, snprintf(unit->name, UNITNAMELEN, "%s", prefix); =20 for (i =3D 0; enumerate; i++) { + if (i > 99) { + dev_err(dev, "Failed to obtain unique unit name\n"); + rc =3D -ENODEV; + goto fail_obtain; + } + snprintf(unit->name, UNITNAMELEN, "%s_%02d", prefix, i); =20 @@ -215,10 +224,15 @@ EXPORT_SYMBOL(xillybus_cleanup_chrdev); int xillybus_find_inode(struct inode *inode, void **private_data, int *index) { - int minor =3D iminor(inode); - int major =3D imajor(inode); + int minor, major; struct xilly_unit *unit =3D NULL, *iter; =20 + if (!inode || !private_data || !index) + return -ENODEV; + + minor =3D iminor(inode); + major =3D imajor(inode); + mutex_lock(&unit_mutex); =20 list_for_each_entry(iter, &unit_list, list_entry) diff --git a/drivers/char/xillybus/xillybus_class.h b/drivers/char/xillybus= /xillybus_class.h index 5dbfdfc95c65..264b9f6d6793 100644 --- a/drivers/char/xillybus/xillybus_class.h +++ b/drivers/char/xillybus/xillybus_class.h @@ -8,6 +8,10 @@ #ifndef __XILLYBUS_CLASS_H #define __XILLYBUS_CLASS_H =20 +#define XILLYBUS_MAX_COUNT (((unsigned int) ~0x1ffff) >> 1) +#define XILLYBUS_MAX_NODES 1024 +#define XILLYBUS_MAX_IDT 1048576 + #include #include #include diff --git a/drivers/char/xillybus/xillybus_core.c b/drivers/char/xillybus/= xillybus_core.c index b264578b2572..3436f16092e0 100644 --- a/drivers/char/xillybus/xillybus_core.c +++ b/drivers/char/xillybus/xillybus_core.c @@ -351,6 +351,12 @@ static int xilly_get_dma_buffers(struct xilly_endpoint= *ep, struct device *dev =3D ep->dev; struct xilly_buffer *this_buffer =3D NULL; /* Init to silence warning */ =20 + if (bytebufsize =3D=3D 0 || bytebufsize > 0x40000000) { + dev_err(ep->dev, + "Illegal buffer size requested in IDT. Aborting.\n"); + return -ENODEV; + } + if (buffers) { /* Not the message buffer */ this_buffer =3D devm_kcalloc(dev, bufnum, sizeof(struct xilly_buffer), @@ -623,6 +629,12 @@ static int xilly_scan_idt(struct xilly_endpoint *endpo= int, return -ENODEV; } =20 + if (count =3D=3D 0 || count > XILLYBUS_MAX_NODES) { + dev_err(endpoint->dev, + "Unreasonable number of channels. Aborting.\n"); + return -ENODEV; + } + idt_handle->entries =3D len >> 2; endpoint->num_channels =3D count; =20 @@ -707,6 +719,9 @@ static ssize_t xillybus_read(struct file *filp, char __= user *userbuf, if (channel->endpoint->fatal_error) return -EIO; =20 + if (count > XILLYBUS_MAX_COUNT) + count =3D XILLYBUS_MAX_COUNT; + deadline =3D jiffies + 1 + XILLY_RX_TIMEOUT; =20 rc =3D mutex_lock_interruptible(&channel->wr_mutex); @@ -725,8 +740,18 @@ static ssize_t xillybus_read(struct file *filp, char _= _user *userbuf, bufidx =3D channel->wr_host_buf_idx; bufpos =3D channel->wr_host_buf_pos; howmany =3D ((channel->wr_buffers[bufidx]->end_offset - + 1) << channel->log2_element_size) - - bufpos; + + 1) << channel->log2_element_size); + + if (howmany > channel->wr_buf_size || + howmany < bufpos) { + dev_err(channel->endpoint->dev, + "Illegal buffer fill level from hardware\n"); + channel->endpoint->fatal_error =3D 1; + spin_unlock_irqrestore(&channel->wr_spinlock, flags); + break; + } + + howmany -=3D bufpos; =20 /* Update wr_host_* to its post-operation state */ if (howmany > bytes_to_do) { @@ -1216,6 +1241,9 @@ static ssize_t xillybus_write(struct file *filp, cons= t char __user *userbuf, if (channel->endpoint->fatal_error) return -EIO; =20 + if (count > XILLYBUS_MAX_COUNT) + count =3D XILLYBUS_MAX_COUNT; + rc =3D mutex_lock_interruptible(&channel->rd_mutex); if (rc) return rc; @@ -1902,6 +1930,11 @@ int xillybus_endpoint_discovery(struct xilly_endpoin= t *endpoint) return -ENODEV; } =20 + if (endpoint->idtlen < 4 || endpoint->idtlen > XILLYBUS_MAX_IDT) { + dev_err(endpoint->dev, "Invalid IDT length. Aborting.\n"); + return -ENODEV; + } + /* Enable DMA */ iowrite32((u32) (0x0002 | (endpoint->dma_using_dac & 0x0001)), endpoint->registers + fpga_dma_control_reg); diff --git a/drivers/char/xillybus/xillybus_of.c b/drivers/char/xillybus/xi= llybus_of.c index 46e1046abfca..44b0c754deb2 100644 --- a/drivers/char/xillybus/xillybus_of.c +++ b/drivers/char/xillybus/xillybus_of.c @@ -53,6 +53,9 @@ static int xilly_drv_probe(struct platform_device *op) =20 irq =3D platform_get_irq(op, 0); =20 + if (irq < 0) + return irq; + rc =3D devm_request_irq(dev, irq, xillybus_isr, 0, xillyname, endpoint); =20 if (rc) diff --git a/drivers/char/xillybus/xillyusb.c b/drivers/char/xillybus/xilly= usb.c index aa08206a18ef..7459ec9295af 100644 --- a/drivers/char/xillybus/xillyusb.c +++ b/drivers/char/xillybus/xillyusb.c @@ -396,6 +396,10 @@ static int fifo_init(struct xillyfifo *fifo, fifo->size =3D fifo->bufnum * fifo->bufsize; fifo->buf_order =3D buf_order; =20 + if (!fifo->size || /* Unsigned integer overflow */ + fifo->size > 0x40000000) /* Stay clear from signed int issues */ + return -ENOMEM; /* Reported as greed for memory */ + fifo->mem =3D kmalloc_array(fifo->bufnum, sizeof(void *), GFP_KERNEL); =20 if (!fifo->mem) @@ -888,6 +892,7 @@ static int process_in_opcode(struct xillyusb_dev *xdev, struct xillyusb_channel *chan; struct device *dev =3D xdev->dev; int chan_idx =3D chan_num >> 1; + struct xillyfifo *in_fifo; =20 if (chan_idx >=3D xdev->num_channels) { dev_err(dev, "Received illegal channel ID %d from FPGA\n", @@ -912,7 +917,10 @@ static int process_in_opcode(struct xillyusb_dev *xdev, */ smp_wmb(); WRITE_ONCE(chan->read_data_ok, 0); - wake_up_interruptible(&chan->in_fifo->waitq); + + in_fifo =3D READ_ONCE(chan->in_fifo); + if (in_fifo) + wake_up_interruptible(&in_fifo->waitq); break; =20 case OPCODE_REACHED_CHECKPOINT: @@ -1443,6 +1451,9 @@ static ssize_t xillyusb_read(struct file *filp, char = __user *userbuf, bool sent_set_push =3D false; int rc; =20 + if (count > XILLYBUS_MAX_COUNT) + count =3D XILLYBUS_MAX_COUNT; + deadline =3D jiffies + 1 + XILLY_RX_TIMEOUT; =20 rc =3D mutex_lock_interruptible(&chan->in_mutex); @@ -1649,6 +1660,9 @@ static ssize_t xillyusb_write(struct file *filp, cons= t char __user *userbuf, struct xillyfifo *fifo =3D &chan->out_ep->fifo; int rc; =20 + if (count > XILLYBUS_MAX_COUNT) + count =3D XILLYBUS_MAX_COUNT; + rc =3D mutex_lock_interruptible(&chan->out_mutex); =20 if (rc) @@ -2072,6 +2086,13 @@ static int xillyusb_discovery(struct usb_interface *= interface) } =20 idt_len =3D READ_ONCE(idt_fifo.fill); + + if (idt_len < 4 || idt_len > XILLYBUS_MAX_IDT) { + rc =3D -ENODEV; + dev_err(&interface->dev, "Invalid IDT length. Aborting.\n"); + goto unfifo; + } + idt =3D kmalloc(idt_len, GFP_KERNEL); =20 if (!idt) { @@ -2106,6 +2127,12 @@ static int xillyusb_discovery(struct usb_interface *= interface) goto unidt; } =20 + if (num_channels =3D=3D 0 || num_channels > XILLYBUS_MAX_NODES) { + dev_err(&interface->dev, "Unreasonable number of channels. Aborting.\n"); + rc =3D -ENODEV; + goto unidt; + } + rc =3D setup_channels(xdev, (void *)idt + 3, num_channels); =20 if (rc) --=20 2.34.1 From nobody Fri Jul 24 23:30:13 2026 Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) (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 A61CB4D2EC0 for ; Wed, 22 Jul 2026 10:24:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715850; cv=none; b=lNsc23rdG6Krig5WpVuaS6L7ifeKvBs3MEjah6WMf/guIlhOt3jWvkoFBuJQ5AGV1Hfn62xSJSD1etuK2nCNnf5W172ReAIySX0VRxV2BLJRyXq3kLdv+cxLNOLTDAEVGSXUJQCoVzJXS+l16gh8g0GaQpofpzxOfL23VrFCTU8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784715850; c=relaxed/simple; bh=XcQ2c8zSOPzD/hwG3Uq7CStFgE+He1NyBwUn85nt3U4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=mHyK5Xre62xKa9S7XFrKVmNvU0t77lOYj+/gE8t0Klv9piC+lgLenMjnKWeaGoUOf+711ieAZ9xZuIpOK1Tbfk+a5Xc/HUmzjMoeTajbAhicCI912lxWNZuS5EIV2uVdOfL6KNklQRHyLI3CbRFAv5JS4KdULW9BEq+eys7xmfc= 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=R7n97j4G; arc=none smtp.client-ip=209.85.218.51 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="R7n97j4G" Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-c12614b81c9so2222918366b.3 for ; Wed, 22 Jul 2026 03:24:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784715847; x=1785320647; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=wnK++KI5wbUzyegQ8hBTmOpZ98366a8S50YT0cPuViI=; b=R7n97j4GfC9C2JssdeStEooddfI0cT+COLmL1rkyNLMlprnbVPVuiNyKFhU5G8pOR+ kv1AD2gVT6MgEHiQogvbUvB7L0CZWABYv1RFF8wNPQZ937QI3Zx1pwoZ/YU8AgDCpbkw r107YPdPotdkXy3TE0g1F6fg++hVR+cX+R8udJ6bPKGGu3RRRDv/U2zlfUo+J1wB1jb5 2ZAsJ23grvQuoWEtPDf6cxaPYNaHJ/YFwAlfpNUywmcdoNKxoSfAPaCPURfPqjq5ri+H nAUbRoER6iwf/iunQaTYEkXdxAmNQPPg8BA7t1b5S5I2I4YU7FDCv3+Xfw00QMcST6xp +Caw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784715847; x=1785320647; h=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=wnK++KI5wbUzyegQ8hBTmOpZ98366a8S50YT0cPuViI=; b=naue8UTqjEp8qiZVjaQoQ2zO/w0dydHJELXsZO3UrqBjZkJDwvD6bVK1Nj/07kf2C1 igW+umpjKEIrUOzF1wfZGGWDG+KIFdFoB2RD73E4cZdRurDlAybqXWeutYO/ni0Qq42D UtvzbGJaoWdxnbRWxdRHDEr9Z7xMSTyPfwJ1tTeFaLo/gi4BN/4GdORaq2OqN84be+JE v/WP2hr61HGadr4xzrwrGwig0+7zH64K034i/lAH64gli7YaoYQDIZbJpOb2BKPIU8k7 JQg7CWeIWEQnk03rDlLVc6ckuktJ0DI0IhlBn2jI5MbhpCpRJu3Tele/EDI4NDyZpeQV zXVA== X-Forwarded-Encrypted: i=1; AHgh+RppUAphcAvRXZHPuylRKPTyRWWH8i4wC1/Ks95h+o/+Iu7GlT6hVt4KA5HDTCPeh8xXJ/DgtBwQ1hDXgz4=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/GbGWyN5EKzfAySIQNtFw9PMzUigWkWWs5uJs6eQAyjA7LxBl GmIfAS5osVIXZFlvziudjjQMd6dutrTPO7wmojFB7aMjjFKurVTfMWGq X-Gm-Gg: AR+sD11llw39AkkeAZzyhxq/ly18vEalw1K6fLdF7JaEkddwm2m8j25hV0cyNHwCVvr hDznTmi5gTTKWmFDAtALUruo39yy2PiZM565iwf7M0Cq/Ah/M3/fZ+EYv9wY7htvLDVMT+JaB4r wxQlW9eFzLxXIspz7sGy9Stw9Tc7dCx24q5wS4zISyTlhMN3e2Sm3apPOpyoXyGFl/tPZt58s5u yQyQ4tNlpxsgBVx7TZRFMYTCeiXfUYGV4GhVbn0tRyZXtBp7SWMXmUQgdcJJNfNpiSIOeXz8n+c WDi8O+ACGnhqK5Cqk5z22tEjQIBWReNlPlcgx0AZGPGdENM9lYyRX57mttH1aH7hV4EOQiGLnIy IAqDCBQRZr1DJt7j1Y1s3A1e4LyX9iTTSpaf9NezuA6LksQfTOIGMv+NgQ2pSzwp7aaKJLNeDpW CGra4zP2U0Oq8d8HmhgyNMD+ymQvknDty6abAQ91ae X-Received: by 2002:a17:907:1ca6:b0:c15:e33b:8c4d with SMTP id a640c23a62f3a-c16b46c2761mr892805366b.4.1784715846664; Wed, 22 Jul 2026 03:24:06 -0700 (PDT) Received: from localhost (c-85-228-45-68.bbcust.telenor.se. [85.228.45.68]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c1c32ac6ff3sm83635166b.19.2026.07.22.03.24.05 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 22 Jul 2026 03:24:06 -0700 (PDT) From: Eli Billauer To: gregkh@linuxfoundation.org Cc: arnd@arndb.de, linux-kernel@vger.kernel.org, Eli Billauer Subject: [PATCH v2 7/7] char: xillybus: Ignore and report unsolicited interrupts Date: Wed, 22 Jul 2026 12:23:07 +0200 Message-Id: <20260722102307.49090-8-eli.billauer@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260722102307.49090-1-eli.billauer@gmail.com> References: <20260722102307.49090-1-eli.billauer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" During initialization, the hardware should issue interrupts only in response to requests from the host. Ignore and log unexpected interrupts, as these indicate misbehaving hardware. In the same spirit, in xilly_quiesce(), assign endpoint->num_channels =3D 0 before allowing the ISR, in order to expose whether the hardware incorrectly sends messages related to data channels during shutdown. Signed-off-by: Eli Billauer --- Notes: No change on v1->v2. drivers/char/xillybus/xillybus.h | 3 ++ drivers/char/xillybus/xillybus_core.c | 46 ++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/drivers/char/xillybus/xillybus.h b/drivers/char/xillybus/xilly= bus.h index 51de7cbc579e..98c7ac4dd1f9 100644 --- a/drivers/char/xillybus/xillybus.h +++ b/drivers/char/xillybus/xillybus.h @@ -94,6 +94,9 @@ struct xilly_endpoint { __iomem void *registers; int fatal_error; =20 + bool allow_isr; + spinlock_t allow_isr_lock; + struct mutex register_mutex; wait_queue_head_t ep_wait; =20 diff --git a/drivers/char/xillybus/xillybus_core.c b/drivers/char/xillybus/= xillybus_core.c index 3436f16092e0..ea0debe24968 100644 --- a/drivers/char/xillybus/xillybus_core.c +++ b/drivers/char/xillybus/xillybus_core.c @@ -72,6 +72,8 @@ static struct workqueue_struct *xillybus_wq; * * rd_spinlock does the same with rd_*_buf_idx, rd_empty and end_offset. * + * allow_isr_lock protects allow_isr. + * * register_mutex is endpoint-specific, and is held when non-atomic * register operations are performed. wr_mutex and rd_mutex may be * held when register_mutex is taken, but none of the spinlocks. Note that @@ -84,7 +86,8 @@ static struct workqueue_struct *xillybus_wq; * Only interruptible blocking is allowed on mutexes and wait queues. * * All in all, the locking order goes (with skips allowed, of course): - * wr_mutex -> rd_mutex -> register_mutex -> wr_spinlock -> rd_spinlock + * wr_mutex -> rd_mutex -> register_mutex -> + * allow_isr_lock -> wr_spinlock -> rd_spinlock */ =20 static void malformed_message(struct xilly_endpoint *endpoint, u32 *buf) @@ -119,6 +122,13 @@ irqreturn_t xillybus_isr(int irq, void *data) unsigned int msg_channel, msg_bufno, msg_data, msg_dir; struct xilly_channel *channel; =20 + guard(spinlock)(&ep->allow_isr_lock); + + if (!ep->allow_isr) { + dev_err_ratelimited(ep->dev, "Unexpected interrupt! Something is wrong w= ith the hardware.\n"); + return IRQ_HANDLED; + } + buf =3D ep->msgbuf_addr; buf_size =3D ep->msg_buf_size/sizeof(u32); =20 @@ -283,6 +293,19 @@ irqreturn_t xillybus_isr(int irq, void *data) } EXPORT_SYMBOL(xillybus_isr); =20 +/* + * xilly_allow_isr() is similar to enabling / disabling the interrupt, + * with the difference that if an interrupt is issued while ep->allow_isr + * is false, this is visible in the kernel log. + */ + +static void xilly_allow_isr(struct xilly_endpoint *ep, bool newstate) +{ + guard(spinlock_irqsave)(&ep->allow_isr_lock); + + ep->allow_isr =3D newstate; +} + /* * A few trivial memory management functions. * NOTE: These functions are used only on probe and remove, and therefore @@ -651,6 +674,8 @@ static int xilly_obtain_idt(struct xilly_endpoint *endp= oint) =20 channel->wr_sleepy =3D 1; =20 + xilly_allow_isr(endpoint, true); + iowrite32(1 | (3 << 24), /* Opcode 3 for channel 0 =3D Send IDT */ endpoint->registers + fpga_buf_ctrl_reg); @@ -659,6 +684,8 @@ static int xilly_obtain_idt(struct xilly_endpoint *endp= oint) (!channel->wr_sleepy), XILLY_TIMEOUT); =20 + xilly_allow_isr(endpoint, false); + if (t <=3D 0) { dev_err(endpoint->dev, "Failed to obtain IDT. Aborting.\n"); =20 @@ -1843,6 +1870,9 @@ struct xilly_endpoint *xillybus_init_endpoint(struct = device *dev) endpoint->failed_messages =3D 0; endpoint->fatal_error =3D 0; =20 + endpoint->allow_isr =3D false; + spin_lock_init(&endpoint->allow_isr_lock); + init_waitqueue_head(&endpoint->ep_wait); mutex_init(&endpoint->register_mutex); =20 @@ -1855,6 +1885,9 @@ static int xilly_quiesce(struct xilly_endpoint *endpo= int) long t; =20 endpoint->idtlen =3D -1; + endpoint->num_channels =3D 0; + + xilly_allow_isr(endpoint, true); =20 iowrite32((u32) (endpoint->dma_using_dac & 0x0001), endpoint->registers + fpga_dma_control_reg); @@ -1862,6 +1895,9 @@ static int xilly_quiesce(struct xilly_endpoint *endpo= int) t =3D wait_event_interruptible_timeout(endpoint->ep_wait, (endpoint->idtlen >=3D 0), XILLY_TIMEOUT); + + xilly_allow_isr(endpoint, false); + if (t <=3D 0) { dev_err(endpoint->dev, "Failed to quiesce the device on exit.\n"); @@ -1915,6 +1951,8 @@ int xillybus_endpoint_discovery(struct xilly_endpoint= *endpoint) =20 endpoint->idtlen =3D -1; =20 + xilly_allow_isr(endpoint, true); + /* * Set DMA 32/64 bit mode, quiesce the device (?!) and get IDT * buffer size. @@ -1925,6 +1963,9 @@ int xillybus_endpoint_discovery(struct xilly_endpoint= *endpoint) t =3D wait_event_interruptible_timeout(endpoint->ep_wait, (endpoint->idtlen >=3D 0), XILLY_TIMEOUT); + + xilly_allow_isr(endpoint, false); + if (t <=3D 0) { dev_err(endpoint->dev, "No response from FPGA. Aborting.\n"); return -ENODEV; @@ -1951,6 +1992,7 @@ int xillybus_endpoint_discovery(struct xilly_endpoint= *endpoint) if (rc) goto failed_idt; =20 + /* xilly_obtain_idt() allows and then disallows the ISR */ rc =3D xilly_obtain_idt(endpoint); if (rc) goto failed_idt; @@ -1969,6 +2011,8 @@ int xillybus_endpoint_discovery(struct xilly_endpoint= *endpoint) if (rc) goto failed_idt; =20 + xilly_allow_isr(endpoint, true); + rc =3D xillybus_init_chrdev(dev, &xillybus_fops, endpoint->owner, endpoint, idt_handle.names, --=20 2.34.1