Thread (17 messages) 17 messages, 2 authors, 2024-01-28

Re: [PATCH V3 01/14 next] qca_spi: Improve SPI thread creation

From: Stefan Wahren <wahrenst@gmx.net>
Date: 2024-01-28 19:52:17
Also in: lkml

Hi Jakub,

Am 26.01.24 um 03:36 schrieb Jakub Kicinski:
On Wed, 24 Jan 2024 23:31:58 +0100 Stefan Wahren wrote:
quoted
The qca_spi driver create/stop the SPI kernel thread in case
of netdev_open/close. This isn't optimal because there is no
need for such an expensive operation.

So improve this by moving create/stop of the SPI kernel into
the init/uninit ops. The open/close ops could just
'park/unpark' the SPI kernel thread.
What's the concern? I don't think that creating a thread is all
expensive. And we shouldn't have a thread sitting around when
the interface isn't use. I mean - if you ask me what's better
a small chance that the creation will fail at open or having
a parked and unused thread when device is down - I'd pick
the former.. But I may well be missing the point.
there is actually another reason for this change which is not mentioned
in the commit message. The pointer spi_thread can have 3 states:
- valid thread
- error pointer
- NULL

So the second motivation was to eliminate the possibility of an error
pointer
by using a local variable. So we only have to care about NULL.

I will change this in V4.
quoted
@@ -825,6 +813,7 @@ static int
  qcaspi_netdev_init(struct net_device *dev)
  {
  	struct qcaspi *qca = netdev_priv(dev);
+	struct task_struct *thread;

  	dev->mtu = QCAFRM_MAX_MTU;
  	dev->type = ARPHRD_ETHER;
@@ -848,6 +837,15 @@ qcaspi_netdev_init(struct net_device *dev)
  		return -ENOBUFS;
  	}

+	thread = kthread_create(qcaspi_spi_thread, qca, "%s", dev->name);
+	if (IS_ERR(thread)) {
+		netdev_err(dev, "%s: unable to start kernel thread.\n",
+			   QCASPI_DRV_NAME);
+		return PTR_ERR(thread);
I'm 90% sure this leaks resources on failure, too.
Oops

Best regards
Rest of the series LGTM!
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help