From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas Oberritter Subject: Re: [PATCH 1/7] [media] dvb: use ktime_t for internal timeout Date: Tue, 15 Sep 2015 19:55:35 +0200 Message-ID: <55F85B97.8000700@saftware.de> References: <1442332148-488079-1-git-send-email-arnd@arndb.de> <1442332148-488079-2-git-send-email-arnd@arndb.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1442332148-488079-2-git-send-email-arnd@arndb.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: y2038-bounces@lists.linaro.org Sender: "Y2038" To: Arnd Bergmann , linux-media@vger.kernel.org Cc: y2038@lists.linaro.org, linux-api@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab List-Id: linux-api@vger.kernel.org SGVsbG8gQXJuZCwKCk9uIDE1LjA5LjIwMTUgMTc6NDksIEFybmQgQmVyZ21hbm4gd3JvdGU6Cj4g VGhlIGR2YiBkZW11eGVyIGNvZGUgdXNlcyBhICdzdHJ1Y3QgdGltZXNwZWMnIHRvIHBhc3MgYSB0 aW1lb3V0Cj4gYXMgYWJzb2x1dGUgdGltZS4gVGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zIG9uIDMy LWJpdCBhcmNoaXRlY3R1cmVzCj4gaW4gMjAzOCB3aGVuIHRpbWVfdCBvdmVyZmxvd3MsIGFuZCBp dCBpcyByYWN5IHdpdGggYSBjb25jdXJyZW50Cj4gc2V0dGltZW9mZGF5KCkgY2FsbC4KPiAKPiBU aGlzIHBhdGNoIGNoYW5nZXMgdGhlIGNvZGUgdG8gdXNlIGt0aW1lX2dldCgpIGluc3RlYWQsIHVz aW5nCj4gdGhlIG1vbm90b25pYyB0aW1lIGJhc2UgdG8gYXZvaWQgYm90aCB0aGUgcmFjZSBhbmQg dGhlIG92ZXJmbG93Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFybmQgQmVyZ21hbm4gPGFybmRAYXJu ZGIuZGU+Cj4gLS0tCj4gIGRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvZGVtdXguaCAgICAgfCAgMiAr LQo+ICBkcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2RteGRldi5jICAgIHwgIDIgKy0KPiAgZHJpdmVy cy9tZWRpYS9kdmItY29yZS9kdmJfZGVtdXguYyB8IDE3ICsrKysrKy0tLS0tLS0tLS0tCj4gIGRy aXZlcnMvbWVkaWEvZHZiLWNvcmUvZHZiX2RlbXV4LmggfCAgNCArKy0tCj4gIGRyaXZlcnMvbWVk aWEvZHZiLWNvcmUvZHZiX25ldC5jICAgfCAgMiArLQo+ICA1IGZpbGVzIGNoYW5nZWQsIDExIGlu c2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21l ZGlhL2R2Yi1jb3JlL2RlbXV4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2RlbXV4LmgKPiBp bmRleCA4MzMxOTFiY2Q4MTAuLmQ4ZTJiMTIxM2JlZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21l ZGlhL2R2Yi1jb3JlL2RlbXV4LmgKPiArKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2RlbXV4 LmgKPiBAQCAtOTIsNyArOTIsNyBAQCBzdHJ1Y3QgZG14X3RzX2ZlZWQgewo+ICAJCSAgICBpbnQg dHlwZSwKPiAgCQkgICAgZW51bSBkbXhfdHNfcGVzIHBlc190eXBlLAo+ICAJCSAgICBzaXplX3Qg Y2lyY3VsYXJfYnVmZmVyX3NpemUsCj4gLQkJICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0KTsK PiArCQkgICAga3RpbWVfdCB0aW1lb3V0KTsKPiAgCWludCAoKnN0YXJ0X2ZpbHRlcmluZykgKHN0 cnVjdCBkbXhfdHNfZmVlZCogZmVlZCk7Cj4gIAlpbnQgKCpzdG9wX2ZpbHRlcmluZykgKHN0cnVj dCBkbXhfdHNfZmVlZCogZmVlZCk7Cj4gIH07Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEv ZHZiLWNvcmUvZG14ZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2RteGRldi5jCj4gaW5k ZXggZDBlM2Y5ZDg1ZjM0Li4wZDIwYjM3OWVlZWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZWRp YS9kdmItY29yZS9kbXhkZXYuYwo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWNvcmUvZG14ZGV2 LmMKPiBAQCAtNTU4LDcgKzU1OCw3IEBAIHN0YXRpYyBpbnQgZHZiX2RteGRldl9zdGFydF9mZWVk KHN0cnVjdCBkbXhkZXYgKmRteGRldiwKPiAgCQkJCSBzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZmls dGVyLAo+ICAJCQkJIHN0cnVjdCBkbXhkZXZfZmVlZCAqZmVlZCkKPiAgewo+IC0Jc3RydWN0IHRp bWVzcGVjIHRpbWVvdXQgPSB7IDAgfTsKPiArCWt0aW1lX3QgdGltZW91dCA9IGt0aW1lX3NldCgw LCAwKTsKPiAgCXN0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMgKnBhcmEgPSAmZmlsdGVyLT5w YXJhbXMucGVzOwo+ICAJZG14X291dHB1dF90IG90eXBlOwo+ICAJaW50IHJldDsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9tZWRpYS9kdmItY29yZS9kdmJfZGVtdXguYyBiL2RyaXZlcnMvbWVkaWEv ZHZiLWNvcmUvZHZiX2RlbXV4LmMKPiBpbmRleCA2YzdmZjBjZGNkMzIuLmQ4M2RkMGViNTc1NyAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCj4gKysrIGIv ZHJpdmVycy9tZWRpYS9kdmItY29yZS9kdmJfZGVtdXguYwo+IEBAIC0zOTksMjggKzM5OSwyMyBA QCBzdGF0aWMgdm9pZCBkdmJfZG14X3N3ZmlsdGVyX3BhY2tldChzdHJ1Y3QgZHZiX2RlbXV4ICpk ZW11eCwgY29uc3QgdTggKmJ1ZikKPiAgCWludCBkdnJfZG9uZSA9IDA7Cj4gIAo+ICAJaWYgKGR2 Yl9kZW11eF9zcGVlZGNoZWNrKSB7Cj4gLQkJc3RydWN0IHRpbWVzcGVjIGN1cl90aW1lLCBkZWx0 YV90aW1lOwo+ICsJCWt0aW1lX3QgY3VyX3RpbWU7Cj4gIAkJdTY0IHNwZWVkX2J5dGVzLCBzcGVl ZF90aW1lZGVsdGE7Cj4gIAo+ICAJCWRlbXV4LT5zcGVlZF9wa3RzX2NudCsrOwo+ICAKPiAgCQkv KiBzaG93IHNwZWVkIGV2ZXJ5IFNQRUVEX1BLVFNfSU5URVJWQUwgcGFja2V0cyAqLwo+ICAJCWlm ICghKGRlbXV4LT5zcGVlZF9wa3RzX2NudCAlIFNQRUVEX1BLVFNfSU5URVJWQUwpKSB7Cj4gLQkJ CWN1cl90aW1lID0gY3VycmVudF9rZXJuZWxfdGltZSgpOwo+ICsJCQljdXJfdGltZSA9IGt0aW1l X2dldCgpOwo+ICAKPiAtCQkJaWYgKGRlbXV4LT5zcGVlZF9sYXN0X3RpbWUudHZfc2VjICE9IDAg JiYKPiAtCQkJCQlkZW11eC0+c3BlZWRfbGFzdF90aW1lLnR2X25zZWMgIT0gMCkgewo+IC0JCQkJ ZGVsdGFfdGltZSA9IHRpbWVzcGVjX3N1YihjdXJfdGltZSwKPiAtCQkJCQkJZGVtdXgtPnNwZWVk X2xhc3RfdGltZSk7Cj4gKwkJCWlmIChrdGltZV90b19ucyhkZW11eC0+c3BlZWRfbGFzdF90aW1l KSA9PSAwKSB7CgppZiBrdGltZV90b19ucyBkb2VzIHdoYXQgSSB0aGluayBpdCBkb2VzLCB0aGVu IHlvdSBzaG91bGQgaW52ZXJ0IHRoZSBsb2dpYy4KClJlZ2FyZHMsCkFuZHJlYXMKCj4gIAkJCQlz cGVlZF9ieXRlcyA9ICh1NjQpZGVtdXgtPnNwZWVkX3BrdHNfY250Cj4gIAkJCQkJKiAxODggKiA4 Owo+ICAJCQkJLyogY29udmVydCB0byAxMDI0IGJhc2lzICovCj4gIAkJCQlzcGVlZF9ieXRlcyA9 IDEwMDAgKiBkaXY2NF91NjQoc3BlZWRfYnl0ZXMsCj4gIAkJCQkJCTEwMjQpOwo+IC0JCQkJc3Bl ZWRfdGltZWRlbHRhID0KPiAtCQkJCQkodTY0KXRpbWVzcGVjX3RvX25zKCZkZWx0YV90aW1lKTsK PiAtCQkJCXNwZWVkX3RpbWVkZWx0YSA9IGRpdjY0X3U2NChzcGVlZF90aW1lZGVsdGEsCj4gLQkJ CQkJCTEwMDAwMDApOyAvKiBuc2VjIC0+IHVzZWMgKi8KPiArCQkJCXNwZWVkX3RpbWVkZWx0YSA9 IGt0aW1lX21zX2RlbHRhKGN1cl90aW1lLAo+ICsJCQkJCQkJZGVtdXgtPnNwZWVkX2xhc3RfdGlt ZSk7Cj4gIAkJCQlwcmludGsoS0VSTl9JTkZPICJUUyBzcGVlZCAlbGx1IEtiaXRzL3NlYyBcbiIs Cj4gIAkJCQkJCWRpdjY0X3U2NChzcGVlZF9ieXRlcywKPiAgCQkJCQkJCXNwZWVkX3RpbWVkZWx0 YSkpOwo+IEBAIC02NjcsNyArNjYyLDcgQEAgb3V0Ogo+ICAKPiAgc3RhdGljIGludCBkbXhfdHNf ZmVlZF9zZXQoc3RydWN0IGRteF90c19mZWVkICp0c19mZWVkLCB1MTYgcGlkLCBpbnQgdHNfdHlw ZSwKPiAgCQkJICAgZW51bSBkbXhfdHNfcGVzIHBlc190eXBlLAo+IC0JCQkgICBzaXplX3QgY2ly Y3VsYXJfYnVmZmVyX3NpemUsIHN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0KQo+ICsJCQkgICBzaXpl X3QgY2lyY3VsYXJfYnVmZmVyX3NpemUsIGt0aW1lX3QgdGltZW91dCkKPiAgewo+ICAJc3RydWN0 IGR2Yl9kZW11eF9mZWVkICpmZWVkID0gKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqKXRzX2ZlZWQ7 Cj4gIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4Owo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9kZW11eC5oIGIvZHJpdmVycy9tZWRpYS9kdmIt Y29yZS9kdmJfZGVtdXguaAo+IGluZGV4IGFlN2ZjMzNjMzIzMS4uNWVkM2NhYjRhZDI4IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWNvcmUvZHZiX2RlbXV4LmgKPiArKysgYi9kcml2 ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9kZW11eC5oCj4gQEAgLTgzLDcgKzgzLDcgQEAgc3RydWN0 IGR2Yl9kZW11eF9mZWVkIHsKPiAgCXU4ICpidWZmZXI7Cj4gIAlpbnQgYnVmZmVyX3NpemU7Cj4g IAo+IC0Jc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQ7Cj4gKwlrdGltZV90IHRpbWVvdXQ7Cj4gIAlz dHJ1Y3QgZHZiX2RlbXV4X2ZpbHRlciAqZmlsdGVyOwo+ICAKPiAgCWludCB0c190eXBlOwo+IEBA IC0xMzQsNyArMTM0LDcgQEAgc3RydWN0IGR2Yl9kZW11eCB7Cj4gIAo+ICAJdWludDhfdCAqY250 X3N0b3JhZ2U7IC8qIGZvciBUUyBjb250aW51aXR5IGNoZWNrICovCj4gIAo+IC0Jc3RydWN0IHRp bWVzcGVjIHNwZWVkX2xhc3RfdGltZTsgLyogZm9yIFRTIHNwZWVkIGNoZWNrICovCj4gKwlrdGlt ZV90IHNwZWVkX2xhc3RfdGltZTsgLyogZm9yIFRTIHNwZWVkIGNoZWNrICovCj4gIAl1aW50MzJf dCBzcGVlZF9wa3RzX2NudDsgLyogZm9yIFRTIHNwZWVkIGNoZWNrICovCj4gIH07Cj4gIAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9uZXQuYyBiL2RyaXZlcnMvbWVk aWEvZHZiLWNvcmUvZHZiX25ldC5jCj4gaW5kZXggYjgxZTAyNmVkYWIzLi5kZjNiYTE1YzAwN2Ug MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItY29yZS9kdmJfbmV0LmMKPiArKysgYi9k cml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9uZXQuYwo+IEBAIC05OTgsNyArOTk4LDcgQEAgc3Rh dGljIGludCBkdmJfbmV0X2ZlZWRfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKPiAgCQlu ZXRkZXZfZGJnKGRldiwgInN0YXJ0IGZpbHRlcmluZ1xuIik7Cj4gIAkJcHJpdi0+c2VjZmVlZC0+ c3RhcnRfZmlsdGVyaW5nKHByaXYtPnNlY2ZlZWQpOwo+ICAJfSBlbHNlIGlmIChwcml2LT5mZWVk dHlwZSA9PSBEVkJfTkVUX0ZFRURUWVBFX1VMRSkgewo+IC0JCXN0cnVjdCB0aW1lc3BlYyB0aW1l b3V0ID0geyAwLCAxMDAwMDAwMCB9OyAvLyAxMCBtc2VjCj4gKwkJa3RpbWVfdCB0aW1lb3V0ID0g bnNfdG9fa3RpbWUoMTAgKiBOU0VDX1BFUl9NU0VDKTsKPiAgCj4gIAkJLyogd2UgaGF2ZSBwYXls b2FkcyBlbmNhcHN1bGF0ZWQgaW4gVFMgKi8KPiAgCQluZXRkZXZfZGJnKGRldiwgImFsbG9jIHRz ZmVlZFxuIik7Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpZMjAzOCBtYWlsaW5nIGxpc3QKWTIwMzhAbGlzdHMubGluYXJvLm9yZwpodHRwczovL2xp c3RzLmxpbmFyby5vcmcvbWFpbG1hbi9saXN0aW5mby95MjAzOAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail.saftware.de ([83.141.3.46]:42942 "EHLO mail.saftware.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751465AbbIOSC6 (ORCPT ); Tue, 15 Sep 2015 14:02:58 -0400 Subject: Re: [PATCH 1/7] [media] dvb: use ktime_t for internal timeout To: Arnd Bergmann , linux-media@vger.kernel.org References: <1442332148-488079-1-git-send-email-arnd@arndb.de> <1442332148-488079-2-git-send-email-arnd@arndb.de> Cc: linux-kernel@vger.kernel.org, y2038@lists.linaro.org, Mauro Carvalho Chehab , linux-api@vger.kernel.org, linux-samsung-soc@vger.kernel.org From: Andreas Oberritter Message-ID: <55F85B97.8000700@saftware.de> Date: Tue, 15 Sep 2015 19:55:35 +0200 MIME-Version: 1.0 In-Reply-To: <1442332148-488079-2-git-send-email-arnd@arndb.de> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit Sender: linux-media-owner@vger.kernel.org List-ID: Hello Arnd, On 15.09.2015 17:49, Arnd Bergmann wrote: > The dvb demuxer code uses a 'struct timespec' to pass a timeout > as absolute time. This will cause problems on 32-bit architectures > in 2038 when time_t overflows, and it is racy with a concurrent > settimeofday() call. > > This patch changes the code to use ktime_get() instead, using > the monotonic time base to avoid both the race and the overflow. > > Signed-off-by: Arnd Bergmann > --- > drivers/media/dvb-core/demux.h | 2 +- > drivers/media/dvb-core/dmxdev.c | 2 +- > drivers/media/dvb-core/dvb_demux.c | 17 ++++++----------- > drivers/media/dvb-core/dvb_demux.h | 4 ++-- > drivers/media/dvb-core/dvb_net.c | 2 +- > 5 files changed, 11 insertions(+), 16 deletions(-) > > diff --git a/drivers/media/dvb-core/demux.h b/drivers/media/dvb-core/demux.h > index 833191bcd810..d8e2b1213bef 100644 > --- a/drivers/media/dvb-core/demux.h > +++ b/drivers/media/dvb-core/demux.h > @@ -92,7 +92,7 @@ struct dmx_ts_feed { > int type, > enum dmx_ts_pes pes_type, > size_t circular_buffer_size, > - struct timespec timeout); > + ktime_t timeout); > int (*start_filtering) (struct dmx_ts_feed* feed); > int (*stop_filtering) (struct dmx_ts_feed* feed); > }; > diff --git a/drivers/media/dvb-core/dmxdev.c b/drivers/media/dvb-core/dmxdev.c > index d0e3f9d85f34..0d20b379eeec 100644 > --- a/drivers/media/dvb-core/dmxdev.c > +++ b/drivers/media/dvb-core/dmxdev.c > @@ -558,7 +558,7 @@ static int dvb_dmxdev_start_feed(struct dmxdev *dmxdev, > struct dmxdev_filter *filter, > struct dmxdev_feed *feed) > { > - struct timespec timeout = { 0 }; > + ktime_t timeout = ktime_set(0, 0); > struct dmx_pes_filter_params *para = &filter->params.pes; > dmx_output_t otype; > int ret; > diff --git a/drivers/media/dvb-core/dvb_demux.c b/drivers/media/dvb-core/dvb_demux.c > index 6c7ff0cdcd32..d83dd0eb5757 100644 > --- a/drivers/media/dvb-core/dvb_demux.c > +++ b/drivers/media/dvb-core/dvb_demux.c > @@ -399,28 +399,23 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf) > int dvr_done = 0; > > if (dvb_demux_speedcheck) { > - struct timespec cur_time, delta_time; > + ktime_t cur_time; > u64 speed_bytes, speed_timedelta; > > demux->speed_pkts_cnt++; > > /* show speed every SPEED_PKTS_INTERVAL packets */ > if (!(demux->speed_pkts_cnt % SPEED_PKTS_INTERVAL)) { > - cur_time = current_kernel_time(); > + cur_time = ktime_get(); > > - if (demux->speed_last_time.tv_sec != 0 && > - demux->speed_last_time.tv_nsec != 0) { > - delta_time = timespec_sub(cur_time, > - demux->speed_last_time); > + if (ktime_to_ns(demux->speed_last_time) == 0) { if ktime_to_ns does what I think it does, then you should invert the logic. Regards, Andreas > speed_bytes = (u64)demux->speed_pkts_cnt > * 188 * 8; > /* convert to 1024 basis */ > speed_bytes = 1000 * div64_u64(speed_bytes, > 1024); > - speed_timedelta = > - (u64)timespec_to_ns(&delta_time); > - speed_timedelta = div64_u64(speed_timedelta, > - 1000000); /* nsec -> usec */ > + speed_timedelta = ktime_ms_delta(cur_time, > + demux->speed_last_time); > printk(KERN_INFO "TS speed %llu Kbits/sec \n", > div64_u64(speed_bytes, > speed_timedelta)); > @@ -667,7 +662,7 @@ out: > > static int dmx_ts_feed_set(struct dmx_ts_feed *ts_feed, u16 pid, int ts_type, > enum dmx_ts_pes pes_type, > - size_t circular_buffer_size, struct timespec timeout) > + size_t circular_buffer_size, ktime_t timeout) > { > struct dvb_demux_feed *feed = (struct dvb_demux_feed *)ts_feed; > struct dvb_demux *demux = feed->demux; > diff --git a/drivers/media/dvb-core/dvb_demux.h b/drivers/media/dvb-core/dvb_demux.h > index ae7fc33c3231..5ed3cab4ad28 100644 > --- a/drivers/media/dvb-core/dvb_demux.h > +++ b/drivers/media/dvb-core/dvb_demux.h > @@ -83,7 +83,7 @@ struct dvb_demux_feed { > u8 *buffer; > int buffer_size; > > - struct timespec timeout; > + ktime_t timeout; > struct dvb_demux_filter *filter; > > int ts_type; > @@ -134,7 +134,7 @@ struct dvb_demux { > > uint8_t *cnt_storage; /* for TS continuity check */ > > - struct timespec speed_last_time; /* for TS speed check */ > + ktime_t speed_last_time; /* for TS speed check */ > uint32_t speed_pkts_cnt; /* for TS speed check */ > }; > > diff --git a/drivers/media/dvb-core/dvb_net.c b/drivers/media/dvb-core/dvb_net.c > index b81e026edab3..df3ba15c007e 100644 > --- a/drivers/media/dvb-core/dvb_net.c > +++ b/drivers/media/dvb-core/dvb_net.c > @@ -998,7 +998,7 @@ static int dvb_net_feed_start(struct net_device *dev) > netdev_dbg(dev, "start filtering\n"); > priv->secfeed->start_filtering(priv->secfeed); > } else if (priv->feedtype == DVB_NET_FEEDTYPE_ULE) { > - struct timespec timeout = { 0, 10000000 }; // 10 msec > + ktime_t timeout = ns_to_ktime(10 * NSEC_PER_MSEC); > > /* we have payloads encapsulated in TS */ > netdev_dbg(dev, "alloc tsfeed\n"); >