diff options
Diffstat (limited to 'kernel/xpp/xproto.c')
-rw-r--r-- | kernel/xpp/xproto.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/kernel/xpp/xproto.c b/kernel/xpp/xproto.c index 05735e9..348b4b6 100644 --- a/kernel/xpp/xproto.c +++ b/kernel/xpp/xproto.c @@ -93,9 +93,7 @@ const xproto_table_t *xproto_get(xpd_type_t cardtype) } if(xtable) { BUG_ON(!xtable->owner); -#ifdef CONFIG_MODULE_UNLOAD DBG(GENERAL, "%s refcount was %d\n", xtable->name, module_refcount(xtable->owner)); -#endif if(!try_module_get(xtable->owner)) { ERR("%s: try_module_get for %s failed.\n", __FUNCTION__, xtable->name); return NULL; @@ -107,10 +105,8 @@ const xproto_table_t *xproto_get(xpd_type_t cardtype) void xproto_put(const xproto_table_t *xtable) { BUG_ON(!xtable); -#ifdef CONFIG_MODULE_UNLOAD DBG(GENERAL, "%s refcount was %d\n", xtable->name, module_refcount(xtable->owner)); BUG_ON(module_refcount(xtable->owner) <= 0); -#endif module_put(xtable->owner); } @@ -266,7 +262,7 @@ int xframe_receive(xbus_t *xbus, xframe_t *xframe) FREE_RECV_XFRAME(xbus, xframe); return -EPROTO; } - if(!XBUS_GET(xbus)) { + if(XBUS_IS(xbus, DISCONNECTED)) { XBUS_DBG(GENERAL, xbus, "Dropped xframe. Is shutting down.\n"); return -ENODEV; } @@ -274,9 +270,12 @@ int xframe_receive(xbus_t *xbus, xframe_t *xframe) /* * We want to check that xframes do not mix PCM and other commands */ - if(XPACKET_IS_PCM((xpacket_t *)xframe->packets)) - xframe_receive_pcm(xbus, xframe); - else { + if(XPACKET_IS_PCM((xpacket_t *)xframe->packets)) { + if(!XBUS_IS(xbus, READY)) + FREE_RECV_XFRAME(xbus, xframe); + else + xframe_receive_pcm(xbus, xframe); + } else { XBUS_COUNTER(xbus, RX_CMD)++; ret = xframe_receive_cmd(xbus, xframe); } @@ -286,7 +285,6 @@ int xframe_receive(xbus_t *xbus, xframe_t *xframe) now.tv_usec - tv_received.tv_usec; if(usec > xbus->max_rx_process) xbus->max_rx_process = usec; - XBUS_PUT(xbus); return ret; } |