Hello , dear list users.>From my module I am trying to register for the system suspend using the *register_pm_notifier(nb)* which is expanded to *blocking_notifier_chain_register(&pm_chain_head, nb).* ** I have a linker warning which tells "pm_chain_head" is undefined. I do see pm_chain_head in my /proc/kallsyms. What do I miss? Thank you.
On Tue, Feb 19, 2008 at 01:41:15PM +0200, Eugene Goubine wrote:> Hello , dear list users. > >From my module I am trying to register for the system suspend using the * > register_pm_notifier(nb)* > which is expanded to *blocking_notifier_chain_register(&pm_chain_head, nb).* > ** > I have a linker warning which tells "pm_chain_head" is undefined. I do > see pm_chain_head in my /proc/kallsyms. > What do I miss? Thank you.It''s hard to comment on it if you don''t attach the source code... At a guess, you tried using register_pm_notifier, that failed to link, so you tried to use the function that it calls, which won''t work since pm_chain_head is static to the kernel/power/main.c compilation unit. License your module under the GPL and add MODULE_LICENSE("GPL") and you''ll be able to use the register_pm_notifier export... regards, Kyle
Kyle, thanks for reffering,but it seems like GPL is not the case. I want to write a module to track netdevices present. Sort of a protocol sitting there. It is GPL''ed, but register_pm_notifier usage ( as you can see in sources) gives linker warning "pm_chain_head undefined",since register_pm_notifier is "static inline" and expanded to blocking_notifier_chain_unregister(&pm_chain_head, nb). Why do you say pm_chain_head is static there ? Is it because it is not exported by EXPORT_SYMBOL ? So what does it have to do with the license ( which is already GPL, but I just do not understand ). What should be my choices, if I want to stay within distro kernel. Thanks a lot. On Feb 19, 2008 5:53 PM, Kyle McMartin <kyle@mcmartin.ca> wrote:> On Tue, Feb 19, 2008 at 01:41:15PM +0200, Eugene Goubine wrote: > > Hello , dear list users. > > >From my module I am trying to register for the system suspend using the > * > > register_pm_notifier(nb)* > > which is expanded to *blocking_notifier_chain_register(&pm_chain_head, > nb).* > > ** > > I have a linker warning which tells "pm_chain_head" is undefined. I do > > see pm_chain_head in my /proc/kallsyms. > > What do I miss? Thank you. > > It''s hard to comment on it if you don''t attach the source code... > > At a guess, you tried using register_pm_notifier, that failed to link, > so you tried to use the function that it calls, which won''t work since > pm_chain_head is static to the kernel/power/main.c compilation unit. > > License your module under the GPL and add MODULE_LICENSE("GPL") and > you''ll be able to use the register_pm_notifier export... > > regards, Kyle >
On Tue, Feb 19, 2008 at 06:43:16PM +0200, Eugene Goubine wrote:> Kyle, thanks for reffering,but it seems like GPL is not the case. > I want to write a module to track netdevices present. > Sort of a protocol sitting there. It is GPL''ed, but register_pm_notifier > usage ( as you can see in sources) > gives linker warning "pm_chain_head undefined",since register_pm_notifier is > "static inline" and expanded > to blocking_notifier_chain_unregister(&pm_chain_head, nb). > Why do you say pm_chain_head is static there ? Is it because it is not > exported by EXPORT_SYMBOL ?What kernel are you building against? Do you have CONFIG_PM_SLEEP=y? cheers, Kyle> So what does it have to do with the license ( which is already GPL, but I > just do not understand ).nothing in particular, it''s just a linking restriction that might have bitten you if you didn''t know while writing your own module. (that there are two different kinds of export, i mean.)
Yes, every grep on SLEEP in .config is =y . The problem still persists. have no clue about possible direction. ( I have full source to compile eith etc..) On Feb 20, 2008 12:12 AM, Kyle McMartin <kyle@mcmartin.ca> wrote:> On Tue, Feb 19, 2008 at 06:43:16PM +0200, Eugene Goubine wrote: > > Kyle, thanks for reffering,but it seems like GPL is not the case. > > I want to write a module to track netdevices present. > > Sort of a protocol sitting there. It is GPL''ed, but register_pm_notifier > > usage ( as you can see in sources) > > gives linker warning "pm_chain_head undefined",since > register_pm_notifier is > > "static inline" and expanded > > to blocking_notifier_chain_unregister(&pm_chain_head, nb). > > Why do you say pm_chain_head is static there ? Is it because it is not > > exported by EXPORT_SYMBOL ? > > What kernel are you building against? Do you have CONFIG_PM_SLEEP=y? > > cheers, Kyle > > > > So what does it have to do with the license ( which is already GPL, but > I > > just do not understand ). > > nothing in particular, it''s just a linking restriction that might have > bitten you if you didn''t know while writing your own module. (that there > are two different kinds of export, i mean.) >