Re: can not resolve global kernel variable.

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

 



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@xxxxxxxxxxx> 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


MODULE_LICENSE("GPL"); 


static int pm_event(struct notifier_block *this, unsigned long event,void *ptr)
{

   
   return NOTIFY_OK;
}



static int netdev_event(struct notifier_block *this, unsigned long event,void *ptr)
{
   struct net_device *net_dev = (struct net_device *)ptr;
  
   DEBUGP_P1(DL_TRACE,"Device %s\n",net_dev->name);
   switch (event){

      case NETDEV_DOWN:
            DEBUGP(DL_TRACE,"NETDEV_DOWN\n");
            break;

      case  NETDEV_REGISTER:
            DEBUGP(DL_TRACE,"NETDEV_REGISTER\n");
            break;

      case  NETDEV_UP:
            DEBUGP(DL_TRACE,"NETDEV_UP\n");   
            break;

      case  NETDEV_CHANGE:
            DEBUGP(DL_TRACE,"NETDEV_CHANGE\n");
            break;

      case  NETDEV_UNREGISTER:
            DEBUGP(DL_TRACE,"NETDEV_UNREGISTER\n");
            break;
            
      default:
            DEBUGP(DL_TRACE,"Unknown netdev notification\n");
            break;
   }      
    
   return NOTIFY_OK;
}

struct notifier_block net_device_notifier = {
   .notifier_call = netdev_event
};



struct notifier_block powerm_notifier = {
   .notifier_call = pm_event
};




static int proto_init(void)
{  
   
   int i = 0;
   DEBUGP(DL_TRACE,"---->wibrouio_init\n");

   i = register_netdevice_notifier(&net_device_notifier); 


   // TODO: FIX THIS .DOES NOT WORK ! WHY? 
    //i = register_pm_notifier(&powerm_notifier);
  
   DEBUGP(DL_TRACE,"<----wibrouio_init\n");
   return 0;
  
}  

static void proto_exit(void)
{
   DEBUGP(DL_TRACE,"---->wibrouio_exit\n");
   unregister_netdevice_notifier(&net_device_notifier);

   // TODO: FIX THIS .DOES NOT WORK ! WHY? 
   //unregister_pm_notifier(&powerm_notifier);
   
   DEBUGP(DL_TRACE,"---->wibrouio_exit\n");
   
}

module_init(proto_init);
module_exit(proto_exit);

_______________________________________________
Fedora-kernel-list mailing list
Fedora-kernel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/fedora-kernel-list

[Index of Archives]     [Fedora General Discussion]     [Older Fedora Users Archive]     [Fedora Advisory Board]     [Fedora Security]     [Fedora Devel Java]     [Fedora Legacy]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Mentors]     [Fedora Package Announce]     [Fedora Package Review]     [Fedora Music]     [Fedora Packaging]     [Centos]     [Fedora SELinux]     [Coolkey]     [Yum Users]     [Tux]     [Yosemite News]     [KDE Users]     [Fedora Art]     [Fedora Docs]     [USB]     [Asterisk PBX]

  Powered by Linux