From: Ben Guthro <bguthro@virtualiron.com>
To: Keir Fraser <Keir.Fraser@cl.cam.ac.uk>
Cc: Paul Burkacki <pburkacki@virtualiron.com>,
xen-devel <xen-devel@lists.xensource.com>
Subject: Re: [PATCH 0/2][PV-on-HVM] Enable Front-end drivers for 2.4 kernels
Date: Wed, 19 Dec 2007 07:26:09 -0500 [thread overview]
Message-ID: <47690DE1.7070402@virtualiron.com> (raw)
In-Reply-To: <C38EA566.1A05F%Keir.Fraser@cl.cam.ac.uk>
[-- Attachment #1.1: Type: text/plain, Size: 6182 bytes --]
We tried to minimize the "ifdef mess" as much as possible to be
encapulated in as few places as possible.
Which parts in particular concern you? If you could propose some
suggestions - we could try another rev.
How would this patch lead to code divergence as submitted?
An ideal solution would be a 2.4.*-xen.hg tree which would support both
PV, and PV-on-HVM solutions. However, that was not the goal of these
patches.
Keir Fraser wrote:
> That's a lot of ifdef mess for a feature that most people probably don't
> want. I'm not sure what the right answer is for those who *do* want it. A
> driver kit for Linux 2.4 would be neat, but could just lead to code
> divergence.
>
> -- Keir
>
>
> On 19/12/07 01:07, "Ben Guthro" <bguthro@virtualiron.com> wrote:
>
>
>> This patch enables front end drivers to build under Linux 2.4. Specifically,
>> the 2.4.21-47 kernel is used. This corresponds to RedHat Linux 3 update 8
>> release.
>>
>> Changes were made in two areas. Files were changed in the unmodified
>> tree as
>> well as the sparse tree. The latter corresponds to the drivers/xen tree in
>> the Linux 2.6.18 kernel and will be referred to as the "Linux driver
>> tree" in
>> the remainder of this note.
>>
>> In the unmodified tree, changes were related to build system modifications,
>> addition of missing header files, implementation of the generic device model
>> code for kernel 2.4 and all other nuggets required to compile front end
>> drivers
>> under kernel 2.4.
>>
>> In the Linux driver tree, changes made were located almost entirely in
>> the front
>> end drivers area. Most of these were related to implementation of
>> compatibility
>> macros and replacement of APIs which evolved, were added or removed between
>> kernels 2.4 and 2.6. Where a one to one replacement of a specific call
>> was not
>> possible, blocks of code surrounded by kernel version specific preprocessor
>> directives were added. One instance of this is disk geometry processing.
>>
>> Below is a more detailed list of changes made in the unmodified tree.
>>
>> 1. Build system. For each Kbuild file in the front driver area, a
>> corresponding K24build file has been created. There, 2.4 style
>> targets are
>> used. The main Makefile for each driver references appropriate "K" file
>> depending on the kernel version the driver is being built for.
>> 2. Nonexistent header files. Header files included in front end drivers
>> which
>> do not exist under kernel 2.4 were replaced by dummy headers. These, in
>> turn, include compatibility headers to further resolve differences
>> between
>> kernel 2.4 and 2.6. Dummy header files reside in the
>> compat-include/linux
>> tree.
>> 3. Block interface. Changed APIs are handled through compatibility
>> macros whose
>> names are usually of the form compat_<original function name>(). This
>> applies to:
>> a. end request processing; Note that some of these macros take the same
>> number of arguments as original 2.6 APIs. The change of name is
>> necessary
>> because, while the corresponding 2.4 API exists, the number or type of
>> arguments might have changed. This is the case for
>> end_that_request_first(), for example. Additionally, as also
>> happens to
>> be the case with this particular API, the way in which some APIs are
>> called varies between kernels 2.4 and 2.6. Specifically, under kernel
>> 2.6, end_that_request_first() is called once with a pointer to the
>> request
>> being currently processed. The rest is done by the kernel. However,
>> under kernel 2.4, this API is called repeatedly until a certain return
>> code is obtained (which signals that the kernel is done with the
>> current
>> request). This difference of having to call it once (2.6) or,
>> potentially, many times (2.4) is covered in the corresponding
>> compatibility macro.
>> b. geometry calculations
>> c. references to bio and bio_vec structures are now translated into
>> references to buffer_head structures
>> d. resolution of driver's private data area pointer (struct blkfront_info
>> pointer)
>> e. resolution of the generic disk pointer
>> 4. Work queue interface. This is now implemented using scheduler task
>> queue.
>> 5. Kernel thread interface. Those interfaces which are not defined
>> under kernel
>> 2.4 are implemented in the compatibility header file using 2.4
>> versions of
>> thread functions.
>> 6. Generic device model. A simplified version of device model
>> interfaces was
>> implemented to allow front end drivers to compile under kernel 2.4. All
>> required structures appear in the compatibility header file. All 2.4
>> versions of device model interfaces are implemented in
>> platform-compat.c in
>> platform-pci.o driver.
>>
>> This list details changes made in the Linux driver tree.
>>
>> 1. Generic kernel compatibility header file. Instead of including
>> xen/platform-compat.h which is compiled in only conditionally, a generic
>> compatibility header is included. This file, named kerncompat.h is
>> included
>> unconditionally and contains all compatibility macros used in front end
>> drivers. Moreover, kerncompat.h conditionally includes platform-compat.h
>> just as it was done in the original front end driver code. Unconditional
>> usage of kerncompat.h is necessary to give front end drivers access to
>> compatibility macros.
>> 2. Disk driver initialization and setup. Blocks of code needed to handle
>> generic disk operation were added and are compiled for kernels below
>> 2.6.0.
>> 3. Partition processing. Blocks of code needed to process partition table
>> updates and geometry inquires were added. These are conditionally
>> compiled
>> for kernels below 2.6.0 only.
>>
>>
>> Signed-off-by: Paul Burkacki <pburkacki@virtualiron.com>
>> Signed-off-by: Ben Guthro <bguthro@virtualiron.com>
>>
>>
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@lists.xensource.com
>> http://lists.xensource.com/xen-devel
>>
>
>
>
[-- Attachment #1.2: Type: text/html, Size: 6707 bytes --]
[-- Attachment #2: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
next prev parent reply other threads:[~2007-12-19 12:26 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-19 1:07 [PATCH 0/2][PV-on-HVM] Enable Front-end drivers for 2.4 kernels Ben Guthro
2007-12-19 10:39 ` Keir Fraser
2007-12-19 12:26 ` Ben Guthro [this message]
2007-12-19 14:26 ` Keir Fraser
2007-12-21 3:45 ` Don Dutile
2008-02-07 14:53 ` Ben Guthro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=47690DE1.7070402@virtualiron.com \
--to=bguthro@virtualiron.com \
--cc=Keir.Fraser@cl.cam.ac.uk \
--cc=pburkacki@virtualiron.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.