All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH linux dev-4.10 0/3] drivers: fsi: sbefifo: Fix race conditon, memory leak, and probe
@ 2017-10-17 21:35 Eddie James
  2017-10-17 21:35 ` [PATCH linux dev-4.10 1/3] drivers: fsi: sbefifo: Fix queued xfrs race condition Eddie James
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Eddie James @ 2017-10-17 21:35 UTC (permalink / raw)
  To: openbmc; +Cc: joel, andrew, bradleyb, Edward A. James

From: "Edward A. James" <eajames@us.ibm.com>

This series fixes some outstanding issues with the SBE FIFO FSI client driver.
The most important fix is preventing a race condition in the remove() path.
The second patch is to fix a memory leak that was happening on most transfers.
The third patch is unrelated, though it will add some robustness to probing
the SBE FIFO, instead of failing immediately if we see some data already in
the fifo.

Edward A. James (3):
  drivers: fsi: sbefifo: Fix queued xfrs race condition
  drivers: fsi: sbefifo: Fix memory leak
  drivers: fsi: sbefifo: Attempt reset request during probe

 drivers/fsi/fsi-sbefifo.c | 97 ++++++++++++++++++++++++++++++++++-------------
 1 file changed, 71 insertions(+), 26 deletions(-)

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH linux dev-4.10 1/3] drivers: fsi: sbefifo: Fix queued xfrs race condition
  2017-10-17 21:35 [PATCH linux dev-4.10 0/3] drivers: fsi: sbefifo: Fix race conditon, memory leak, and probe Eddie James
@ 2017-10-17 21:35 ` Eddie James
  2017-10-17 21:35 ` [PATCH linux dev-4.10 2/3] drivers: fsi: sbefifo: Fix memory leak Eddie James
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Eddie James @ 2017-10-17 21:35 UTC (permalink / raw)
  To: openbmc; +Cc: joel, andrew, bradleyb, Edward A. James

From: "Edward A. James" <eajames@us.ibm.com>

There was a race condition where: sbefifo remove() is called, a transfer
is queued, a client is waiting, and a client is released at the same
time. In this situation, remove() wakes up the client waiter, which
destroys the client's list of transfers. This must be done since in an
error case, we don't know if the transfers are deleted or not. Then,
the client is released. Since it has no transfers, it fails to cancel
the queued transfer. This transfer then wakes up on the timer, where it
attempts to access it's client buffers, which have been freed.

Signed-off-by: Edward A. James <eajames@us.ibm.com>
---
 drivers/fsi/fsi-sbefifo.c | 39 ++++++++++++++++++++++++---------------
 1 file changed, 24 insertions(+), 15 deletions(-)

diff --git a/drivers/fsi/fsi-sbefifo.c b/drivers/fsi/fsi-sbefifo.c
index 5d73437..c914eaf 100644
--- a/drivers/fsi/fsi-sbefifo.c
+++ b/drivers/fsi/fsi-sbefifo.c
@@ -312,22 +312,27 @@ static struct sbefifo_client *sbefifo_new_client(struct sbefifo *sbefifo)
 
 static void sbefifo_client_release(struct kref *kref)
 {
+	struct sbefifo *sbefifo;
 	struct sbefifo_client *client;
 	struct sbefifo_xfr *xfr;
 
 	client = container_of(kref, struct sbefifo_client, kref);
-	list_for_each_entry(xfr, &client->xfrs, client) {
-		/*
-		 * The client left with pending or running xfrs.
-		 * Cancel them.
-		 */
-		set_bit(SBEFIFO_XFR_CANCEL, &xfr->flags);
-		sbefifo_get(client->dev);
-		if (mod_timer(&client->dev->poll_timer, jiffies))
-			sbefifo_put(client->dev);
+	sbefifo = client->dev;
+
+	if (!READ_ONCE(sbefifo->rc)) {
+		list_for_each_entry(xfr, &client->xfrs, client) {
+			/*
+			 * The client left with pending or running xfrs.
+			 * Cancel them.
+			 */
+			set_bit(SBEFIFO_XFR_CANCEL, &xfr->flags);
+			sbefifo_get(sbefifo);
+			if (mod_timer(&client->dev->poll_timer, jiffies))
+				sbefifo_put(sbefifo);
+		}
 	}
 
-	sbefifo_put(client->dev);
+	sbefifo_put(sbefifo);
 	kfree(client);
 }
 
@@ -901,7 +906,16 @@ static int sbefifo_remove(struct device *dev)
 	struct sbefifo *sbefifo = dev_get_drvdata(dev);
 	struct sbefifo_xfr *xfr;
 
+	spin_lock(&sbefifo->lock);
+
 	WRITE_ONCE(sbefifo->rc, -ENODEV);
+	list_for_each_entry(xfr, &sbefifo->xfrs, xfrs)
+		kfree(xfr);
+
+	INIT_LIST_HEAD(&sbefifo->xfrs);
+
+	spin_unlock(&sbefifo->lock);
+
 	wake_up_all(&sbefifo->wait);
 
 	misc_deregister(&sbefifo->mdev);
@@ -912,11 +926,6 @@ static int sbefifo_remove(struct device *dev)
 	if (del_timer_sync(&sbefifo->poll_timer))
 		sbefifo_put(sbefifo);
 
-	spin_lock(&sbefifo->lock);
-	list_for_each_entry(xfr, &sbefifo->xfrs, xfrs)
-		kfree(xfr);
-	spin_unlock(&sbefifo->lock);
-
 	sbefifo_put(sbefifo);
 
 	return 0;
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH linux dev-4.10 2/3] drivers: fsi: sbefifo: Fix memory leak
  2017-10-17 21:35 [PATCH linux dev-4.10 0/3] drivers: fsi: sbefifo: Fix race conditon, memory leak, and probe Eddie James
  2017-10-17 21:35 ` [PATCH linux dev-4.10 1/3] drivers: fsi: sbefifo: Fix queued xfrs race condition Eddie James
@ 2017-10-17 21:35 ` Eddie James
  2017-10-18 13:24   ` Andrew Jeffery
  2017-10-17 21:35 ` [PATCH linux dev-4.10 3/3] drivers: fsi: sbefifo: Attempt reset request during probe Eddie James
  2017-10-18 14:35 ` [PATCH linux dev-4.10 0/3] drivers: fsi: sbefifo: Fix race conditon, memory leak, and probe Andrew Jeffery
  3 siblings, 1 reply; 8+ messages in thread
From: Eddie James @ 2017-10-17 21:35 UTC (permalink / raw)
  To: openbmc; +Cc: joel, andrew, bradleyb, Edward A. James

From: "Edward A. James" <eajames@us.ibm.com>

Transfers weren't being cleaned up if they were complete but the user
never finished reading. This is very common.

Signed-off-by: Edward A. James <eajames@us.ibm.com>
---
 drivers/fsi/fsi-sbefifo.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/fsi/fsi-sbefifo.c b/drivers/fsi/fsi-sbefifo.c
index c914eaf..764d8f3 100644
--- a/drivers/fsi/fsi-sbefifo.c
+++ b/drivers/fsi/fsi-sbefifo.c
@@ -321,6 +321,11 @@ static void sbefifo_client_release(struct kref *kref)
 
 	if (!READ_ONCE(sbefifo->rc)) {
 		list_for_each_entry(xfr, &client->xfrs, client) {
+			if (test_bit(SBEFIFO_XFR_COMPLETE, &xfr->flags)) {
+				kfree(xfr);
+				continue;
+			}
+
 			/*
 			 * The client left with pending or running xfrs.
 			 * Cancel them.
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH linux dev-4.10 3/3] drivers: fsi: sbefifo: Attempt reset request during probe
  2017-10-17 21:35 [PATCH linux dev-4.10 0/3] drivers: fsi: sbefifo: Fix race conditon, memory leak, and probe Eddie James
  2017-10-17 21:35 ` [PATCH linux dev-4.10 1/3] drivers: fsi: sbefifo: Fix queued xfrs race condition Eddie James
  2017-10-17 21:35 ` [PATCH linux dev-4.10 2/3] drivers: fsi: sbefifo: Fix memory leak Eddie James
@ 2017-10-17 21:35 ` Eddie James
  2017-10-18 13:58   ` Andrew Jeffery
  2017-10-18 14:35 ` [PATCH linux dev-4.10 0/3] drivers: fsi: sbefifo: Fix race conditon, memory leak, and probe Andrew Jeffery
  3 siblings, 1 reply; 8+ messages in thread
From: Eddie James @ 2017-10-17 21:35 UTC (permalink / raw)
  To: openbmc; +Cc: joel, andrew, bradleyb, Edward A. James

From: "Edward A. James" <eajames@us.ibm.com>

If data is found in the FIFO, the driver currently immediately fails
the probe. Instead, try a reset request and poll for it's completion for
a while (this protocol is defined in the SBE FIFO spec, though the
timeout lengths are my own invention).

Signed-off-by: Edward A. James <eajames@us.ibm.com>
---
 drivers/fsi/fsi-sbefifo.c | 53 +++++++++++++++++++++++++++++++++++++----------
 1 file changed, 42 insertions(+), 11 deletions(-)

diff --git a/drivers/fsi/fsi-sbefifo.c b/drivers/fsi/fsi-sbefifo.c
index 764d8f3..f756822 100644
--- a/drivers/fsi/fsi-sbefifo.c
+++ b/drivers/fsi/fsi-sbefifo.c
@@ -47,8 +47,10 @@
 
 #define SBEFIFO_STS		0x04
 #define   SBEFIFO_EMPTY			BIT(20)
+#define   SBEFIFO_STS_RESET_REQ		BIT(25)
 #define SBEFIFO_EOT_RAISE	0x08
 #define   SBEFIFO_EOT_MAGIC		0xffffffff
+#define SBEFIFO_REQ_RESET	0x0C
 #define SBEFIFO_EOT_ACK		0x14
 
 #define SBEFIFO_RESCHEDULE	msecs_to_jiffies(500)
@@ -831,6 +833,36 @@ static int sbefifo_unregister_child(struct device *dev, void *data)
 	return 0;
 }
 
+static int sbefifo_request_reset(struct sbefifo *sbefifo)
+{
+	int ret;
+	u32 status;
+	unsigned long start;
+	const unsigned int wait_time = 5;	/* jiffies */
+	const unsigned long timeout = msecs_to_jiffies(250);
+
+	ret = sbefifo_outw(sbefifo, SBEFIFO_UP | SBEFIFO_REQ_RESET, 1);
+	if (ret)
+		return ret;
+
+	start = jiffies;
+
+	do {
+		ret = sbefifo_inw(sbefifo, SBEFIFO_UP | SBEFIFO_STS, &status);
+		if (ret)
+			return ret;
+
+		if (!(status & SBEFIFO_STS_RESET_REQ))
+			return 0;
+
+		set_current_state(TASK_INTERRUPTIBLE);
+		if (schedule_timeout(wait_time) > 0)
+			return -EINTR;
+	} while (time_after(start + timeout, jiffies));
+
+	return -ETIME;
+}
+
 static int sbefifo_probe(struct device *dev)
 {
 	struct fsi_device *fsi_dev = to_fsi_dev(dev);
@@ -838,7 +870,7 @@ static int sbefifo_probe(struct device *dev)
 	struct device_node *np;
 	struct platform_device *child;
 	char child_name[32];
-	u32 sts;
+	u32 up, down;
 	int ret, child_idx = 0;
 
 	dev_dbg(dev, "Found sbefifo device\n");
@@ -848,22 +880,21 @@ static int sbefifo_probe(struct device *dev)
 
 	sbefifo->fsi_dev = fsi_dev;
 
-	ret = sbefifo_inw(sbefifo, SBEFIFO_UP | SBEFIFO_STS, &sts);
+	ret = sbefifo_inw(sbefifo, SBEFIFO_UP | SBEFIFO_STS, &up);
 	if (ret)
 		return ret;
 
-	if (!(sts & SBEFIFO_EMPTY)) {
-		dev_err(dev, "Found data in upstream fifo\n");
-		return -EIO;
-	}
-
-	ret = sbefifo_inw(sbefifo, SBEFIFO_DWN | SBEFIFO_STS, &sts);
+	ret = sbefifo_inw(sbefifo, SBEFIFO_DWN | SBEFIFO_STS, &down);
 	if (ret)
 		return ret;
 
-	if (!(sts & SBEFIFO_EMPTY)) {
-		dev_err(dev, "Found data in downstream fifo\n");
-		return -EIO;
+	if (!(up & SBEFIFO_EMPTY) || !(down & SBEFIFO_EMPTY)) {
+		ret = sbefifo_request_reset(sbefifo);
+		if (ret) {
+			dev_err(dev,
+				"fifos weren't empty and failed the reset\n");
+			return ret;
+		}
 	}
 
 	spin_lock_init(&sbefifo->lock);
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH linux dev-4.10 2/3] drivers: fsi: sbefifo: Fix memory leak
  2017-10-17 21:35 ` [PATCH linux dev-4.10 2/3] drivers: fsi: sbefifo: Fix memory leak Eddie James
@ 2017-10-18 13:24   ` Andrew Jeffery
  2017-10-18 13:47     ` Eddie James
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew Jeffery @ 2017-10-18 13:24 UTC (permalink / raw)
  To: Eddie James, openbmc; +Cc: joel, bradleyb, Edward A. James

[-- Attachment #1: Type: text/plain, Size: 1042 bytes --]

On Tue, 2017-10-17 at 16:35 -0500, Eddie James wrote:
> From: "Edward A. James" <eajames@us.ibm.com>
> 
> Transfers weren't being cleaned up if they were complete but the user
> never finished reading. This is very common.

I'm curious as to why this is common, but regardless, the patch looks
fine given the premise.

Andrew

> 
> Signed-off-by: Edward A. James <eajames@us.ibm.com>
> ---
>  drivers/fsi/fsi-sbefifo.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/fsi/fsi-sbefifo.c b/drivers/fsi/fsi-sbefifo.c
> index c914eaf..764d8f3 100644
> --- a/drivers/fsi/fsi-sbefifo.c
> +++ b/drivers/fsi/fsi-sbefifo.c
> @@ -321,6 +321,11 @@ static void sbefifo_client_release(struct kref *kref)
>  
>  	if (!READ_ONCE(sbefifo->rc)) {
>  		list_for_each_entry(xfr, &client->xfrs, client) {
> +			if (test_bit(SBEFIFO_XFR_COMPLETE, &xfr->flags)) {
> +				kfree(xfr);
> +				continue;
> +			}
> +
>  			/*
>  			 * The client left with pending or running xfrs.
>  			 * Cancel them.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH linux dev-4.10 2/3] drivers: fsi: sbefifo: Fix memory leak
  2017-10-18 13:24   ` Andrew Jeffery
@ 2017-10-18 13:47     ` Eddie James
  0 siblings, 0 replies; 8+ messages in thread
From: Eddie James @ 2017-10-18 13:47 UTC (permalink / raw)
  To: Andrew Jeffery, openbmc; +Cc: Edward A. James, bradleyb



On 10/18/2017 08:24 AM, Andrew Jeffery wrote:
> On Tue, 2017-10-17 at 16:35 -0500, Eddie James wrote:
>> From: "Edward A. James" <eajames@us.ibm.com>
>>   
>> Transfers weren't being cleaned up if they were complete but the user
>> never finished reading. This is very common.
> I'm curious as to why this is common, but regardless, the patch looks
> fine given the premise.

Users just seemed to do this very frequently, from my tracing. They just 
don't finish reading all the available data and instead just close the 
client. That's because the actual data packet is some number of words 
less than the amount of data read and returned by the SBEFIFO. In 
practice, a user should read all the extra bytes to check them to make 
sure the transfer was successful, but it's actually difficult to know 
how much extra data is there.

This only happens if the driver has actually read all the data out of 
the FIFO and therefore removed the transfer from it's queue.

Thanks,
Eddie

>
> Andrew
>
>>   
>> Signed-off-by: Edward A. James <eajames@us.ibm.com>
>> ---
>>   drivers/fsi/fsi-sbefifo.c | 5 +++++
>>   1 file changed, 5 insertions(+)
>>   
>> diff --git a/drivers/fsi/fsi-sbefifo.c b/drivers/fsi/fsi-sbefifo.c
>> index c914eaf..764d8f3 100644
>> --- a/drivers/fsi/fsi-sbefifo.c
>> +++ b/drivers/fsi/fsi-sbefifo.c
>> @@ -321,6 +321,11 @@ static void sbefifo_client_release(struct kref *kref)
>>   
>>   	if (!READ_ONCE(sbefifo->rc)) {
>>   		list_for_each_entry(xfr, &client->xfrs, client) {
>> +			if (test_bit(SBEFIFO_XFR_COMPLETE, &xfr->flags)) {
>> +				kfree(xfr);
>> +				continue;
>> +			}
>> +
>>   			/*
>>   			 * The client left with pending or running xfrs.
>>   			 * Cancel them.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH linux dev-4.10 3/3] drivers: fsi: sbefifo: Attempt reset request during probe
  2017-10-17 21:35 ` [PATCH linux dev-4.10 3/3] drivers: fsi: sbefifo: Attempt reset request during probe Eddie James
@ 2017-10-18 13:58   ` Andrew Jeffery
  0 siblings, 0 replies; 8+ messages in thread
From: Andrew Jeffery @ 2017-10-18 13:58 UTC (permalink / raw)
  To: Eddie James, openbmc; +Cc: joel, bradleyb, Edward A. James

[-- Attachment #1: Type: text/plain, Size: 3581 bytes --]

On Tue, 2017-10-17 at 16:35 -0500, Eddie James wrote:
> From: "Edward A. James" <eajames@us.ibm.com>
> 
> If data is found in the FIFO, the driver currently immediately fails
> the probe. Instead, try a reset request and poll for it's completion for
> a while (this protocol is defined in the SBE FIFO spec, though the
> timeout lengths are my own invention).
> 
> Signed-off-by: Edward A. James <eajames@us.ibm.com>
> ---
>  drivers/fsi/fsi-sbefifo.c | 53 +++++++++++++++++++++++++++++++++++++----------
>  1 file changed, 42 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/fsi/fsi-sbefifo.c b/drivers/fsi/fsi-sbefifo.c
> index 764d8f3..f756822 100644
> --- a/drivers/fsi/fsi-sbefifo.c
> +++ b/drivers/fsi/fsi-sbefifo.c
> @@ -47,8 +47,10 @@
>  
>  #define SBEFIFO_STS		0x04
>  #define   SBEFIFO_EMPTY			BIT(20)
> +#define   SBEFIFO_STS_RESET_REQ		BIT(25)
>  #define SBEFIFO_EOT_RAISE	0x08
>  #define   SBEFIFO_EOT_MAGIC		0xffffffff
> +#define SBEFIFO_REQ_RESET	0x0C

Bit of a nit, but it would be nice to have consistency between RESET_REQ and
REQ_RESET. I don't see any reason for it to be inconsistent from reading the
documentation. However that can probably be left for some other time.

Andrew

>  #define SBEFIFO_EOT_ACK		0x14
>  
>  #define SBEFIFO_RESCHEDULE	msecs_to_jiffies(500)
> @@ -831,6 +833,36 @@ static int sbefifo_unregister_child(struct device *dev, void *data)
>  	return 0;
>  }
>  
> +static int sbefifo_request_reset(struct sbefifo *sbefifo)
> +{
> +	int ret;
> +	u32 status;
> +	unsigned long start;
> +	const unsigned int wait_time = 5;	/* jiffies */
> +	const unsigned long timeout = msecs_to_jiffies(250);
> +
> +	ret = sbefifo_outw(sbefifo, SBEFIFO_UP | SBEFIFO_REQ_RESET, 1);
> +	if (ret)
> +		return ret;
> +
> +	start = jiffies;
> +
> +	do {
> +		ret = sbefifo_inw(sbefifo, SBEFIFO_UP | SBEFIFO_STS, &status);
> +		if (ret)
> +			return ret;
> +
> +		if (!(status & SBEFIFO_STS_RESET_REQ))
> +			return 0;
> +
> +		set_current_state(TASK_INTERRUPTIBLE);
> +		if (schedule_timeout(wait_time) > 0)
> +			return -EINTR;
> +	} while (time_after(start + timeout, jiffies));
> +
> +	return -ETIME;
> +}
> +
>  static int sbefifo_probe(struct device *dev)
>  {
>  	struct fsi_device *fsi_dev = to_fsi_dev(dev);
> @@ -838,7 +870,7 @@ static int sbefifo_probe(struct device *dev)
>  	struct device_node *np;
>  	struct platform_device *child;
>  	char child_name[32];
> -	u32 sts;
> +	u32 up, down;
>  	int ret, child_idx = 0;
>  
>  	dev_dbg(dev, "Found sbefifo device\n");
> @@ -848,22 +880,21 @@ static int sbefifo_probe(struct device *dev)
>  
>  	sbefifo->fsi_dev = fsi_dev;
>  
> -	ret = sbefifo_inw(sbefifo, SBEFIFO_UP | SBEFIFO_STS, &sts);
> +	ret = sbefifo_inw(sbefifo, SBEFIFO_UP | SBEFIFO_STS, &up);
>  	if (ret)
>  		return ret;
>  
> -	if (!(sts & SBEFIFO_EMPTY)) {
> -		dev_err(dev, "Found data in upstream fifo\n");
> -		return -EIO;
> -	}
> -
> -	ret = sbefifo_inw(sbefifo, SBEFIFO_DWN | SBEFIFO_STS, &sts);
> +	ret = sbefifo_inw(sbefifo, SBEFIFO_DWN | SBEFIFO_STS, &down);
>  	if (ret)
>  		return ret;
>  
> -	if (!(sts & SBEFIFO_EMPTY)) {
> -		dev_err(dev, "Found data in downstream fifo\n");
> -		return -EIO;
> +	if (!(up & SBEFIFO_EMPTY) || !(down & SBEFIFO_EMPTY)) {
> +		ret = sbefifo_request_reset(sbefifo);
> +		if (ret) {
> +			dev_err(dev,
> +				"fifos weren't empty and failed the reset\n");
> +			return ret;
> +		}
>  	}
>  
>  	spin_lock_init(&sbefifo->lock);

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH linux dev-4.10 0/3] drivers: fsi: sbefifo: Fix race conditon, memory leak, and probe
  2017-10-17 21:35 [PATCH linux dev-4.10 0/3] drivers: fsi: sbefifo: Fix race conditon, memory leak, and probe Eddie James
                   ` (2 preceding siblings ...)
  2017-10-17 21:35 ` [PATCH linux dev-4.10 3/3] drivers: fsi: sbefifo: Attempt reset request during probe Eddie James
@ 2017-10-18 14:35 ` Andrew Jeffery
  3 siblings, 0 replies; 8+ messages in thread
From: Andrew Jeffery @ 2017-10-18 14:35 UTC (permalink / raw)
  To: Eddie James, openbmc; +Cc: joel, bradleyb, Edward A. James

[-- Attachment #1: Type: text/plain, Size: 912 bytes --]

On Tue, 2017-10-17 at 16:35 -0500, Eddie James wrote:
> > From: "Edward A. James" <eajames@us.ibm.com>
> 
> This series fixes some outstanding issues with the SBE FIFO FSI client driver.
> The most important fix is preventing a race condition in the remove() path.
> The second patch is to fix a memory leak that was happening on most transfers.
> The third patch is unrelated, though it will add some robustness to probing
> the SBE FIFO, instead of failing immediately if we see some data already in
> the fifo.
> 
> Edward A. James (3):
>   drivers: fsi: sbefifo: Fix queued xfrs race condition
>   drivers: fsi: sbefifo: Fix memory leak
>   drivers: fsi: sbefifo: Attempt reset request during probe

Applied to dev-4.10.

Cheers,

Andrew

> 
>  drivers/fsi/fsi-sbefifo.c | 97 ++++++++++++++++++++++++++++++++++-------------
>  1 file changed, 71 insertions(+), 26 deletions(-)
> 

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-10-18 14:36 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-17 21:35 [PATCH linux dev-4.10 0/3] drivers: fsi: sbefifo: Fix race conditon, memory leak, and probe Eddie James
2017-10-17 21:35 ` [PATCH linux dev-4.10 1/3] drivers: fsi: sbefifo: Fix queued xfrs race condition Eddie James
2017-10-17 21:35 ` [PATCH linux dev-4.10 2/3] drivers: fsi: sbefifo: Fix memory leak Eddie James
2017-10-18 13:24   ` Andrew Jeffery
2017-10-18 13:47     ` Eddie James
2017-10-17 21:35 ` [PATCH linux dev-4.10 3/3] drivers: fsi: sbefifo: Attempt reset request during probe Eddie James
2017-10-18 13:58   ` Andrew Jeffery
2017-10-18 14:35 ` [PATCH linux dev-4.10 0/3] drivers: fsi: sbefifo: Fix race conditon, memory leak, and probe Andrew Jeffery

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.