Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Jun 2015 00:14:52 +0000
From:      "zbb (Zbigniew Bodek)" <phabric-noreply@FreeBSD.org>
To:        freebsd-arm@freebsd.org
Subject:   [Differential] [Request, 34 lines] D2701: Add options to dmb() and dsb() macros
Message-ID:  <differential-rev-PHID-DREV-kl3ls7rde2bkjzreqxfo-req@FreeBSD.org>

next in thread | raw e-mail | index | archive | help

--b1_264905771b061f24485bca16fcb9f0a4
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

zbb created this revision.
zbb added reviewers: andrew, emaste, imp, ian.
zbb added a subscriber: freebsd-arm.
zbb set the repository for this revision to rS FreeBSD src repository.
Herald added subscribers: imp, andrew, emaste.

REVISION SUMMARY
  Using plain dsb()/dmb() as full system barriers is usually to much.
  Adding proper options to those barriers (instead of full system - sy)
  will most likely reduce the cost of the instructions and will benefit
  in performance improvement.
  This commit adds options to barrier macro definitions.
  All previously set barriers are as they were (full system barriers) but
  this approach should be revised in the future.
  
  Obtained from: Semihalf
  Sponsored by:  The FreeBSD Foundation

REPOSITORY
  rS FreeBSD src repository

REVISION DETAIL
  https://reviews.freebsd.org/D2701

AFFECTED FILES
  sys/arm64/arm64/db_interface.c
  sys/arm64/arm64/vfp.c
  sys/arm64/include/atomic.h

CHANGE DETAILS
  diff --git a/sys/arm64/include/atomic.h b/sys/arm64/include/atomic.h
  --- a/sys/arm64/include/atomic.h
  +++ b/sys/arm64/include/atomic.h
  @@ -29,13 +29,29 @@
   #ifndef	_MACHINE_ATOMIC_H_
   #define	_MACHINE_ATOMIC_H_
   
  -#define	isb()  __asm __volatile("isb" : : : "memory")
  -#define	dsb()  __asm __volatile("dsb sy" : : : "memory")
  -#define	dmb()  __asm __volatile("dmb sy" : : : "memory")
  +#define isb()  __asm __volatile("isb" : : : "memory")
   
  -#define	mb()   dmb()
  -#define	wmb()  dmb()
  -#define	rmb()  dmb()
  +/*
  + * Options for DMB and DSB:
  + *	oshld	Outer Shareable, load
  + *	oshst	Outer Shareable, store
  + *	osh	Outer Shareable, all
  + *	nshld	Non-shareable, load
  + *	nshst	Non-shareable, store
  + *	nsh	Non-shareable, all
  + *	ishld	Inner Shareable, load
  + *	ishst	Inner Shareable, store
  + *	ish	Inner Shareable, all
  + *	ld	Full system, load
  + *	st	Full system, store
  + *	sy	Full system, all
  + */
  +#define dsb(opt)  __asm __volatile("dsb " __STRING(opt) : : : "memory")
  +#define dmb(opt)  __asm __volatile("dmb " __STRING(opt) : : : "memory")
  +
  +#define mb()   dmb(sy)	/* Full system memory barrier all */
  +#define wmb()  dmb(st)	/* Full system memory barrier store */
  +#define rmb()  dmb(ld)	/* Full system memory barrier load */
   
   static __inline void
   atomic_add_32(volatile uint32_t *p, uint32_t val)
  diff --git a/sys/arm64/arm64/vfp.c b/sys/arm64/arm64/vfp.c
  --- a/sys/arm64/arm64/vfp.c
  +++ b/sys/arm64/arm64/vfp.c
  @@ -120,7 +120,7 @@
   		td->td_pcb->pcb_fpcr = fpcr;
   		td->td_pcb->pcb_fpsr = fpsr;
   
  -		dsb();
  +		dsb(sy);
   		vfp_disable();
   	}
   	critical_exit();
  diff --git a/sys/arm64/arm64/db_interface.c b/sys/arm64/arm64/db_interface.c
  --- a/sys/arm64/arm64/db_interface.c
  +++ b/sys/arm64/arm64/db_interface.c
  @@ -157,11 +157,11 @@
   		*dst++ = *data++;
   	}
   
  -	dsb();
  +	dsb(sy);
   	/* Clean D-cache and invalidate I-cache */
   	cpu_dcache_wb_range(addr, (vm_size_t)size);
   	cpu_icache_sync_range(addr, (vm_size_t)size);
  -	dsb();
  +	dsb(sy);
   	isb();
   
   	return (0);

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: zbb, andrew, emaste, imp, ian
Cc: emaste, andrew, imp, freebsd-arm

--b1_264905771b061f24485bca16fcb9f0a4
Content-Type: text/x-patch; charset=utf-8; name="D2701.5849.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D2701.5849.patch"

ZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9pbmNsdWRlL2F0b21pYy5oIGIvc3lzL2FybTY0L2luY2x1
ZGUvYXRvbWljLmgKLS0tIGEvc3lzL2FybTY0L2luY2x1ZGUvYXRvbWljLmgKKysrIGIvc3lzL2Fy
bTY0L2luY2x1ZGUvYXRvbWljLmgKQEAgLTI5LDEzICsyOSwyOSBAQAogI2lmbmRlZglfTUFDSElO
RV9BVE9NSUNfSF8KICNkZWZpbmUJX01BQ0hJTkVfQVRPTUlDX0hfCiAKLSNkZWZpbmUJaXNiKCkg
IF9fYXNtIF9fdm9sYXRpbGUoImlzYiIgOiA6IDogIm1lbW9yeSIpCi0jZGVmaW5lCWRzYigpICBf
X2FzbSBfX3ZvbGF0aWxlKCJkc2Igc3kiIDogOiA6ICJtZW1vcnkiKQotI2RlZmluZQlkbWIoKSAg
X19hc20gX192b2xhdGlsZSgiZG1iIHN5IiA6IDogOiAibWVtb3J5IikKKyNkZWZpbmUgaXNiKCkg
IF9fYXNtIF9fdm9sYXRpbGUoImlzYiIgOiA6IDogIm1lbW9yeSIpCiAKLSNkZWZpbmUJbWIoKSAg
IGRtYigpCi0jZGVmaW5lCXdtYigpICBkbWIoKQotI2RlZmluZQlybWIoKSAgZG1iKCkKKy8qCisg
KiBPcHRpb25zIGZvciBETUIgYW5kIERTQjoKKyAqCW9zaGxkCU91dGVyIFNoYXJlYWJsZSwgbG9h
ZAorICoJb3Noc3QJT3V0ZXIgU2hhcmVhYmxlLCBzdG9yZQorICoJb3NoCU91dGVyIFNoYXJlYWJs
ZSwgYWxsCisgKgluc2hsZAlOb24tc2hhcmVhYmxlLCBsb2FkCisgKgluc2hzdAlOb24tc2hhcmVh
YmxlLCBzdG9yZQorICoJbnNoCU5vbi1zaGFyZWFibGUsIGFsbAorICoJaXNobGQJSW5uZXIgU2hh
cmVhYmxlLCBsb2FkCisgKglpc2hzdAlJbm5lciBTaGFyZWFibGUsIHN0b3JlCisgKglpc2gJSW5u
ZXIgU2hhcmVhYmxlLCBhbGwKKyAqCWxkCUZ1bGwgc3lzdGVtLCBsb2FkCisgKglzdAlGdWxsIHN5
c3RlbSwgc3RvcmUKKyAqCXN5CUZ1bGwgc3lzdGVtLCBhbGwKKyAqLworI2RlZmluZSBkc2Iob3B0
KSAgX19hc20gX192b2xhdGlsZSgiZHNiICIgX19TVFJJTkcob3B0KSA6IDogOiAibWVtb3J5IikK
KyNkZWZpbmUgZG1iKG9wdCkgIF9fYXNtIF9fdm9sYXRpbGUoImRtYiAiIF9fU1RSSU5HKG9wdCkg
OiA6IDogIm1lbW9yeSIpCisKKyNkZWZpbmUgbWIoKSAgIGRtYihzeSkJLyogRnVsbCBzeXN0ZW0g
bWVtb3J5IGJhcnJpZXIgYWxsICovCisjZGVmaW5lIHdtYigpICBkbWIoc3QpCS8qIEZ1bGwgc3lz
dGVtIG1lbW9yeSBiYXJyaWVyIHN0b3JlICovCisjZGVmaW5lIHJtYigpICBkbWIobGQpCS8qIEZ1
bGwgc3lzdGVtIG1lbW9yeSBiYXJyaWVyIGxvYWQgKi8KIAogc3RhdGljIF9faW5saW5lIHZvaWQK
IGF0b21pY19hZGRfMzIodm9sYXRpbGUgdWludDMyX3QgKnAsIHVpbnQzMl90IHZhbCkKZGlmZiAt
LWdpdCBhL3N5cy9hcm02NC9hcm02NC92ZnAuYyBiL3N5cy9hcm02NC9hcm02NC92ZnAuYwotLS0g
YS9zeXMvYXJtNjQvYXJtNjQvdmZwLmMKKysrIGIvc3lzL2FybTY0L2FybTY0L3ZmcC5jCkBAIC0x
MjAsNyArMTIwLDcgQEAKIAkJdGQtPnRkX3BjYi0+cGNiX2ZwY3IgPSBmcGNyOwogCQl0ZC0+dGRf
cGNiLT5wY2JfZnBzciA9IGZwc3I7CiAKLQkJZHNiKCk7CisJCWRzYihzeSk7CiAJCXZmcF9kaXNh
YmxlKCk7CiAJfQogCWNyaXRpY2FsX2V4aXQoKTsKZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02
NC9kYl9pbnRlcmZhY2UuYyBiL3N5cy9hcm02NC9hcm02NC9kYl9pbnRlcmZhY2UuYwotLS0gYS9z
eXMvYXJtNjQvYXJtNjQvZGJfaW50ZXJmYWNlLmMKKysrIGIvc3lzL2FybTY0L2FybTY0L2RiX2lu
dGVyZmFjZS5jCkBAIC0xNTcsMTEgKzE1NywxMSBAQAogCQkqZHN0KysgPSAqZGF0YSsrOwogCX0K
IAotCWRzYigpOworCWRzYihzeSk7CiAJLyogQ2xlYW4gRC1jYWNoZSBhbmQgaW52YWxpZGF0ZSBJ
LWNhY2hlICovCiAJY3B1X2RjYWNoZV93Yl9yYW5nZShhZGRyLCAodm1fc2l6ZV90KXNpemUpOwog
CWNwdV9pY2FjaGVfc3luY19yYW5nZShhZGRyLCAodm1fc2l6ZV90KXNpemUpOwotCWRzYigpOwor
CWRzYihzeSk7CiAJaXNiKCk7CiAKIAlyZXR1cm4gKDApOwoK


--b1_264905771b061f24485bca16fcb9f0a4--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?differential-rev-PHID-DREV-kl3ls7rde2bkjzreqxfo-req>