I am trying to find the difference between symbol_request() and symbol_get() macros used for getting external symbols defined in other kernel modules. In our code base, in some places we use symbol_request() and in some places symbol_get(). I looked at the kernel code but its not very straight-forward. From what I have read so far, the difference has something to do with synchronous/asynchronous calls, but its still unclear due to lack of proper documentation on this. So I have two questions.
What is the exact difference in functionality between symbol_request() and symbol_get() ?
The functionality I need is, if the external symbol was not returned (say the other module is not up yet), there has to be a mechanism to wait and try again or come back and get again later right before use. How can I achieve this?