diff options
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | xpp/xbus-core.c | 21 |
2 files changed, 18 insertions, 9 deletions
@@ -165,16 +165,16 @@ ifeq ($(HOTPLUG_FIRMWARE),yes) CFLAGS+=-DHOTPLUG_FIRMWARE endif -# Also build xpp in the subdirectory xpp/ . But only for >=2.6.10 and only +# Also build xpp in the subdirectory xpp/ . But only for >=2.6.9 and only # for i386 or x86_64. On other archs the module will probably build but panic. # These lines are only meaningful when this Makefile is used as kconfig for # 2.6 build -ifneq (,$(shell [ 0$(SUBLEVEL) -ge 10 ] && [ "$(ARCH)" = 'i386' ] && [ "x$(BUILD_XPP)" = "xyes" ] && echo 1)) +ifneq (,$(shell [ 0$(SUBLEVEL) -ge 9 ] && [ "$(ARCH)" = 'i386' ] && [ "x$(BUILD_XPP)" = "xyes" ] && echo 1)) obj-m+=xpp/ endif -ifneq (,$(shell [ 0$(SUBLEVEL) -ge 10 ] && [ "$(ARCH)" = 'x86_64' ] && [ "x$(BUILD_XPP)" = "xyes" ] && echo 1)) +ifneq (,$(shell [ 0$(SUBLEVEL) -ge 9 ] && [ "$(ARCH)" = 'x86_64' ] && [ "x$(BUILD_XPP)" = "xyes" ] && echo 1)) obj-m+=xpp/ endif diff --git a/xpp/xbus-core.c b/xpp/xbus-core.c index 59db079..9f3b24b 100644 --- a/xpp/xbus-core.c +++ b/xpp/xbus-core.c @@ -69,7 +69,6 @@ DEF_PARM(uint, poll_timeout, POLL_TIMEOUT,"Timeout (in jiffies) waiting for unit static DEVICE_ATTR_FUNC(connector_show, dev, buf); static DEVICE_ATTR_FUNC(status_show, dev, buf); -static int xbus_poll(void *data); static void xbus_release(struct device *dev); static int xbus_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data); static int xbus_read_waitfor_xpds(char *page, char **start, off_t off, int count, int *eof, void *data); @@ -209,8 +208,16 @@ out: * it returns only when all XPD's on the bus are detected and * initialized. */ -static int xbus_poll(void *data) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) +static void xbus_poll(struct work_struct *work) { + xbus_t *xbus = container_of(work, xbus_t, xpds_init_work); +#else +static void xbus_poll(void *data) +{ + xbus_t *xbus = data; +#endif + int id; int ret = 0; unsigned long flags; @@ -221,11 +228,10 @@ static int xbus_poll(void *data) int count_removed; int count_added; int xpd_num; - xbus_t *xbus = data; if(!down_read_trylock(&xbus->in_use)) { ERR("%s is being removed...\n", xbus->busname); - return -EBUSY; + return; } msleep(2); /* roundtrip for older polls */ spin_lock_irqsave(&xbus->lock, flags); @@ -326,7 +332,6 @@ static int xbus_poll(void *data) wake_up(&xbus->wait_for_xpd_initialization); out: up_read(&xbus->in_use); - return ret; } @@ -343,7 +348,11 @@ void xbus_activate(xbus_t *xbus) xbus->hardware_exists = 1; DBG("Activating: %s\n", xbus->busname); /* Poll it */ - INIT_WORK(&xbus->xpds_init_work, (void (*)(void *))xbus_poll, (void *)xbus); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) + INIT_WORK(&xbus->xpds_init_work, xbus_poll); +#else + INIT_WORK(&xbus->xpds_init_work, xbus_poll, xbus); +#endif if(!queue_work(xpp_worker, &xbus->xpds_init_work)) { ERR("Failed to queue xpd initialization work\n"); /* FIXME: need to return error */ |