All of lore.kernel.org
 help / color / mirror / Atom feed
* Patch "ALSA: ctxfi: Fallback DMA mask to 32bit" has been added to the 4.4-stable tree
@ 2017-03-08 10:27 gregkh
  2017-03-11 15:28 ` Jiri Slaby
  0 siblings, 1 reply; 5+ messages in thread
From: gregkh @ 2017-03-08 10:27 UTC (permalink / raw)
  To: tiwai, gregkh; +Cc: stable, stable-commits


This is a note to let you know that I've just added the patch titled

    ALSA: ctxfi: Fallback DMA mask to 32bit

to the 4.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     alsa-ctxfi-fallback-dma-mask-to-32bit.patch
and it can be found in the queue-4.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.


>From 15c75b09f8d190f89ab4db463b87d411ca349dfe Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Tue, 28 Feb 2017 17:16:48 +0100
Subject: ALSA: ctxfi: Fallback DMA mask to 32bit

From: Takashi Iwai <tiwai@suse.de>

commit 15c75b09f8d190f89ab4db463b87d411ca349dfe upstream.

Currently ctxfi driver tries to set only the 64bit DMA mask on 64bit
architectures, and bails out if it fails.  This causes a problem on
some platforms since the 64bit DMA isn't always guaranteed.  We should
fall back to the default 32bit DMA when 64bit DMA fails.

Fixes: 6d74b86d3c0f ("ALSA: ctxfi - Allow 64bit DMA")
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 sound/pci/ctxfi/cthw20k1.c |   19 ++++++-------------
 sound/pci/ctxfi/cthw20k2.c |   19 ++++++-------------
 2 files changed, 12 insertions(+), 26 deletions(-)

--- a/sound/pci/ctxfi/cthw20k1.c
+++ b/sound/pci/ctxfi/cthw20k1.c
@@ -27,12 +27,6 @@
 #include "cthw20k1.h"
 #include "ct20k1reg.h"
 
-#if BITS_PER_LONG == 32
-#define CT_XFI_DMA_MASK		DMA_BIT_MASK(32) /* 32 bit PTE */
-#else
-#define CT_XFI_DMA_MASK		DMA_BIT_MASK(64) /* 64 bit PTE */
-#endif
-
 struct hw20k1 {
 	struct hw hw;
 	spinlock_t reg_20k1_lock;
@@ -1904,19 +1898,18 @@ static int hw_card_start(struct hw *hw)
 {
 	int err;
 	struct pci_dev *pci = hw->pci;
+	const unsigned int dma_bits = BITS_PER_LONG;
 
 	err = pci_enable_device(pci);
 	if (err < 0)
 		return err;
 
 	/* Set DMA transfer mask */
-	if (dma_set_mask(&pci->dev, CT_XFI_DMA_MASK) < 0 ||
-	    dma_set_coherent_mask(&pci->dev, CT_XFI_DMA_MASK) < 0) {
-		dev_err(hw->card->dev,
-			"architecture does not support PCI busmaster DMA with mask 0x%llx\n",
-			CT_XFI_DMA_MASK);
-		err = -ENXIO;
-		goto error1;
+	if (dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
+		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));
+	} else {
+		dma_set_mask(&pci->dev, DMA_BIT_MASK(32));
+		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(32));
 	}
 
 	if (!hw->io_base) {
--- a/sound/pci/ctxfi/cthw20k2.c
+++ b/sound/pci/ctxfi/cthw20k2.c
@@ -26,12 +26,6 @@
 #include "cthw20k2.h"
 #include "ct20k2reg.h"
 
-#if BITS_PER_LONG == 32
-#define CT_XFI_DMA_MASK		DMA_BIT_MASK(32) /* 32 bit PTE */
-#else
-#define CT_XFI_DMA_MASK		DMA_BIT_MASK(64) /* 64 bit PTE */
-#endif
-
 struct hw20k2 {
 	struct hw hw;
 	/* for i2c */
@@ -2029,19 +2023,18 @@ static int hw_card_start(struct hw *hw)
 	int err = 0;
 	struct pci_dev *pci = hw->pci;
 	unsigned int gctl;
+	const unsigned int dma_bits = BITS_PER_LONG;
 
 	err = pci_enable_device(pci);
 	if (err < 0)
 		return err;
 
 	/* Set DMA transfer mask */
-	if (dma_set_mask(&pci->dev, CT_XFI_DMA_MASK) < 0 ||
-	    dma_set_coherent_mask(&pci->dev, CT_XFI_DMA_MASK) < 0) {
-		dev_err(hw->card->dev,
-			"architecture does not support PCI busmaster DMA with mask 0x%llx\n",
-			CT_XFI_DMA_MASK);
-		err = -ENXIO;
-		goto error1;
+	if (!dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
+		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));
+	} else {
+		dma_set_mask(&pci->dev, DMA_BIT_MASK(32));
+		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(32));
 	}
 
 	if (!hw->io_base) {


Patches currently in stable-queue which might be from tiwai@suse.de are

queue-4.4/alsa-hda-add-subwoofer-support-for-dell-inspiron-17-7000-gaming.patch
queue-4.4/alsa-seq-fix-link-corruption-by-event-error-handling.patch
queue-4.4/alsa-hda-fix-micmute-hotkey-problem-for-a-lenovo-aio-machine.patch
queue-4.4/alsa-ctxfi-fallback-dma-mask-to-32bit.patch
queue-4.4/alsa-timer-reject-user-params-with-too-small-ticks.patch
queue-4.4/alsa-hda-fix-lewisburg-audio-issue.patch
queue-4.4/alsa-hda-realtek-cannot-adjust-speaker-s-volume-on-a-dell-aio.patch

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

* Re: Patch "ALSA: ctxfi: Fallback DMA mask to 32bit" has been added to the 4.4-stable tree
  2017-03-08 10:27 Patch "ALSA: ctxfi: Fallback DMA mask to 32bit" has been added to the 4.4-stable tree gregkh
@ 2017-03-11 15:28 ` Jiri Slaby
  2017-03-12  5:20   ` Greg KH
  0 siblings, 1 reply; 5+ messages in thread
From: Jiri Slaby @ 2017-03-11 15:28 UTC (permalink / raw)
  To: gregkh, tiwai; +Cc: stable, stable-commits

On 03/08/2017, 11:27 AM, gregkh@linuxfoundation.org wrote:
> From 15c75b09f8d190f89ab4db463b87d411ca349dfe Mon Sep 17 00:00:00 2001
> From: Takashi Iwai <tiwai@suse.de>
> Date: Tue, 28 Feb 2017 17:16:48 +0100
> Subject: ALSA: ctxfi: Fallback DMA mask to 32bit
> 
> From: Takashi Iwai <tiwai@suse.de>
> 
> commit 15c75b09f8d190f89ab4db463b87d411ca349dfe upstream.
> 
> Currently ctxfi driver tries to set only the 64bit DMA mask on 64bit
> architectures, and bails out if it fails.  This causes a problem on
> some platforms since the 64bit DMA isn't always guaranteed.  We should
> fall back to the default 32bit DMA when 64bit DMA fails.
> 
> Fixes: 6d74b86d3c0f ("ALSA: ctxfi - Allow 64bit DMA")
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
...
> @@ -1904,19 +1898,18 @@ static int hw_card_start(struct hw *hw)
>  {
>  	int err;
>  	struct pci_dev *pci = hw->pci;
> +	const unsigned int dma_bits = BITS_PER_LONG;
>  
>  	err = pci_enable_device(pci);
>  	if (err < 0)
>  		return err;
>  
>  	/* Set DMA transfer mask */
> -	if (dma_set_mask(&pci->dev, CT_XFI_DMA_MASK) < 0 ||
> -	    dma_set_coherent_mask(&pci->dev, CT_XFI_DMA_MASK) < 0) {
> -		dev_err(hw->card->dev,
> -			"architecture does not support PCI busmaster DMA with mask 0x%llx\n",
> -			CT_XFI_DMA_MASK);
> -		err = -ENXIO;
> -		goto error1;
> +	if (dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {

I believe the condition is inverted here.

> +		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));
> +	} else {
> +		dma_set_mask(&pci->dev, DMA_BIT_MASK(32));
> +		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(32));

thanks,
-- 
js
suse labs

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

* Re: Patch "ALSA: ctxfi: Fallback DMA mask to 32bit" has been added to the 4.4-stable tree
  2017-03-11 15:28 ` Jiri Slaby
@ 2017-03-12  5:20   ` Greg KH
  2017-03-12  8:30     ` Jiri Slaby
  0 siblings, 1 reply; 5+ messages in thread
From: Greg KH @ 2017-03-12  5:20 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: tiwai, stable, stable-commits

On Sat, Mar 11, 2017 at 04:28:53PM +0100, Jiri Slaby wrote:
> On 03/08/2017, 11:27 AM, gregkh@linuxfoundation.org wrote:
> > From 15c75b09f8d190f89ab4db463b87d411ca349dfe Mon Sep 17 00:00:00 2001
> > From: Takashi Iwai <tiwai@suse.de>
> > Date: Tue, 28 Feb 2017 17:16:48 +0100
> > Subject: ALSA: ctxfi: Fallback DMA mask to 32bit
> > 
> > From: Takashi Iwai <tiwai@suse.de>
> > 
> > commit 15c75b09f8d190f89ab4db463b87d411ca349dfe upstream.
> > 
> > Currently ctxfi driver tries to set only the 64bit DMA mask on 64bit
> > architectures, and bails out if it fails.  This causes a problem on
> > some platforms since the 64bit DMA isn't always guaranteed.  We should
> > fall back to the default 32bit DMA when 64bit DMA fails.
> > 
> > Fixes: 6d74b86d3c0f ("ALSA: ctxfi - Allow 64bit DMA")
> > Signed-off-by: Takashi Iwai <tiwai@suse.de>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ...
> > @@ -1904,19 +1898,18 @@ static int hw_card_start(struct hw *hw)
> >  {
> >  	int err;
> >  	struct pci_dev *pci = hw->pci;
> > +	const unsigned int dma_bits = BITS_PER_LONG;
> >  
> >  	err = pci_enable_device(pci);
> >  	if (err < 0)
> >  		return err;
> >  
> >  	/* Set DMA transfer mask */
> > -	if (dma_set_mask(&pci->dev, CT_XFI_DMA_MASK) < 0 ||
> > -	    dma_set_coherent_mask(&pci->dev, CT_XFI_DMA_MASK) < 0) {
> > -		dev_err(hw->card->dev,
> > -			"architecture does not support PCI busmaster DMA with mask 0x%llx\n",
> > -			CT_XFI_DMA_MASK);
> > -		err = -ENXIO;
> > -		goto error1;
> > +	if (dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
> 
> I believe the condition is inverted here.
> 
> > +		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));
> > +	} else {
> > +		dma_set_mask(&pci->dev, DMA_BIT_MASK(32));
> > +		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(32));

As this matches what is in Linus's tree, that means I didn't mess up the
backport :)

But I don't understand the issue, what is wrong here?  Should it try 32
first?

Takashi, any thoughts?

thanks,

greg k-h

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

* Re: Patch "ALSA: ctxfi: Fallback DMA mask to 32bit" has been added to the 4.4-stable tree
  2017-03-12  5:20   ` Greg KH
@ 2017-03-12  8:30     ` Jiri Slaby
  2017-03-20  6:36       ` Takashi Iwai
  0 siblings, 1 reply; 5+ messages in thread
From: Jiri Slaby @ 2017-03-12  8:30 UTC (permalink / raw)
  To: Greg KH; +Cc: tiwai, stable, stable-commits

On 03/12/2017, 06:20 AM, Greg KH wrote:
> On Sat, Mar 11, 2017 at 04:28:53PM +0100, Jiri Slaby wrote:
>> On 03/08/2017, 11:27 AM, gregkh@linuxfoundation.org wrote:
>>> From 15c75b09f8d190f89ab4db463b87d411ca349dfe Mon Sep 17 00:00:00 2001
>>> From: Takashi Iwai <tiwai@suse.de>
>>> Date: Tue, 28 Feb 2017 17:16:48 +0100
>>> Subject: ALSA: ctxfi: Fallback DMA mask to 32bit
>>>
>>> From: Takashi Iwai <tiwai@suse.de>
>>>
>>> commit 15c75b09f8d190f89ab4db463b87d411ca349dfe upstream.
>>>
>>> Currently ctxfi driver tries to set only the 64bit DMA mask on 64bit
>>> architectures, and bails out if it fails.  This causes a problem on
>>> some platforms since the 64bit DMA isn't always guaranteed.  We should
>>> fall back to the default 32bit DMA when 64bit DMA fails.
>>>
>>> Fixes: 6d74b86d3c0f ("ALSA: ctxfi - Allow 64bit DMA")
>>> Signed-off-by: Takashi Iwai <tiwai@suse.de>
>>> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> ...
>>> @@ -1904,19 +1898,18 @@ static int hw_card_start(struct hw *hw)
>>>  {
>>>  	int err;
>>>  	struct pci_dev *pci = hw->pci;
>>> +	const unsigned int dma_bits = BITS_PER_LONG;
>>>  
>>>  	err = pci_enable_device(pci);
>>>  	if (err < 0)
>>>  		return err;
>>>  
>>>  	/* Set DMA transfer mask */
>>> -	if (dma_set_mask(&pci->dev, CT_XFI_DMA_MASK) < 0 ||
>>> -	    dma_set_coherent_mask(&pci->dev, CT_XFI_DMA_MASK) < 0) {
>>> -		dev_err(hw->card->dev,
>>> -			"architecture does not support PCI busmaster DMA with mask 0x%llx\n",
>>> -			CT_XFI_DMA_MASK);
>>> -		err = -ENXIO;
>>> -		goto error1;
>>> +	if (dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
>>
>> I believe the condition is inverted here.
>>
>>> +		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));
>>> +	} else {
>>> +		dma_set_mask(&pci->dev, DMA_BIT_MASK(32));
>>> +		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(32));
> 
> As this matches what is in Linus's tree, that means I didn't mess up the
> backport :)

Sure, I didn't mean to point out your failure, rather Takashi wrote the
check wrong :). I found it in 4.4 patches while applying them, so I
replied to that particular one.

> But I don't understand the issue, what is wrong here?  Should it try 32
> first?

It should be:
dma_set_mask(dma_bits) fails => fall back to 32 bits
dma_set_mask(dma_bits) does not fail => set also the coherent mask

As it stands now, it is the opposite.

> Takashi, any thoughts?

IMO, it should write:
> if (!dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
>    dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));

thanks,
-- 
js
suse labs

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

* Re: Patch "ALSA: ctxfi: Fallback DMA mask to 32bit" has been added to the 4.4-stable tree
  2017-03-12  8:30     ` Jiri Slaby
@ 2017-03-20  6:36       ` Takashi Iwai
  0 siblings, 0 replies; 5+ messages in thread
From: Takashi Iwai @ 2017-03-20  6:36 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: Greg KH, stable, stable-commits

On Sun, 12 Mar 2017 09:30:47 +0100,
Jiri Slaby wrote:
> 
> On 03/12/2017, 06:20 AM, Greg KH wrote:
> > On Sat, Mar 11, 2017 at 04:28:53PM +0100, Jiri Slaby wrote:
> >> On 03/08/2017, 11:27 AM, gregkh@linuxfoundation.org wrote:
> >>> From 15c75b09f8d190f89ab4db463b87d411ca349dfe Mon Sep 17 00:00:00 2001
> >>> From: Takashi Iwai <tiwai@suse.de>
> >>> Date: Tue, 28 Feb 2017 17:16:48 +0100
> >>> Subject: ALSA: ctxfi: Fallback DMA mask to 32bit
> >>>
> >>> From: Takashi Iwai <tiwai@suse.de>
> >>>
> >>> commit 15c75b09f8d190f89ab4db463b87d411ca349dfe upstream.
> >>>
> >>> Currently ctxfi driver tries to set only the 64bit DMA mask on 64bit
> >>> architectures, and bails out if it fails.  This causes a problem on
> >>> some platforms since the 64bit DMA isn't always guaranteed.  We should
> >>> fall back to the default 32bit DMA when 64bit DMA fails.
> >>>
> >>> Fixes: 6d74b86d3c0f ("ALSA: ctxfi - Allow 64bit DMA")
> >>> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> >>> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> >> ...
> >>> @@ -1904,19 +1898,18 @@ static int hw_card_start(struct hw *hw)
> >>>  {
> >>>  	int err;
> >>>  	struct pci_dev *pci = hw->pci;
> >>> +	const unsigned int dma_bits = BITS_PER_LONG;
> >>>  
> >>>  	err = pci_enable_device(pci);
> >>>  	if (err < 0)
> >>>  		return err;
> >>>  
> >>>  	/* Set DMA transfer mask */
> >>> -	if (dma_set_mask(&pci->dev, CT_XFI_DMA_MASK) < 0 ||
> >>> -	    dma_set_coherent_mask(&pci->dev, CT_XFI_DMA_MASK) < 0) {
> >>> -		dev_err(hw->card->dev,
> >>> -			"architecture does not support PCI busmaster DMA with mask 0x%llx\n",
> >>> -			CT_XFI_DMA_MASK);
> >>> -		err = -ENXIO;
> >>> -		goto error1;
> >>> +	if (dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
> >>
> >> I believe the condition is inverted here.
> >>
> >>> +		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));
> >>> +	} else {
> >>> +		dma_set_mask(&pci->dev, DMA_BIT_MASK(32));
> >>> +		dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(32));
> > 
> > As this matches what is in Linus's tree, that means I didn't mess up the
> > backport :)
> 
> Sure, I didn't mean to point out your failure, rather Takashi wrote the
> check wrong :).

Sorry for the late response, as I've been on vacation over two weeks.

And another sorry about the patch -- it's simply an incorrect cut &
paste & modify sequence.

I'll queue up the correction patch for the next 4.11-rc soon later.


thanks,

Takashi

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

end of thread, other threads:[~2017-03-20  6:38 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-08 10:27 Patch "ALSA: ctxfi: Fallback DMA mask to 32bit" has been added to the 4.4-stable tree gregkh
2017-03-11 15:28 ` Jiri Slaby
2017-03-12  5:20   ` Greg KH
2017-03-12  8:30     ` Jiri Slaby
2017-03-20  6:36       ` Takashi Iwai

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.