request_fn in 2.4?

request_fn in 2.4?

Post by Andy Jeffrie » Wed, 25 Apr 2001 18:44:52



I am trying to write a 2.4 device driver but (basing it on the code in
Linux Device Drivers by Mr Rubini) it complains about blk_dev[MAJOR] nor
having a member named request_fn.

I see from some of the kernel source code that there is a new style for
request functions, something called make_request_fn.  But I can't find
any documentation on how to port it (or how to write 2.4 drivers from
scratch).

Any web sites or pointers anyone?

--
Andy Jeffries
Lead-developer of Scramdisk for Linux
Developer of original Scramdisk Delphi Component

 
 
 

request_fn in 2.4?

Post by Peter T. Breue » Wed, 25 Apr 2001 22:59:35



> I am trying to write a 2.4 device driver but (basing it on the code in
> Linux Device Drivers by Mr Rubini) it complains about blk_dev[MAJOR] nor
> having a member named request_fn.
> I see from some of the kernel source code that there is a new style for
> request functions, something called make_request_fn.  But I can't find
> any documentation on how to port it (or how to write 2.4 drivers from
> scratch).

The documentation IS the code. Look at examples of use in the other
drivers. Or just read the registration code itself. It should be plain to
you then.

Peter

 
 
 

request_fn in 2.4?

Post by Andy Jeffrie » Wed, 25 Apr 2001 23:10:34


Quote:>> I am trying to write a 2.4 device driver but (basing it on the code in
>> Linux Device Drivers by Mr Rubini) it complains about blk_dev[MAJOR]
>> nor having a member named request_fn.

>> I see from some of the kernel source code that there is a new style for
>> request functions, something called make_request_fn.  But I can't find
>> any documentation on how to port it (or how to write 2.4 drivers from
>> scratch).

> The documentation IS the code. Look at examples of use in the other
> drivers. Or just read the registration code itself. It should be plain
> to you then.

You're obviously a much more experienced Kernel hacker than I!!  I can
read C code well, but trying to pick up structures and function calls
that are embedded in the Kernel (during odd moments in my day-job) is
damn hard.

Someone on IRC did point me to a good porting guide though:

http://linuxkernel.to/module/port-2.4/eng/lkp.html

--
Andy Jeffries
Lead-developer of Scramdisk for Linux
Developer of original Scramdisk Delphi Component

 
 
 

request_fn in 2.4?

Post by Peter T. Breue » Thu, 26 Apr 2001 00:09:29



>>> I am trying to write a 2.4 device driver but (basing it on the code in
>>> Linux Device Drivers by Mr Rubini) it complains about blk_dev[MAJOR]
>>> nor having a member named request_fn.

>>> I see from some of the kernel source code that there is a new style for
>>> request functions, something called make_request_fn.  But I can't find
>>> any documentation on how to port it (or how to write 2.4 drivers from
>>> scratch).

>> The documentation IS the code. Look at examples of use in the other
>> drivers. Or just read the registration code itself. It should be plain
>> to you then.
> You're obviously a much more experienced Kernel hacker than I!!  I can
> read C code well, but trying to pick up structures and function calls
> that are embedded in the Kernel (during odd moments in my day-job) is
> damn hard.

The function I think you are asking about is this one following, and it
seems perfectly documented in the code to me!

/**
 * blk_init_queue  - prepare a request queue for use with a block device


 *        placed on the queue.
 *
 * Description:
 *    If a block device wishes to use the standard request handling procedures,
 *    which sorts requests and coalesces adjacent requests, then it must

 *    are requests on the queue that need to be processed.  If the device

 *    are available on the queue, but may be called at some time later instead.
 *    Plugged queues are generally unplugged when a buffer belonging to one
 *    of the requests on the queue is needed, or due to memory pressure.
 *

 *    queue, but only as many as it can handle at a time.  If it does leave
 *    requests on the queue, it is responsible for arranging that the requests
 *    get dealt with eventually.
 *
 *    A global spin lock $io_request_lock must be held while manipulating the
 *    requests on the request queue.
 *
 *    The request on the head of the queue is by default assumed to be
 *    potentially active, and it is not considered for re-ordering or merging
 *    whenever the given queue is unplugged. This behaviour can be changed with
 *    blk_queue_headactive().
 *
 * Note:
 *    blk_init_queue() must be paired with a blk_cleanup-queue() call
 *    when the block device is deactivated (such as at module unload).
 **/
void blk_init_queue(request_queue_t * q, request_fn_proc * rfn)
{
  ....

Quote:}

It seems to me to be transparant! You should now go and search for the
type request_fn_proc to see what kind of thing you have to define, and
look at some examples in other drivers.

Quote:> Someone on IRC did point me to a good porting guide though:
> http://linuxkernel.to/module/port-2.4/eng/lkp.html

I think I have seen this, but didn't find it useful ... it does
cover a question related to yours about block device registration,
however. The style of this document is 95% code and 5% commentary,
so I think the kernel code itself is more talkative.

Peter