summaryrefslogtreecommitdiff
path: root/kernel/xpp/xproto.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/xpp/xproto.c')
-rw-r--r--kernel/xpp/xproto.c16
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;
}