Skip site navigation (1)Skip section navigation (2)
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>