public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jon Burgess <jburgess777@googlemail.com>
To: linux-dvb@linuxtv.org, v4l-dvb-maintainer@linuxtv.org
Cc: Markus Rechberger <mrechberger@gmail.com>,
	Gregoire Favre <Gregoire.Favre@gmail.com>,
	linux-kernel@vger.kernel.org, Lee Revell <rlrevell@joe-job.com>
Subject: [PATCH] Re: More than 2Gb problem (dvb related) ?
Date: Sat, 28 Apr 2007 18:17:32 +0100	[thread overview]
Message-ID: <1177780652.7152.14.camel@localhost.localdomain> (raw)
In-Reply-To: <75b66ecd0704271506x595dfb6bqe0ef4fd153818501@mail.gmail.com>

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

On Fri, 2007-04-27 at 18:06 -0400, Lee Revell wrote:
> On 4/27/07, Jon Burgess <jburgess777@googlemail.com> wrote:
> > Interesting - I see similar symptoms after upgrading my PC:
> > * old PC was AMD Athlon 64 3000 w/ 2GB of RAM which had no issues
> > * new PC is a Intel Core 2 Duo w/ 4GB of RAM and fails in the way you
> > describe.
> 
> Driver using an incorrect DMA mask?
> 
> Lee

It appears the problem is that the driver is using streamed PCI and
needs to explicitly sync the data otherwise it breaks when the SWIOTLB
is in use. A call to pci_unmap_sg() was missing too.

This patch is against the current v4l-dvb HG tree.

I've only tested the change with a budget-ci card.

	Jon

Signed-off-by: Jon Burgess <jburgess777@googlemail.com>

[-- Attachment #2: dvb-dma-sync.patch --]
[-- Type: text/x-patch, Size: 2416 bytes --]

diff -r a8b2a0738f4e linux/drivers/media/common/saa7146_core.c
--- a/linux/drivers/media/common/saa7146_core.c	Thu Apr 19 17:07:37 2007 -0300
+++ b/linux/drivers/media/common/saa7146_core.c	Sat Apr 28 17:44:38 2007 +0100
@@ -152,6 +152,7 @@ char *saa7146_vmalloc_build_pgtable(stru
 		return NULL;
 	}
 
+	pt->nents = pages;
 	slen = pci_map_sg(pci,pt->slist,pages,PCI_DMA_FROMDEVICE);
 	if (0 != saa7146_pgtable_build_single(pci, pt, pt->slist, slen)) {
 		return NULL;
@@ -165,6 +166,7 @@ void saa7146_pgtable_free(struct pci_dev
 	if (NULL == pt->cpu)
 		return;
 	pci_free_consistent(pci, pt->size, pt->cpu, pt->dma);
+	pci_unmap_sg(pci, pt->slist, pt->nents, PCI_DMA_FROMDEVICE);
 	pt->cpu = NULL;
 	kfree(pt->slist);
 	pt->slist = NULL;
diff -r a8b2a0738f4e linux/drivers/media/dvb/ttpci/av7110.c
--- a/linux/drivers/media/dvb/ttpci/av7110.c	Thu Apr 19 17:07:37 2007 -0300
+++ b/linux/drivers/media/dvb/ttpci/av7110.c	Sat Apr 28 17:10:38 2007 +0100
@@ -1246,6 +1246,9 @@ static void vpeirq(unsigned long data)
 	if (!budget->feeding1 || (newdma == olddma))
 		return;
 
+	/* Ensure streamed PCI data is synced to CPU */
+	pci_dma_sync_sg_for_cpu(budget->dev->pci, budget->pt.slist, budget->pt.nents, PCI_DMA_FROMDEVICE);
+	
 #if 0 /* keep */
 	/* track rps1 activity */
 	printk("vpeirq: %02x Event Counter 1 0x%04x\n",
diff -r a8b2a0738f4e linux/drivers/media/dvb/ttpci/budget-core.c
--- a/linux/drivers/media/dvb/ttpci/budget-core.c	Thu Apr 19 17:07:37 2007 -0300
+++ b/linux/drivers/media/dvb/ttpci/budget-core.c	Sat Apr 28 17:09:13 2007 +0100
@@ -184,6 +184,9 @@ static void vpeirq(unsigned long data)
 	if (budget->feeding == 0 || newdma == olddma)
 		return;
 
+	/* Ensure streamed PCI data is synced to CPU */
+	pci_dma_sync_sg_for_cpu(budget->dev->pci, budget->pt.slist, budget->pt.nents, PCI_DMA_FROMDEVICE);
+	
 	if (newdma > olddma) {	/* no wraparound, dump olddma..newdma */
 		count = newdma - olddma;
 		dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, count / 188);
diff -r a8b2a0738f4e linux/include/media/saa7146.h
--- a/linux/include/media/saa7146.h	Thu Apr 19 17:07:37 2007 -0300
+++ b/linux/include/media/saa7146.h	Sat Apr 28 17:27:36 2007 +0100
@@ -70,6 +70,7 @@ struct saa7146_pgtable {
 	unsigned long	offset;
 	/* used for custom pagetables (used for example by budget dvb cards) */
 	struct scatterlist *slist;
+	int             nents;
 };
 
 struct saa7146_pci_extension_data {

  parent reply	other threads:[~2007-04-28 17:17 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-27 11:10 More than 2Gb problem (dvb related) ? Gregoire Favre
2007-04-27 20:46 ` Markus Rechberger
2007-04-27 21:03   ` Gregoire Favre
2007-04-27 22:00   ` [linux-dvb] " Jon Burgess
2007-04-27 22:06     ` Lee Revell
2007-04-27 22:37       ` Jon Burgess
2007-04-28 17:17       ` Jon Burgess [this message]
2007-04-28 20:14         ` [PATCH] " Jon Burgess
2007-04-29 14:07           ` Gregoire Favre
2007-04-30  0:22           ` [linux-dvb] " Oliver Endriss
2007-04-30 16:52           ` Gregoire Favre
2007-04-30 18:05             ` Jon Burgess
2007-05-01  9:39               ` Gregoire Favre
2007-05-01  9:41               ` Gregoire Favre
2007-05-01 22:11                 ` Jon Burgess
2007-05-02  9:35                   ` Andi Kleen
2007-05-02 12:17                     ` Gregoire Favre
2007-05-05  7:36                     ` Gregoire Favre
2007-05-01 15:58         ` [linux-dvb] " Oliver Endriss
2007-05-01 20:03           ` Gregoire Favre

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1177780652.7152.14.camel@localhost.localdomain \
    --to=jburgess777@googlemail.com \
    --cc=Gregoire.Favre@gmail.com \
    --cc=linux-dvb@linuxtv.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mrechberger@gmail.com \
    --cc=rlrevell@joe-job.com \
    --cc=v4l-dvb-maintainer@linuxtv.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox