Date: Mon, 6 Sep 2010 13:04:18 +0530 From: "Jayachandran C." <c.jayachandran@gmail.com> To: freebsd-mips@freebsd.org Cc: gonzo@freebsd.org Subject: Re: busdma_machdep.c with more than 512M memory Message-ID: <AANLkTim2gqj=cbgM35rD5oyMD43rWFY1cjyY4A4CoR99@mail.gmail.com> In-Reply-To: <AANLkTimjmpOBOAncY9K9AhCodvp27t=XTQ9qZp4q8%2Bvv@mail.gmail.com> References: <AANLkTimjmpOBOAncY9K9AhCodvp27t=XTQ9qZp4q8%2Bvv@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--0016e64c25c6e6d5b2048f924ed0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Wed, Sep 1, 2010 at 12:37 PM, Jayachandran C. <c.jayachandran@gmail.com> wrote: > I was looking at a few crashes I see with PCI drivers, and I think it > is caused by an issue in busdma_machdep.c where physical address is > directly converted using MIPS_PHYS_TO_KSEG1. I have not looked at it > in detail, but it looks obviously wrong. > > Any suggestions on how to fix thiis is welcome, it probably needs an > uncached TLB entry. On 64bit we could use XKPHYS uncached. > > > --- > =A0632 =A0 =A0 =A0 =A0 if (newmap->flags & DMAMAP_UNCACHEABLE) { > =A0633 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 void *tmpaddr =3D (void *)*vaddr; > =A0634 > =A0635 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (tmpaddr) { > =A0636 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 tmpaddr =3D (void > *)MIPS_PHYS_TO_KSEG1(vtophys(tmpaddr)); > =A0637 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 newmap->origbuffer= =3D *vaddr; > =A0638 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 newmap->allocbuffe= r =3D tmpaddr; > =A0639 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mips_dcache_wbinv_= range((vm_offset_t)*vaddr, > =A0640 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 dmat->maxs= ize); > =A0641 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 *vaddr =3D tmpaddr= ; > =A0642 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } > --- > 1361 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 bpage->busaddr =3D pmap_kextract(bpa= ge->vaddr); > 1362 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 bpage->vaddr_nocache =3D > 1363 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (vm_offset_t)MIPS_PHYS_TO_KS= EG1(bpage->busaddr); > 1364 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mtx_lock(&bounce_lock); Based on Juli's suggestion, I have a patch (attached) to switch the calls to pmap_mapdev/pmap_unmapdev. Seems to work for me now, please review. Thanks, JC. --0016e64c25c6e6d5b2048f924ed0 Content-Type: text/x-patch; charset=US-ASCII; name="busdma.patch" Content-Disposition: attachment; filename="busdma.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gdr0mhbi0 SW5kZXg6IHN5cy9taXBzL21pcHMvYnVzZG1hX21hY2hkZXAuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv bWlwcy9taXBzL2J1c2RtYV9tYWNoZGVwLmMJKHJldmlzaW9uIDIxMTk4NCkKKysrIHN5cy9taXBz L21pcHMvYnVzZG1hX21hY2hkZXAuYwkod29ya2luZyBjb3B5KQpAQCAtNjIwLDYgKzYyMCw3IEBA CiAgICAgICAgICAgICAgICAgICAgIDB1bCwgZG1hdC0+bG93YWRkciwgZG1hdC0+YWxpZ25tZW50 PyBkbWF0LT5hbGlnbm1lbnQgOiAxdWwsCiAgICAgICAgICAgICAgICAgICAgIGRtYXQtPmJvdW5k YXJ5KTsKICAgICAgICAgfQorCiAgICAgICAgIGlmICgqdmFkZHIgPT0gTlVMTCkgewogCQlpZiAo bmV3bWFwICE9IE5VTEwpIHsKIAkJCV9idXNkbWFfZnJlZV9kbWFtYXAobmV3bWFwKTsKQEAgLTYz Myw3ICs2MzQsOCBAQAogCQl2b2lkICp0bXBhZGRyID0gKHZvaWQgKikqdmFkZHI7CiAKIAkJaWYg KHRtcGFkZHIpIHsKLQkJCXRtcGFkZHIgPSAodm9pZCAqKU1JUFNfUEhZU19UT19LU0VHMSh2dG9w aHlzKHRtcGFkZHIpKTsKKwkJCXByaW50ZigidW5jYWNoZSBtYXBwaW5nICVwICVseFxuIiwgdG1w YWRkciwgKHVfbG9uZyl2dG9waHlzKHRtcGFkZHIpKTsKKwkJCXRtcGFkZHIgPSAodm9pZCAqKXBt YXBfbWFwZGV2KHZ0b3BoeXModG1wYWRkciksIGRtYXQtPm1heHNpemUpOwogCQkJbmV3bWFwLT5v cmlnYnVmZmVyID0gKnZhZGRyOwogCQkJbmV3bWFwLT5hbGxvY2J1ZmZlciA9IHRtcGFkZHI7CiAJ CQltaXBzX2RjYWNoZV93Ymludl9yYW5nZSgodm1fb2Zmc2V0X3QpKnZhZGRyLApAQCAtNjYwLDYg KzY2Miw5IEBACiAJCXZhZGRyID0gbWFwLT5vcmlnYnVmZmVyOwogCX0KIAorCWlmIChtYXAtPmZs YWdzICYgRE1BTUFQX1VOQ0FDSEVBQkxFKSAKKwkJcG1hcF91bm1hcGRldigodm1fb2Zmc2V0X3Qp bWFwLT5hbGxvY2J1ZmZlciwgZG1hdC0+bWF4c2l6ZSk7CisKICAgICAgICAgaWYgKG1hcC0+Zmxh Z3MgJiBETUFNQVBfTUFMTE9DVVNFRCkKIAkJZnJlZSh2YWRkciwgTV9ERVZCVUYpOwogICAgICAg ICBlbHNlCkBAIC0xMzU5LDggKzEzNjQsOSBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnBhZ2UtPmJ1 c2FkZHIgPSBwbWFwX2tleHRyYWN0KGJwYWdlLT52YWRkcik7Ci0JCWJwYWdlLT52YWRkcl9ub2Nh Y2hlID0gCi0JCSAgICAodm1fb2Zmc2V0X3QpTUlQU19QSFlTX1RPX0tTRUcxKGJwYWdlLT5idXNh ZGRyKTsKKwkJYnBhZ2UtPnZhZGRyX25vY2FjaGUgPSAodm1fb2Zmc2V0X3QpcG1hcF9tYXBkZXYo YnBhZ2UtPmJ1c2FkZHIsIFBBR0VfU0laRSk7CisJCXByaW50ZigiYm91bmNlIG1hcHBpbmcgJXAg JXBcbiIsICh2b2lkICopYnBhZ2UtPmJ1c2FkZHIsCisJCSAgICAodm9pZCAqKWJwYWdlLT52YWRk cl9ub2NhY2hlKTsKIAkJbXR4X2xvY2soJmJvdW5jZV9sb2NrKTsKIAkJU1RBSUxRX0lOU0VSVF9U QUlMKCZiei0+Ym91bmNlX3BhZ2VfbGlzdCwgYnBhZ2UsIGxpbmtzKTsKIAkJdG90YWxfYnBhZ2Vz Kys7Cg== --0016e64c25c6e6d5b2048f924ed0--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTim2gqj=cbgM35rD5oyMD43rWFY1cjyY4A4CoR99>