cgroup: superblock can't be released with active dentries
[firefly-linux-kernel-4.4.55.git] / net / nfc / netlink.c
1 /*
2  * Copyright (C) 2011 Instituto Nokia de Tecnologia
3  *
4  * Authors:
5  *    Lauro Ramos Venancio <lauro.venancio@openbossa.org>
6  *    Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the
20  * Free Software Foundation, Inc.,
21  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22  */
23
24 #define pr_fmt(fmt) KBUILD_MODNAME ": %s: " fmt, __func__
25
26 #include <net/genetlink.h>
27 #include <linux/nfc.h>
28 #include <linux/slab.h>
29
30 #include "nfc.h"
31
32 static struct genl_multicast_group nfc_genl_event_mcgrp = {
33         .name = NFC_GENL_MCAST_EVENT_NAME,
34 };
35
36 struct genl_family nfc_genl_family = {
37         .id = GENL_ID_GENERATE,
38         .hdrsize = 0,
39         .name = NFC_GENL_NAME,
40         .version = NFC_GENL_VERSION,
41         .maxattr = NFC_ATTR_MAX,
42 };
43
44 static const struct nla_policy nfc_genl_policy[NFC_ATTR_MAX + 1] = {
45         [NFC_ATTR_DEVICE_INDEX] = { .type = NLA_U32 },
46         [NFC_ATTR_DEVICE_NAME] = { .type = NLA_STRING,
47                                 .len = NFC_DEVICE_NAME_MAXSIZE },
48         [NFC_ATTR_PROTOCOLS] = { .type = NLA_U32 },
49         [NFC_ATTR_COMM_MODE] = { .type = NLA_U8 },
50         [NFC_ATTR_RF_MODE] = { .type = NLA_U8 },
51         [NFC_ATTR_DEVICE_POWERED] = { .type = NLA_U8 },
52 };
53
54 static int nfc_genl_send_target(struct sk_buff *msg, struct nfc_target *target,
55                                 struct netlink_callback *cb, int flags)
56 {
57         void *hdr;
58
59         hdr = genlmsg_put(msg, NETLINK_CB(cb->skb).pid, cb->nlh->nlmsg_seq,
60                           &nfc_genl_family, flags, NFC_CMD_GET_TARGET);
61         if (!hdr)
62                 return -EMSGSIZE;
63
64         genl_dump_check_consistent(cb, hdr, &nfc_genl_family);
65
66         if (nla_put_u32(msg, NFC_ATTR_TARGET_INDEX, target->idx) ||
67             nla_put_u32(msg, NFC_ATTR_PROTOCOLS, target->supported_protocols) ||
68             nla_put_u16(msg, NFC_ATTR_TARGET_SENS_RES, target->sens_res) ||
69             nla_put_u8(msg, NFC_ATTR_TARGET_SEL_RES, target->sel_res))
70                 goto nla_put_failure;
71         if (target->nfcid1_len > 0 &&
72             nla_put(msg, NFC_ATTR_TARGET_NFCID1, target->nfcid1_len,
73                     target->nfcid1))
74                 goto nla_put_failure;
75         if (target->sensb_res_len > 0 &&
76             nla_put(msg, NFC_ATTR_TARGET_SENSB_RES, target->sensb_res_len,
77                     target->sensb_res))
78                 goto nla_put_failure;
79         if (target->sensf_res_len > 0 &&
80             nla_put(msg, NFC_ATTR_TARGET_SENSF_RES, target->sensf_res_len,
81                     target->sensf_res))
82                 goto nla_put_failure;
83
84         return genlmsg_end(msg, hdr);
85
86 nla_put_failure:
87         genlmsg_cancel(msg, hdr);
88         return -EMSGSIZE;
89 }
90
91 static struct nfc_dev *__get_device_from_cb(struct netlink_callback *cb)
92 {
93         struct nfc_dev *dev;
94         int rc;
95         u32 idx;
96
97         rc = nlmsg_parse(cb->nlh, GENL_HDRLEN + nfc_genl_family.hdrsize,
98                          nfc_genl_family.attrbuf,
99                          nfc_genl_family.maxattr,
100                          nfc_genl_policy);
101         if (rc < 0)
102                 return ERR_PTR(rc);
103
104         if (!nfc_genl_family.attrbuf[NFC_ATTR_DEVICE_INDEX])
105                 return ERR_PTR(-EINVAL);
106
107         idx = nla_get_u32(nfc_genl_family.attrbuf[NFC_ATTR_DEVICE_INDEX]);
108
109         dev = nfc_get_device(idx);
110         if (!dev)
111                 return ERR_PTR(-ENODEV);
112
113         return dev;
114 }
115
116 static int nfc_genl_dump_targets(struct sk_buff *skb,
117                                  struct netlink_callback *cb)
118 {
119         int i = cb->args[0];
120         struct nfc_dev *dev = (struct nfc_dev *) cb->args[1];
121         int rc;
122
123         if (!dev) {
124                 dev = __get_device_from_cb(cb);
125                 if (IS_ERR(dev))
126                         return PTR_ERR(dev);
127
128                 cb->args[1] = (long) dev;
129         }
130
131         spin_lock_bh(&dev->targets_lock);
132
133         cb->seq = dev->targets_generation;
134
135         while (i < dev->n_targets) {
136                 rc = nfc_genl_send_target(skb, &dev->targets[i], cb,
137                                           NLM_F_MULTI);
138                 if (rc < 0)
139                         break;
140
141                 i++;
142         }
143
144         spin_unlock_bh(&dev->targets_lock);
145
146         cb->args[0] = i;
147
148         return skb->len;
149 }
150
151 static int nfc_genl_dump_targets_done(struct netlink_callback *cb)
152 {
153         struct nfc_dev *dev = (struct nfc_dev *) cb->args[1];
154
155         if (dev)
156                 nfc_put_device(dev);
157
158         return 0;
159 }
160
161 int nfc_genl_targets_found(struct nfc_dev *dev)
162 {
163         struct sk_buff *msg;
164         void *hdr;
165
166         dev->genl_data.poll_req_pid = 0;
167
168         msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
169         if (!msg)
170                 return -ENOMEM;
171
172         hdr = genlmsg_put(msg, 0, 0, &nfc_genl_family, 0,
173                           NFC_EVENT_TARGETS_FOUND);
174         if (!hdr)
175                 goto free_msg;
176
177         if (nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx))
178                 goto nla_put_failure;
179
180         genlmsg_end(msg, hdr);
181
182         return genlmsg_multicast(msg, 0, nfc_genl_event_mcgrp.id, GFP_ATOMIC);
183
184 nla_put_failure:
185         genlmsg_cancel(msg, hdr);
186 free_msg:
187         nlmsg_free(msg);
188         return -EMSGSIZE;
189 }
190
191 int nfc_genl_target_lost(struct nfc_dev *dev, u32 target_idx)
192 {
193         struct sk_buff *msg;
194         void *hdr;
195
196         msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
197         if (!msg)
198                 return -ENOMEM;
199
200         hdr = genlmsg_put(msg, 0, 0, &nfc_genl_family, 0,
201                           NFC_EVENT_TARGET_LOST);
202         if (!hdr)
203                 goto free_msg;
204
205         if (nla_put_string(msg, NFC_ATTR_DEVICE_NAME, nfc_device_name(dev)) ||
206             nla_put_u32(msg, NFC_ATTR_TARGET_INDEX, target_idx))
207                 goto nla_put_failure;
208
209         genlmsg_end(msg, hdr);
210
211         genlmsg_multicast(msg, 0, nfc_genl_event_mcgrp.id, GFP_KERNEL);
212
213         return 0;
214
215 nla_put_failure:
216         genlmsg_cancel(msg, hdr);
217 free_msg:
218         nlmsg_free(msg);
219         return -EMSGSIZE;
220 }
221
222 int nfc_genl_device_added(struct nfc_dev *dev)
223 {
224         struct sk_buff *msg;
225         void *hdr;
226
227         msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
228         if (!msg)
229                 return -ENOMEM;
230
231         hdr = genlmsg_put(msg, 0, 0, &nfc_genl_family, 0,
232                           NFC_EVENT_DEVICE_ADDED);
233         if (!hdr)
234                 goto free_msg;
235
236         if (nla_put_string(msg, NFC_ATTR_DEVICE_NAME, nfc_device_name(dev)) ||
237             nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx) ||
238             nla_put_u32(msg, NFC_ATTR_PROTOCOLS, dev->supported_protocols) ||
239             nla_put_u8(msg, NFC_ATTR_DEVICE_POWERED, dev->dev_up))
240                 goto nla_put_failure;
241
242         genlmsg_end(msg, hdr);
243
244         genlmsg_multicast(msg, 0, nfc_genl_event_mcgrp.id, GFP_KERNEL);
245
246         return 0;
247
248 nla_put_failure:
249         genlmsg_cancel(msg, hdr);
250 free_msg:
251         nlmsg_free(msg);
252         return -EMSGSIZE;
253 }
254
255 int nfc_genl_device_removed(struct nfc_dev *dev)
256 {
257         struct sk_buff *msg;
258         void *hdr;
259
260         msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
261         if (!msg)
262                 return -ENOMEM;
263
264         hdr = genlmsg_put(msg, 0, 0, &nfc_genl_family, 0,
265                           NFC_EVENT_DEVICE_REMOVED);
266         if (!hdr)
267                 goto free_msg;
268
269         if (nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx))
270                 goto nla_put_failure;
271
272         genlmsg_end(msg, hdr);
273
274         genlmsg_multicast(msg, 0, nfc_genl_event_mcgrp.id, GFP_KERNEL);
275
276         return 0;
277
278 nla_put_failure:
279         genlmsg_cancel(msg, hdr);
280 free_msg:
281         nlmsg_free(msg);
282         return -EMSGSIZE;
283 }
284
285 static int nfc_genl_send_device(struct sk_buff *msg, struct nfc_dev *dev,
286                                 u32 pid, u32 seq,
287                                 struct netlink_callback *cb,
288                                 int flags)
289 {
290         void *hdr;
291
292         hdr = genlmsg_put(msg, pid, seq, &nfc_genl_family, flags,
293                           NFC_CMD_GET_DEVICE);
294         if (!hdr)
295                 return -EMSGSIZE;
296
297         if (cb)
298                 genl_dump_check_consistent(cb, hdr, &nfc_genl_family);
299
300         if (nla_put_string(msg, NFC_ATTR_DEVICE_NAME, nfc_device_name(dev)) ||
301             nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx) ||
302             nla_put_u32(msg, NFC_ATTR_PROTOCOLS, dev->supported_protocols) ||
303             nla_put_u8(msg, NFC_ATTR_DEVICE_POWERED, dev->dev_up))
304                 goto nla_put_failure;
305
306         return genlmsg_end(msg, hdr);
307
308 nla_put_failure:
309         genlmsg_cancel(msg, hdr);
310         return -EMSGSIZE;
311 }
312
313 static int nfc_genl_dump_devices(struct sk_buff *skb,
314                                  struct netlink_callback *cb)
315 {
316         struct class_dev_iter *iter = (struct class_dev_iter *) cb->args[0];
317         struct nfc_dev *dev = (struct nfc_dev *) cb->args[1];
318         bool first_call = false;
319
320         if (!iter) {
321                 first_call = true;
322                 iter = kmalloc(sizeof(struct class_dev_iter), GFP_KERNEL);
323                 if (!iter)
324                         return -ENOMEM;
325                 cb->args[0] = (long) iter;
326         }
327
328         mutex_lock(&nfc_devlist_mutex);
329
330         cb->seq = nfc_devlist_generation;
331
332         if (first_call) {
333                 nfc_device_iter_init(iter);
334                 dev = nfc_device_iter_next(iter);
335         }
336
337         while (dev) {
338                 int rc;
339
340                 rc = nfc_genl_send_device(skb, dev, NETLINK_CB(cb->skb).pid,
341                                           cb->nlh->nlmsg_seq, cb, NLM_F_MULTI);
342                 if (rc < 0)
343                         break;
344
345                 dev = nfc_device_iter_next(iter);
346         }
347
348         mutex_unlock(&nfc_devlist_mutex);
349
350         cb->args[1] = (long) dev;
351
352         return skb->len;
353 }
354
355 static int nfc_genl_dump_devices_done(struct netlink_callback *cb)
356 {
357         struct class_dev_iter *iter = (struct class_dev_iter *) cb->args[0];
358
359         nfc_device_iter_exit(iter);
360         kfree(iter);
361
362         return 0;
363 }
364
365 int nfc_genl_dep_link_up_event(struct nfc_dev *dev, u32 target_idx,
366                                u8 comm_mode, u8 rf_mode)
367 {
368         struct sk_buff *msg;
369         void *hdr;
370
371         pr_debug("DEP link is up\n");
372
373         msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
374         if (!msg)
375                 return -ENOMEM;
376
377         hdr = genlmsg_put(msg, 0, 0, &nfc_genl_family, 0, NFC_CMD_DEP_LINK_UP);
378         if (!hdr)
379                 goto free_msg;
380
381         if (nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx))
382                 goto nla_put_failure;
383         if (rf_mode == NFC_RF_INITIATOR &&
384             nla_put_u32(msg, NFC_ATTR_TARGET_INDEX, target_idx))
385                 goto nla_put_failure;
386         if (nla_put_u8(msg, NFC_ATTR_COMM_MODE, comm_mode) ||
387             nla_put_u8(msg, NFC_ATTR_RF_MODE, rf_mode))
388                 goto nla_put_failure;
389
390         genlmsg_end(msg, hdr);
391
392         dev->dep_link_up = true;
393
394         genlmsg_multicast(msg, 0, nfc_genl_event_mcgrp.id, GFP_ATOMIC);
395
396         return 0;
397
398 nla_put_failure:
399         genlmsg_cancel(msg, hdr);
400 free_msg:
401         nlmsg_free(msg);
402         return -EMSGSIZE;
403 }
404
405 int nfc_genl_dep_link_down_event(struct nfc_dev *dev)
406 {
407         struct sk_buff *msg;
408         void *hdr;
409
410         pr_debug("DEP link is down\n");
411
412         msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
413         if (!msg)
414                 return -ENOMEM;
415
416         hdr = genlmsg_put(msg, 0, 0, &nfc_genl_family, 0,
417                           NFC_CMD_DEP_LINK_DOWN);
418         if (!hdr)
419                 goto free_msg;
420
421         if (nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx))
422                 goto nla_put_failure;
423
424         genlmsg_end(msg, hdr);
425
426         genlmsg_multicast(msg, 0, nfc_genl_event_mcgrp.id, GFP_ATOMIC);
427
428         return 0;
429
430 nla_put_failure:
431         genlmsg_cancel(msg, hdr);
432 free_msg:
433         nlmsg_free(msg);
434         return -EMSGSIZE;
435 }
436
437 static int nfc_genl_get_device(struct sk_buff *skb, struct genl_info *info)
438 {
439         struct sk_buff *msg;
440         struct nfc_dev *dev;
441         u32 idx;
442         int rc = -ENOBUFS;
443
444         if (!info->attrs[NFC_ATTR_DEVICE_INDEX])
445                 return -EINVAL;
446
447         idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
448
449         dev = nfc_get_device(idx);
450         if (!dev)
451                 return -ENODEV;
452
453         msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
454         if (!msg) {
455                 rc = -ENOMEM;
456                 goto out_putdev;
457         }
458
459         rc = nfc_genl_send_device(msg, dev, info->snd_pid, info->snd_seq,
460                                   NULL, 0);
461         if (rc < 0)
462                 goto out_free;
463
464         nfc_put_device(dev);
465
466         return genlmsg_reply(msg, info);
467
468 out_free:
469         nlmsg_free(msg);
470 out_putdev:
471         nfc_put_device(dev);
472         return rc;
473 }
474
475 static int nfc_genl_dev_up(struct sk_buff *skb, struct genl_info *info)
476 {
477         struct nfc_dev *dev;
478         int rc;
479         u32 idx;
480
481         if (!info->attrs[NFC_ATTR_DEVICE_INDEX])
482                 return -EINVAL;
483
484         idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
485
486         dev = nfc_get_device(idx);
487         if (!dev)
488                 return -ENODEV;
489
490         rc = nfc_dev_up(dev);
491
492         nfc_put_device(dev);
493         return rc;
494 }
495
496 static int nfc_genl_dev_down(struct sk_buff *skb, struct genl_info *info)
497 {
498         struct nfc_dev *dev;
499         int rc;
500         u32 idx;
501
502         if (!info->attrs[NFC_ATTR_DEVICE_INDEX])
503                 return -EINVAL;
504
505         idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
506
507         dev = nfc_get_device(idx);
508         if (!dev)
509                 return -ENODEV;
510
511         rc = nfc_dev_down(dev);
512
513         nfc_put_device(dev);
514         return rc;
515 }
516
517 static int nfc_genl_start_poll(struct sk_buff *skb, struct genl_info *info)
518 {
519         struct nfc_dev *dev;
520         int rc;
521         u32 idx;
522         u32 protocols;
523
524         pr_debug("Poll start\n");
525
526         if (!info->attrs[NFC_ATTR_DEVICE_INDEX] ||
527             !info->attrs[NFC_ATTR_PROTOCOLS])
528                 return -EINVAL;
529
530         idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
531         protocols = nla_get_u32(info->attrs[NFC_ATTR_PROTOCOLS]);
532
533         dev = nfc_get_device(idx);
534         if (!dev)
535                 return -ENODEV;
536
537         mutex_lock(&dev->genl_data.genl_data_mutex);
538
539         rc = nfc_start_poll(dev, protocols);
540         if (!rc)
541                 dev->genl_data.poll_req_pid = info->snd_pid;
542
543         mutex_unlock(&dev->genl_data.genl_data_mutex);
544
545         nfc_put_device(dev);
546         return rc;
547 }
548
549 static int nfc_genl_stop_poll(struct sk_buff *skb, struct genl_info *info)
550 {
551         struct nfc_dev *dev;
552         int rc;
553         u32 idx;
554
555         if (!info->attrs[NFC_ATTR_DEVICE_INDEX])
556                 return -EINVAL;
557
558         idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
559
560         dev = nfc_get_device(idx);
561         if (!dev)
562                 return -ENODEV;
563
564         mutex_lock(&dev->genl_data.genl_data_mutex);
565
566         if (dev->genl_data.poll_req_pid != info->snd_pid) {
567                 rc = -EBUSY;
568                 goto out;
569         }
570
571         rc = nfc_stop_poll(dev);
572         dev->genl_data.poll_req_pid = 0;
573
574 out:
575         mutex_unlock(&dev->genl_data.genl_data_mutex);
576         nfc_put_device(dev);
577         return rc;
578 }
579
580 static int nfc_genl_dep_link_up(struct sk_buff *skb, struct genl_info *info)
581 {
582         struct nfc_dev *dev;
583         int rc, tgt_idx;
584         u32 idx;
585         u8 comm;
586
587         pr_debug("DEP link up\n");
588
589         if (!info->attrs[NFC_ATTR_DEVICE_INDEX] ||
590             !info->attrs[NFC_ATTR_COMM_MODE])
591                 return -EINVAL;
592
593         idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
594         if (!info->attrs[NFC_ATTR_TARGET_INDEX])
595                 tgt_idx = NFC_TARGET_IDX_ANY;
596         else
597                 tgt_idx = nla_get_u32(info->attrs[NFC_ATTR_TARGET_INDEX]);
598
599         comm = nla_get_u8(info->attrs[NFC_ATTR_COMM_MODE]);
600
601         if (comm != NFC_COMM_ACTIVE && comm != NFC_COMM_PASSIVE)
602                 return -EINVAL;
603
604         dev = nfc_get_device(idx);
605         if (!dev)
606                 return -ENODEV;
607
608         rc = nfc_dep_link_up(dev, tgt_idx, comm);
609
610         nfc_put_device(dev);
611
612         return rc;
613 }
614
615 static int nfc_genl_dep_link_down(struct sk_buff *skb, struct genl_info *info)
616 {
617         struct nfc_dev *dev;
618         int rc;
619         u32 idx;
620
621         if (!info->attrs[NFC_ATTR_DEVICE_INDEX])
622                 return -EINVAL;
623
624         idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
625
626         dev = nfc_get_device(idx);
627         if (!dev)
628                 return -ENODEV;
629
630         rc = nfc_dep_link_down(dev);
631
632         nfc_put_device(dev);
633         return rc;
634 }
635
636 static struct genl_ops nfc_genl_ops[] = {
637         {
638                 .cmd = NFC_CMD_GET_DEVICE,
639                 .doit = nfc_genl_get_device,
640                 .dumpit = nfc_genl_dump_devices,
641                 .done = nfc_genl_dump_devices_done,
642                 .policy = nfc_genl_policy,
643         },
644         {
645                 .cmd = NFC_CMD_DEV_UP,
646                 .doit = nfc_genl_dev_up,
647                 .policy = nfc_genl_policy,
648         },
649         {
650                 .cmd = NFC_CMD_DEV_DOWN,
651                 .doit = nfc_genl_dev_down,
652                 .policy = nfc_genl_policy,
653         },
654         {
655                 .cmd = NFC_CMD_START_POLL,
656                 .doit = nfc_genl_start_poll,
657                 .policy = nfc_genl_policy,
658         },
659         {
660                 .cmd = NFC_CMD_STOP_POLL,
661                 .doit = nfc_genl_stop_poll,
662                 .policy = nfc_genl_policy,
663         },
664         {
665                 .cmd = NFC_CMD_DEP_LINK_UP,
666                 .doit = nfc_genl_dep_link_up,
667                 .policy = nfc_genl_policy,
668         },
669         {
670                 .cmd = NFC_CMD_DEP_LINK_DOWN,
671                 .doit = nfc_genl_dep_link_down,
672                 .policy = nfc_genl_policy,
673         },
674         {
675                 .cmd = NFC_CMD_GET_TARGET,
676                 .dumpit = nfc_genl_dump_targets,
677                 .done = nfc_genl_dump_targets_done,
678                 .policy = nfc_genl_policy,
679         },
680 };
681
682 static int nfc_genl_rcv_nl_event(struct notifier_block *this,
683                                  unsigned long event, void *ptr)
684 {
685         struct netlink_notify *n = ptr;
686         struct class_dev_iter iter;
687         struct nfc_dev *dev;
688
689         if (event != NETLINK_URELEASE || n->protocol != NETLINK_GENERIC)
690                 goto out;
691
692         pr_debug("NETLINK_URELEASE event from id %d\n", n->pid);
693
694         nfc_device_iter_init(&iter);
695         dev = nfc_device_iter_next(&iter);
696
697         while (dev) {
698                 if (dev->genl_data.poll_req_pid == n->pid) {
699                         nfc_stop_poll(dev);
700                         dev->genl_data.poll_req_pid = 0;
701                 }
702                 dev = nfc_device_iter_next(&iter);
703         }
704
705         nfc_device_iter_exit(&iter);
706
707 out:
708         return NOTIFY_DONE;
709 }
710
711 void nfc_genl_data_init(struct nfc_genl_data *genl_data)
712 {
713         genl_data->poll_req_pid = 0;
714         mutex_init(&genl_data->genl_data_mutex);
715 }
716
717 void nfc_genl_data_exit(struct nfc_genl_data *genl_data)
718 {
719         mutex_destroy(&genl_data->genl_data_mutex);
720 }
721
722 static struct notifier_block nl_notifier = {
723         .notifier_call  = nfc_genl_rcv_nl_event,
724 };
725
726 /**
727  * nfc_genl_init() - Initialize netlink interface
728  *
729  * This initialization function registers the nfc netlink family.
730  */
731 int __init nfc_genl_init(void)
732 {
733         int rc;
734
735         rc = genl_register_family_with_ops(&nfc_genl_family, nfc_genl_ops,
736                                            ARRAY_SIZE(nfc_genl_ops));
737         if (rc)
738                 return rc;
739
740         rc = genl_register_mc_group(&nfc_genl_family, &nfc_genl_event_mcgrp);
741
742         netlink_register_notifier(&nl_notifier);
743
744         return rc;
745 }
746
747 /**
748  * nfc_genl_exit() - Deinitialize netlink interface
749  *
750  * This exit function unregisters the nfc netlink family.
751  */
752 void nfc_genl_exit(void)
753 {
754         netlink_unregister_notifier(&nl_notifier);
755         genl_unregister_family(&nfc_genl_family);
756 }