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

Re: [Xen-devel] [PATCH 0/2][PV-on-HVM] Enable Front-end drivers for 2.4 kernels



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@xxxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxx>
Signed-off-by: Ben Guthro <bguthro@xxxxxxxxxxxxxxx>


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
    


  

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.