Our apologies for the late notice, but RedHat has a set of
patches that apply to a xen-3.1.0 tarball to yield a set
of functioning pv-on-hvm drivers for RHEL3-U8 (& U9).
[A reduced set of patches would yield the same result w/3.1.2 .]
Our plans are to provide those patches to xen-devel in January,
after further cleanup (so they don't break 2.6 builds).
The patches have some similarities & differences to those listed
below. More specifically, they have what is described in 4, 5, & 6
(although I haven't had the time to compare the two implementations, but
a wheel typically comes out round ;-) ).
The patches differ in that h-file diffs are handled in the compat-include
directory. Additionally, the block device support is handled by a new
interfaces, reducing potential issues of modifying this code for
Linux 2.4 breaking Linux 2.6, or vice versa.
The patches don't include a build system as described below, which
sounds like a clean way to handle those diffs, and avoid 2.4 vs 2.6
over time (much like our separate block interface support split for 2.4
avoids conflicts/issues w/2.6).
The heavy lifting for this support was done by Herbert Xu.
I've been adding bug fixes and getting it into a clean set of patches
that can create an rpm that can be added to a rhel3 kernel,
as well as working with a number of testers asking for this support on
We'll look at the following patches in detail after the New Year.
(We turn into a pumpkin next week, and the fairy tale ends 1/2/08),
and see what we can meld into a patch set that takes the best
of both worlds.
Ben Guthro 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
Changes were made in two areas. Files were changed in the unmodified
well as the sparse tree. The latter corresponds to the drivers/xen
the Linux 2.6.18 kernel and will be referred to as the "Linux driver
the remainder of this note.
In the unmodified tree, changes were related to build system
addition of missing header files, implementation of the generic
code for kernel 2.4 and all other nuggets required to compile front
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
macros and replacement of APIs which evolved, were added or removed
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
directives were added. One instance of this is disk geometry
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
used. The main Makefile for each driver references appropriate "K"
depending on the kernel version the driver is being built for.
2. Nonexistent header files. Header files included in front end
do not exist under kernel 2.4 were replaced by dummy headers.
turn, include compatibility headers to further resolve differences
kernel 2.4 and 2.6. Dummy header files reside in the
3. Block interface. Changed APIs are handled through compatibility
names are usually of the form compat_<original function name>(). This
a. end request processing; Note that some of these macros take the
number of arguments as original 2.6 APIs. The change of name is
because, while the corresponding 2.4 API exists, the number or
arguments might have changed. This is the case for
end_that_request_first(), for example. Additionally, as also
be the case with this particular API, the way in which some APIs
called varies between kernels 2.4 and 2.6. Specifically, under
2.6, end_that_request_first() is called once with a pointer to
being currently processed. The rest is done by the kernel.
under kernel 2.4, this API is called repeatedly until a certain
code is obtained (which signals that the kernel is done with the
request). This difference of having to call it once (2.6) or,
potentially, many times (2.4) is covered in the corresponding
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
e. resolution of the generic disk pointer
4. Work queue interface. This is now implemented using scheduler
5. Kernel thread interface. Those interfaces which are not defined
2.4 are implemented in the compatibility header file using 2.4
6. Generic device model. A simplified version of device model
implemented to allow front end drivers to compile under kernel
required structures appear in the compatibility header file. All 2.4
versions of device model interfaces are implemented in
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
compatibility header is included. This file, named kerncompat.h is
unconditionally and contains all compatibility macros used in front
drivers. Moreover, kerncompat.h conditionally includes
just as it was done in the original front end driver code.
usage of kerncompat.h is necessary to give front end drivers access to
2. Disk driver initialization and setup. Blocks of code needed to
generic disk operation were added and are compiled for kernels
3. Partition processing. Blocks of code needed to process partition
updates and geometry inquires were added. These are conditionally
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