summaryrefslogtreecommitdiff
path: root/nuttx
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2015-01-18 16:58:11 -0600
committerGregory Nutt <gnutt@nuttx.org>2015-01-18 16:58:11 -0600
commit68f03d912d610b651a44352df0a9ea0ba9c5551d (patch)
tree3f45fd72d5ce5f80f7e41a3c84a8429ab12f09f4 /nuttx
parenteed7a6205199631273fbd5563c400fd0159f9750 (diff)
downloadpx4-nuttx-68f03d912d610b651a44352df0a9ea0ba9c5551d.tar.gz
px4-nuttx-68f03d912d610b651a44352df0a9ea0ba9c5551d.tar.bz2
px4-nuttx-68f03d912d610b651a44352df0a9ea0ba9c5551d.zip
Tiva Ethernet: When calling into the stack from the worker thread, it is necessary to have the stack locked
Diffstat (limited to 'nuttx')
-rw-r--r--nuttx/arch/arm/src/tiva/tm4c_ethernet.c12
-rw-r--r--nuttx/drivers/net/skeleton.c12
2 files changed, 24 insertions, 0 deletions
diff --git a/nuttx/arch/arm/src/tiva/tm4c_ethernet.c b/nuttx/arch/arm/src/tiva/tm4c_ethernet.c
index 3ac63ba68..597a08961 100644
--- a/nuttx/arch/arm/src/tiva/tm4c_ethernet.c
+++ b/nuttx/arch/arm/src/tiva/tm4c_ethernet.c
@@ -2050,12 +2050,15 @@ static inline void tiva_interrupt_process(FAR struct tiva_ethmac_s *priv)
static void tiva_interrupt_work(FAR void *arg)
{
FAR struct tiva_ethmac_s *priv = (FAR struct tiva_ethmac_s *)arg;
+ net_lock_t state;
DEBUGASSERT(priv);
/* Process pending Ethernet interrupts */
+ state = net_lock();
tiva_interrupt_process(priv);
+ net_unlock(state);
/* Re-enable Ethernet interrupts at the NVIC */
@@ -2198,10 +2201,13 @@ static inline void tiva_txtimeout_process(FAR struct tiva_ethmac_s *priv)
static void tiva_txtimeout_work(FAR void *arg)
{
FAR struct tiva_ethmac_s *priv = (FAR struct tiva_ethmac_s *)arg;
+ net_lock_t state;
/* Process pending Ethernet interrupts */
+ state = net_lock();
tiva_txtimeout_process(priv);
+ net_unlock(state);
}
#endif
@@ -2347,10 +2353,13 @@ static inline void tiva_poll_process(FAR struct tiva_ethmac_s *priv)
static void tiva_poll_work(FAR void *arg)
{
FAR struct tiva_ethmac_s *priv = (FAR struct tiva_ethmac_s *)arg;
+ net_lock_t state;
/* Perform the poll */
+ state = net_lock();
tiva_poll_process(priv);
+ net_unlock(state);
}
#endif
@@ -2553,10 +2562,13 @@ static inline void tiva_txavail_process(FAR struct tiva_ethmac_s *priv)
static void tiva_txavail_work(FAR void *arg)
{
FAR struct tiva_ethmac_s *priv = (FAR struct tiva_ethmac_s *)arg;
+ net_lock_t state;
/* Perform the poll */
+ state = net_lock();
tiva_txavail_process(priv);
+ net_unlock(state);
}
#endif
diff --git a/nuttx/drivers/net/skeleton.c b/nuttx/drivers/net/skeleton.c
index 86f1f83a1..61ac806d8 100644
--- a/nuttx/drivers/net/skeleton.c
+++ b/nuttx/drivers/net/skeleton.c
@@ -463,10 +463,13 @@ static inline void skel_interrupt_process(FAR struct skel_driver_s *skel)
static void skel_interrupt_work(FAR void *arg)
{
FAR struct skel_driver_s *skel = (FAR struct skel_driver_s *)arg;
+ net_lock_t state;
/* Process pending Ethernet interrupts */
+ state = net_lock();
skel_interrupt_process(skel);
+ net_unlock(state);
/* Re-enable Ethernet interrupts */
@@ -583,10 +586,13 @@ static inline void skel_txtimeout_process(FAR struct skel_driver_s *skel)
static void skel_txtimeout_work(FAR void *arg)
{
FAR struct skel_driver_s *skel = (FAR struct skel_driver_s *)arg;
+ net_lock_t state;
/* Process pending Ethernet interrupts */
+ state = net_lock();
skel_txtimeout_process(skel);
+ net_unlock(state);
}
#endif
@@ -693,10 +699,13 @@ static inline void skel_poll_process(FAR struct skel_driver_s *skel)
static void skel_poll_work(FAR void *arg)
{
FAR struct skel_driver_s *skel = (FAR struct skel_driver_s *)arg;
+ net_lock_t state;
/* Perform the poll */
+ state = net_lock();
skel_poll_process(skel);
+ net_unlock(state);
}
#endif
@@ -884,10 +893,13 @@ static int inline skel_txavail_process(FAR struct skel_driver_s *skel)
static void skel_txavail_work(FAR void *arg)
{
FAR struct skel_driver_s *skel = (FAR struct skel_driver_s *)arg;
+ net_lock_t state;
/* Perform the poll */
+ state = net_lock();
skel_txavail_process(skel);
+ net_unlock(state);
}
#endif