やるきなし

2017/11/28 12:42 / Linux 4.14.2 -> 4.15-rc1

4.15-rc1が出ているので .config がどう変更されるのか見てみた.汎用指向の環境.以下 - は削除されたもの,+ は追加されたもの.

以下,その他.

追記 (2017/12/12)

timer: Pass timer_list pointer to callbacks unconditionallyで struct timer_list から (unsigned long) data が削除されていて,timer: Remove init_timer() interfaceでinit_timer()が削除されたりで,broadcom-sta-dkms (6.30.223.271-7), nvidia-kernel-dkms (384.98-3), nvidia-legacy-340xx-kernel-dkms (340.104-3) の kernel module の build に失敗する.nvidia-kernel-dkms (384.98-3) の場合以下のような感じ.

[/var/lib/dkms/nvidia-current/384.98/build/make.log] 抜粋
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c: In function ‘nv_start_rc_timer’:
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c:3259:5: error: implicit declaration of function ‘init_timer’; did you mean ‘init_timers’? [-Werror=implicit-function-de
claration]
     init_timer(&nvl->rc_timer);
     ^~~~~~~~~~
     init_timers
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c:3260:28: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
     nvl->rc_timer.function = nvidia_rc_timer;
                            ^
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c:3261:18: error: ‘struct timer_list’ has no member named ‘data’
     nvl->rc_timer.data = (unsigned long) nvl;
                  ^
cc1: some warnings being treated as errors
scripts/Makefile.build:310: recipe for target '/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.o' failed

treewide: init_timer() -> setup_timer()にあるとおり以下のような変更をすればよいはずなのだが試していない.

This mechanically converts all remaining cases of ancient open-coded timer
setup with the old setup_timer() API, which is the first step in timer
conversions. This has no behavioral changes, since it ultimately just
changes the order of assignment to fields of struct timer_list when
finding variations of:

    init_timer(&t);
    f.function = timer_callback;
    t.data = timer_callback_arg;

to be converted into:

    setup_timer(&t, timer_callback, timer_callback_arg);

追記 (2018/1/19)

Debian GNU/Linux sid では nvidia の kernel package は 4.15 対応になっていて,broadcom-sta-dkms (6.30.223.271-7) については以下のパッチが必要.

treewide: setup_timer() -> timer_setup()のとおりsetup_timerはさらにtimer_setupに書き換える必要があって,コールバック関数側の修正も必要.

--- a/src/wl/sys/wl_linux.c
+++ b/src/wl/sys/wl_linux.c
@@ -93,7 +93,7 @@ struct iw_statistics *wl_get_wireless_stats(struct net_device *dev);
 
 #include <wlc_wowl.h>
 
-static void wl_timer(ulong data);
+static void wl_timer(struct timer_list *t0);
 static void _wl_timer(wl_timer_t *t);
 static struct net_device *wl_alloc_linux_if(wl_if_t *wlif);
 
@@ -2295,9 +2295,9 @@ wl_timer_task(wl_task_t *task)
 }
 
 static void
-wl_timer(ulong data)
+wl_timer(struct timer_list *t0)
 {
-       wl_timer_t *t = (wl_timer_t *)data;
+       wl_timer_t *t = from_timer(t, t0, timer);
 
        if (!WL_ALL_PASSIVE_ENAB(t->wl))
                _wl_timer(t);
@@ -2349,9 +2349,7 @@ wl_init_timer(wl_info_t *wl, void (*fn)(void *arg), void *arg, const char *tname
 
        bzero(t, sizeof(wl_timer_t));
 
-       init_timer(&t->timer);
-       t->timer.data = (ulong) t;
-       t->timer.function = wl_timer;
+       timer_setup(&t->timer, wl_timer, 0);
        t->wl = wl;
        t->fn = fn;
        t->arg = arg;

追記 (2018/1/23)

上のパッチ,treewide: setup_timer() -> timer_setup()のとおりなのだが,from_timer(t, t0, timer)の箇所が謎めいている(左辺の値が右辺にある).

[include/linux/timer.h]
#define from_timer(var, callback_timer, timer_fieldname) \
        container_of(callback_timer, typeof(*var), timer_fieldname)

上がfrom_timer#defineで,container_ofは,struct timer_list *t0 (wl_timer の引数)を struct member timerとして含むwl_timer_t (struct wl_timer)の pointer を取得するように動くマクロということらしい.右辺にある左辺の値は typeof で使われるのみなので問題にならない.

参考にしたページ:

追記 (2018/1/29)

Debian GNU/Linux stable (Stretch) でも以下の backports で 4.15 対応になっている.

追記 (2018/2/12)

broadcom-sta-dkms (6.30.223.271-7) の wl_linux.c に patch が必要という件,https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=885885 で登録されている様子(patch の提供もあり).

追記 (2018/2/15)

broadcom-sta-dkms (6.30.223.271-7) の wl_linux.c に patch が必要という件,broadcom-sta 6.30.223.271-8で修正された様子.

Related articles