On 02/05/17 10:51, Daniel Hellstrom wrote:
On 2017-05-02 10:27, Sebastian Huber wrote:
On 02/05/17 10:16, Daniel Hellstrom wrote:
On 2017-05-02 10:00, Sebastian Huber wrote:
On 02/05/17 09:32, Daniel Hellstrom wrote:
On 2017-05-02 07:48, Sebastian Huber wrote:
On 13/04/17 21:31, Daniel Hellstrom wrote:
---
c/src/lib/libbsp/sparc/shared/net/greth.c | 134
++++++++++++++++--------------
1 file changed, 71 insertions(+), 63 deletions(-)
diff --git a/c/src/lib/libbsp/sparc/shared/net/greth.c
b/c/src/lib/libbsp/sparc/shared/net/greth.c
index 7726799..9af2de2 100644
--- a/c/src/lib/libbsp/sparc/shared/net/greth.c
+++ b/c/src/lib/libbsp/sparc/shared/net/greth.c
@@ -41,6 +41,18 @@
#include <netinet/in.h>
#include <netinet/if_ether.h>
+#include <rtems/score/isrlock.h> /* spin-lock */
+
+/* map via ISR lock: */
+#define SPIN_DECLARE(lock) ISR_LOCK_MEMBER(lock)
+#define SPIN_INIT(lock, name) _ISR_lock_Initialize(lock, name)
+#define SPIN_LOCK(lock, level) _ISR_lock_Acquire_inline(lock,
&level)
+#define SPIN_LOCK_IRQ(lock, level)
_ISR_lock_ISR_disable_and_acquire(lock, &level)
+#define SPIN_UNLOCK(lock, level) _ISR_lock_Release_inline(lock,
&level)
+#define SPIN_UNLOCK_IRQ(lock, level)
_ISR_lock_Release_and_ISR_enable(lock, &level)
+#define SPIN_IRQFLAGS(k) ISR_lock_Context k
+#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
Could you please use the rtems_interrupt_lock_*() API and not the
internal _ISR_lock_*() stuff.
Thanks. I think the reason for this may come from that the inline
equivalent. I will add a patch which adds inline macros to the
rtems_interrupt_lock interface instead. I can't see any reason why
that can not be supported?
What do you mean with inline equivalent?
I mean we use _ISR_lock_Acquire_inline(lock, &level) from the ISR to
avoid an extra function call. But there is only a
rtems_interrupt_lock_acquire_isr() no
rtems_interrupt_lock_acquire_INLINE_isr() which we would like to use.
Ok, but does this extra function call really matter? If you think so,
then please add the *_inline variants to the rtems_interrupt_lock_*
API (with tests) and document it in the user manual.
Ok. I will add that patch afterwards, first I will fix our patches to
use the correct existing macros.
Ok. You can commit the patch set from my point of view (with the minor
fixes).
On SPARC it would be nice to avoid the extra window SAVE within the ISR.
Since, greth_interrupt() conditionally calls rtems_bsdnet_event_send()
the greth_interrupt() already uses a SAVE, the SMP lock acquire is a
tail function.
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.hu...@embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel