Re: How to get the hci_dev from an adv instance's work struct in a linked list?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Florian,

> On Wed, Apr 1, 2015 at 7:13 PM, Florian Grandel <fgrandel@xxxxxxxxx> wrote:
> Hi!
>
> I got quite far today refactoring from
>
> struct hci_dev { ... struct adv_info adv_instance; ... };
>
> to
>
> struct hci_dev { ... struct list_head adv_instances; ... };
>
> But in the end I got stuck on refactoring the adv timeout callback.
> Originally it looked like this:
>
> static void adv_timeout_expired(struct work_struct *work)
> {
>   struct hci_dev *hdev = container_of(work, struct hci_dev,
>                                       adv_instance.timeout_exp.work);
>   ...
> }
>
> But now I would have to construct a pointer to the hci_dev struct from a
> list entry:
>
> static void adv_timeout_expired(struct work_struct *work)
> {
>   struct adv_info *adv_instance = container_of(work, struct adv_info,
>                                                timeout_exp.work);
>   ...
> }
>
> I couldn't find a way to get the list head of the adv info list entry so
> that I could retrieve its containing hci_dev structure, though.
>

Once simple solution is to add a struct hci_dev pointer to struct
adv_info. Once you get the pointer to the instance then you can obtain
the hci_dev pointer that way.

> How would I construct the required hci_dev struct from the work pointer in
> this case? Any ideas?
>
> Florian
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth"
> in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Thanks,
Arman
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux