<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Horms</title>
		<link>http://www.vergenet.net/~horms</link>
		<description>Themable Horms!</description>
		<language>en</language>
		<lastBuildDate>Fri, 12 Dec 2008 17:35:11 +1100</lastBuildDate>
		<generator>Horms' genBlog v0.1</generator>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<ttl>60</ttl>
		<skipHours>
			<hour>15</hour>
			<hour>16</hour>
			<hour>17</hour>
			<hour>18</hour>
			<hour>19</hour>
			<hour>20</hour>
			<hour>21</hour>
			<hour>22</hour>
			<hour>23</hour>
			<hour>0</hour>
			<hour>1</hour>
			<hour>13</hour>
			<hour>14</hour>
		</skipHours>
		<item>
			<guid isPermaLink='false'>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-12-12T17_35_11.txt</guid>
			<link>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-12-12T17_35_11.txt</link>
			<pubDate>Fri, 12 Dec 2008 17:35:11 +1100</pubDate>
			<title>PCI Virtualisation Terminology</title>
			<description>
				<![CDATA[
				<img src="http://www.verge.net.au/~horms/pleb_blossom/pics/2-4129.jpg"
				 width="115" height="76" alt="[Wall in Montreal]" align="left">
				<p>
				My last post was titled
				"Building qemu-dm for HVM VT-d PCI Pass-Through",
				a piece about building a component of Xen. But what does all
				this terminology mean?
				<p>
				Firstly, a very brief overview of the Xen architecture.  The three main
				components of a system running Xen are the hypervisor, privileged domains
				and unprivileged domains.  The hypervisor is run when the system first
				boots and controls access to the hardware. Privileged domains essentially
				provide both drivers and a management interface to xen. Usually there is
				one privileged domain, called dom0. They hypervisor by itself is not a
				functional system and generally the hypervisor + dom0 is required to
				boot the system. Unprivileged domains are the guest OSes on the system,
				often referred to as domU. As the name suggests they generally have to
				access hardware via the hypervisor - which may delegate the task to a
				privileged domain.
				<p>
				Xen supports two methods of domain (guest) virtualisation.
				In the beginning there were paravirtualised (PV) domains.
				In paravirtualised domains portions of the guest OS that execute
				privileged instructions are replaced by hypercalls.
				The hypercall asks the hypervisor to perform the relevant action.
				At the time that Xen was originally developed this was the
				only type of virtualisation that was possible on x86 and ia64.
				<p>
				With the advent of Intel's VT-x for x86 and VT-i for ia64, and AMD's AMD-V
				it has became possible to run unmodified operating systems as guests. This
				is called full-virtualisation or hardare virtual machine (HVM). It has
				obvious advantages when the guest operating sytem can't be modified.
				<p>
				There are several techniques used to give unprivileged domains access to PCI
				devices.  For PV domains the common approach is to split the driver into
				front-end and back-end portions. The front-end driver sits in the
				unprivileged domain and the back-end driver sits in a privileged domain.
				The front-end driver communicates with the back-end driver. And the
				back-end driver communicates with the hardware. The back-end driver may
				multiplex IO from multiple front-end drivers. And thus a PCI device may be
				shared between domains.
				<p>
				Another approach used with PV domains is PCI pass-through. This basically
				involves giving a PCI device exclusively to an unprivileged domain.
				The advantage of this is a potential performance
				increase, as I/O no longer has to go through a back-end driver sitting
				in a privileged domain. The disadvantages of this approach are:
				<ol>
				<li>The PCI device in question can no longer be shared between domains
				<li>Hotplug needs to be used to achieve live migration -
				    not all devices are supported
				<li>As the owner of a PCI card can potentially DMA main memory,
				    passing through a PCI device to an unprivileged domain effectively
				    makes the domain privileged
				</ol>
				<p>
				Systems that have Intel VT-d have IOMMU capabilities. The IOMMU constrains
				the area to with a device passed-through to a guest may DMA. Which
				removes the security problem relating to passing-through PCI devices
				to unprivileged guests. Xen allows pass-through to paravirtualised
				to optionally use the IOMMU if present.
				<p>
				For fully virtualised domains devices are commonly emulated.
				This is done by running the device emulation code from qemu as
				<tt>qemu-dm</tt> in a privileged domain.
				In order to improve I/O performance in fully virtualised domains
				it is possible to use PV drivers. These essentially provide
				front-end drivers to fully virtualised domains.
				And with the advent of Intel's VT-d it is possible to pass-through PCI
				devices to fully virtualised domains.
				<br clear="left">
				]]>
			</description>
		</item>
		<item>
			<guid isPermaLink='false'>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-12-12T16_58_52.txt</guid>
			<link>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-12-12T16_58_52.txt</link>
			<pubDate>Fri, 12 Dec 2008 16:58:52 +1100</pubDate>
			<title>Building qemu-dm for HVM VT-d PCI Pass-Through</title>
			<description>
				<![CDATA[
				<img src="http://www.verge.net.au/~horms/pleb_blossom/pics/4-3682.jpg"
				 width="115" height="76" alt="[Wall in Montreal]" align="right">
				<p>
				If you are building the <tt>qemu-dm</tt>, device models for xen, from <a
				href="http://xenbits.xensource.com/git-http/qemu-xen-unstable.git">
				http://xenbits.xensource.com/git-http/qemu-xen-unstable.git</a> or the
				<tt>tools/ioemu-dir/</tt> directory that is created when building
				<a href="http://xenbits.xensource.com/xen-unstable.hg">http://xenbits.xensource.com/xen-unstable.hg</a>
				(due to the wonders of the xen build system, they are the same thing).  And
				you are doing this on Debian.  And you would like PCI pass-through to work
				for HVM domains.  Then make sure you have the <tt>libpci-dev</tt> package
				installed before building.  Otherwise <tt>qemu-dm</tt> will be built
				without pass-through support.  If you install <tt>libpci-dev</tt> after
				building then run make clean before rebuilding, to ensure that all files
				are rebuilt correctly - they won't be otherwise.
				<p>
				If you do this then the instructions in the
				<a href="http://wiki.xensource.com/xenwiki/VTdHowTo">Xen VT-d How-To</a>
				should work.
				<p>
				Otherwise you will end up the following nasty message, which just cost me
				more time than I care to admit, in
				<tt>/var/log/xen/xend.log</tt>
				<pre>
				ERROR (XendDomainInfo:581) Device model didn't tell the vslots for PCI device
				</pre>
				 
				<p>
				On a semi-related note, if you wish to use VT-d PCI pass-through in
				paravirtualised domains then pass <tt>iommu=pv</tt> as an argument to xen when
				booting.  Otherwise non-VT-d pass-through will be used for paravirtualised
				domains.  This is independent whether <tt>qemu-dm</tt> was compiled with
				<tt>libpci-dev</tt> present or not.
				<br clear="right">
				]]>
			</description>
		</item>
		<item>
			<guid isPermaLink='false'>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-10-19T21_32_53.txt</guid>
			<link>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-10-19T21_32_53.txt</link>
			<pubDate>Sun, 19 Oct 2008 21:32:53 +1100</pubDate>
			<title>Sculpture by the Sea</title>
			<description>
				<![CDATA[
				<a href="http://www.vergenet.net/~horms/gallery/sculpture-by-the-sea-2008-10/"><img
				 src="http://www.vergenet.net/~horms/pleb_blossom/pics/5-4895.jpg"
				 alt="[A Sculpture by the Sea]" width="115" height="79" align="left"></a>
				<p>
				Today was a beautiful pre-summer day in Sydney and Chiz and I went
				to see Sculpture by the Sea, which is held on the coastal walk
				between Bondi and Tamarama Beaches.
				<p>
				<a href="http://www.vergenet.net/~horms/gallery/sculpture-by-the-sea-2008-10/">photos</a>
				<br clear="left">
				]]>
			</description>
		</item>
		<item>
			<guid isPermaLink='false'>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-10-13T21_56_15.txt</guid>
			<link>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-10-13T21_56_15.txt</link>
			<pubDate>Mon, 13 Oct 2008 21:56:15 +1100</pubDate>
			<title>Perisher Ski Trip</title>
			<description>
				<![CDATA[
				<a href="http://www.vergenet.net/~horms/gallery/perisher-2008-08/"><img
				 src="http://www.vergenet.net/~horms/pleb_blossom/pics/2008-08-24-142723.0.jpg"
				 alt="[Tree in the Snow]" width="115" height="86" align="right"></a>
				Some photos from our ski trip to Perisher in August.
				<a href="http://www.vergenet.net/~horms/gallery/perisher-2008-08/">more...</a>
				<br clear="right">
				]]>
			</description>
		</item>
		<item>
			<guid isPermaLink='false'>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-10-05T13_20_59.txt</guid>
			<link>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-10-05T13_20_59.txt</link>
			<pubDate>Sun, 05 Oct 2008 13:20:59 +1100</pubDate>
			<title>Struan and Genny's Wedding</title>
			<description>
				<![CDATA[
				<p>
				<a href="http://www.vergenet.net/~horms/gallery/struan-and-genny-wedding/">
				 <img src="http://www.vergenet.net/~horms/pleb_blossom/pics/5_4330.jpg"
				  width=320 height=302 alt="[Struan and Genny]"></a>
				<p>
				Yesterday Chiz and I had the pleasure to gather together with
				Struan and Genny's friends and family for their wedding
				in the Royal Botanical Gardens in Sydney. It was a wet morning
				but the weather cleared just in time for the event. I took
				a few snaps of the occasion.
				<a href="http://www.vergenet.net/~horms/gallery/struan-and-genny-wedding/">more...</a>
				<p>
				I also have some snaps of the Skydiving that took place
				in Picton two weeks ago as part of Struan's bucks party.
				<a href="http://www.vergenet.net/~horms/gallery/skydiving-2008/">more...</a>
				]]>
			</description>
		</item>
		<item>
			<guid isPermaLink='false'>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-09-25T21_45_19.txt</guid>
			<link>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-09-25T21_45_19.txt</link>
			<pubDate>Thu, 25 Sep 2008 21:45:19 +1000</pubDate>
			<title>Xen Netfront/Netback Transmit Flow-Control</title>
			<description>
				<![CDATA[
				<blockquote>
				    Flow-control is implemented from netfront all the way to
				    the end of life for a packet, typically transmit in the
				    destination interface.
				</blockquote>
				<h4>Introduction</h4>
				<p>
				This post explains briefly how flow-control is implemented in
				netfront/netback.  The paths examined are for the case where dom0 bridges
				traffic from netback to the destination interface. The same logic should
				also hold for packets from netback that are routed by dom0.
				<p>
				Netback/Netfont is used to provide networking to paravirtualised
				domain&nbsp;Us. Thus, much of this discussion is not applicable to
				fully-virtualised domains, also known as HVM domains.
				<p>
				<center>
				<a href="http://www.vergenet.net/~horms/pleb_blossom/pics/xen-net.dot"
				<img src="http://www.vergenet.net/~horms/pleb_blossom/pics/xen-net.png"
				 width=592 height=400 alt="[Three domUs bridged to a single physical
				 interface. vif interfaces correspond to Netback. eth0 interfaces
				 correspond to Netfront. peth0 is the physical NIC. xenbr0 is the bridge]"></a>
				</center>
				<p>
				The code reference is from the linux-2.6.18-xen tree on
				xenbits.xensource.com, around the time of the Xen 3.3 release.
				<p>
				This analysis is based upon the notion of domU sending a stream
				of packets as fast as it can. There is no congestion control,
				no packet filtering, and the CPU(s) of domU are fast enough to
				processes packets as fast as the physical interface can send them
				without dropping any packets. Furthermore there are no return packets.
				In short, the notion is of UDP packets being blindly sent by domU.
				<h4>The Netfront/Netback Ring-Buffer</h4>
				<p>
				Packets are received by netback from netfront using a ring-buffer
				that is implemented as a grant table. Typically there are 256 slots
				in this buffer. And once it becomes full netfront can no longer send
				packets.
				<p>
				The relevant netfront code in the reference netfront implementation is
				in <tt>drivers/xen/netfront/netfront.c:network_start_xmit()</tt>.
				<pre>
				        if (!netfront_tx_slot_available(np))
						netif_stop_queue(dev);
				</pre>
				<p>
				For each packet transmitted by netfront to netback, one ring-buffer slot
				is used for header information and one additional slot is used per fragment.
				So in the common case of a packet with one fragment (that is, an
				unfragmented packet), two slots will be used.
				<p>
				<center>
				<a href="http://www.vergenet.net/~horms/pleb_blossom/pics/xen-ring-buffer.dot"
				<img src="http://www.vergenet.net/~horms/pleb_blossom/pics/xen-ring-buffer.png"
				 width=400 height=237 alt="[Netback/Netfront Ring-Buffer]"></a>
				</center>
				<p>
				Assuming that the number of packets to be sent is significantly greater
				than the number of slots in ring-buffer, the rate at which netfront can
				send packets will be the same as the rate at which netback frees slots
				in the ring-buffer. So the ring-buffer provides a mechanism for netback to
				enforce flow-control on netfront.
				<p>
				Strictly speaking the above logic applies to fragments not packets.
				But as it is common to have unfragmented packets it seems more comfortable
				to talk in terms of packets.
				<h4>Packet processing in Netback</h4>
				<p>
				Once all fragments for a packet have been received by netback from netfront
				via the ring-buffer it packs them into an </tt>sk_buff</tt>, the structure
				that the Linux networking code uses to represent packets.  This work is done by
				<tt>drivers/xen/netback/netback.c:net_tx_action()</tt>.
				<p>
				At this point the slot used in the ring-buffer for header information is
				queued to be released for reused by netfront.  This is done by calling
				<tt>drivers/xen/netback/netback.c:netif_idx_release()</tt>. The release
				queue is processed by calling <tt>net_tx_action_dealloc()</tt> the next
				time that <tt>net_tx_action()</tt> is called.
				<p>
				<center>
				<a href="http://www.vergenet.net/~horms/pleb_blossom/pics/xen-netback-packet.dot"
				<img
				 src="http://www.vergenet.net/~horms/pleb_blossom/pics/xen-netback-packet.png"
				 width=400 height=280 alt="[Packets Received in Netback]"></a>
				</center>
				<p>
				The ring-buffer slot associated with each fragment contains a page which in
				turn contains the data for the fragment. This page is associated with a
				fragment within the sk_bufs created for the packet. This work is done by
				<tt>drivers/xen/netback/netback.c:netbk_fill_frags()</tt> which is called
				by <tt>net_tx_action()</tt>. The critical line is:
				<p>
				<pre>
					frag->page = virt_to_page(idx_to_kaddr(pending_idx));
				</pre>
				<p> Once all fragments have been added to the sk_buff it is passed to the
				Linux networking core using <tt>net/</tt>core/dev.c:netif_rx()</tt>.
				At this point the packet has been received by the netback device driver.
				<p>
				Usually <tt>netif_rx()</tt> will simply move the sk_buff onto a
				received queue and schedule processing of the queue if it
				is not scheduled already. In any case, sk_buff will end up being
				destroyed, either after bing transmitted or being dropped -
				for example because of packet filtering rules.
				<h4>Notification of the Completion of Packet Processing</h4>
				<p>
				At this point a packet is in the Linux networking core in in the form of an
				<tt>sk_buff</tt>.  The page that was associated with each fragment of each
				<tt>sk_buff</tt> in netback by <tt>netbk_fill_frags()</tt> have a
				particular property that is of relevance to flow-control. These pages are
				members of <tt>drivers/xen/netback/netback.c:mmap_pages[]</tt> which is set
				up in <tt>drivers/xen/netback/netback.c:netback_init()</tt>. Each member of
				<tt>mmap_pages[]</tt> is marked as foreign and has
				<tt>drivers/xen/netback/netback.c:netif_page_release()</tt> set as its
				destructor using <tt>include/linux/page-flags.h:SetPageForeign()</tt>.
				<p>
				<pre>
					SetPageForeign(page, netif_page_release);
				</pre>
				<p>
				When an sk_buff is freed, the destructor is called for each page that has
				both been associated with a fragment within the sk_buff and marked as
				foreign using <tt>SetPageForeign()</tt>.  This is done in
				<tt>mm/page_alloc.c:free_hot_cold_page()</tt>.
				<p>
				<pre>
				#ifdef CONFIG_XEN
					if (PageForeign(page)) {
						PageForeignDestructor(page);
						return;
					}
				#endif
				</pre>
				<p>
				<tt>sk_buffs</tt> are freed <tt>using kfree_skb()</tt>, the call path from there
				to <tt>free_hot_cold_page()</tt> is:
				<p>
				<table align="center">
				<tr>
				<td>
				&nbsp;&nbsp;&nbsp;&nbsp<tt>net/core/skbuf.c:kfree_skb()</tt><br>
				&#10230;&nbsp;<tt>net/core/skbuf.c:__kfree_skb()</tt><br>
				&nbsp;&#10230;&nbsp;<tt>net/core/skbuf.c:kfree_skbmem()</tt><br>
				&nbsp;&nbsp;&#10230;&nbsp;<tt>net/core/skbuf.c:skb_release_data()</tt><br>
				&nbsp;&nbsp;&nbsp;&#10230;&nbsp;<tt>mm/swap.c:put_page()</tt><br>
				&nbsp;&nbsp;&nbsp;&nbsp;&#10230;&nbsp;<tt>mm/swap.c:__page_cache_release()</tt><br>
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#10230;&nbsp;<tt>mm/page_alloc.c:free_hot_page()</tt><br>
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#10230;&nbsp;<tt>mm/page_alloc.c:free_hot_cold_page()</tt>
				</table>
				<p>
				Thus when an <tt>sk_buff</tt> is freed, for any reason,
				<tt>netif_page_release()</tt> will
				be called. It simply calls <tt>netif_idx_release()</tt>, which as discussed
				above queues a ring-buffer slot up to be released for reuse by netfront.
				This freeing will typically take place in the physical NIC's driver,
				when the packet is transmitted on the physical interface.
				<p>
				<center>
				<a href="http://www.vergenet.net/~horms/pleb_blossom/pics/xen-dom0-packet.dot"
				<img
				 src="http://www.vergenet.net/~horms/pleb_blossom/pics/xen-dom0-packet.png"
				 width=448 height=280 alt="[Netback Generated sk_buff's Life-Cyle]"></a>
				</center>
				<h4>Netfront to Destination Interface Flow-Control</h4>
				<p>
				As <tt>sk_buff</tt>s are generally freed as packets are transmitted on the
				physical interface, the rate at which slots are freed relates to the rate
				at which packets are sent. Thus the rate at which netfront can send
				packets is effectively the rate at which the destination interface, usually
				a physical ethernet interface, can sent packets, assuming the dom0 CPU can
				keep up.
				<p>
				The following diagram shows the usage cycle of ring-buffer slots.
				They are consumed by domU. Slots used for meta-data are added to the
				free list immediately by Netback. Slots used for fragments are added
				to the free list once the skb to which they are associated is freed.
				Slot buffers that are placed on the free list become available for reuse
				in the ring-buffer by DomU.
				<p>
				<center>
				<a href="http://www.vergenet.net/~horms/pleb_blossom/pics/xen-packet.dot"
				<img
				 src="http://www.vergenet.net/~horms/pleb_blossom/pics/xen-packet.png"
				 width=701 height=296 alt="[Usage Cycle of Ring-Buffer Slots - Buffers placed on the free list become available in the ring-buffer-for-re-use by DomU]"></a>
				</center>
				<p>
				It is worth noting that if packets are dropped, for instance by packet
				filtering, before they make it to the destination device, then the
				ring-buffer slot will be freed. This should allow for faster transmission
				by netfilter. That is, packets that get dropped don't take as long to
				transmit and thus netback can transmit at a faster rate.
				]]>
			</description>
		</item>
		<item>
			<guid isPermaLink='false'>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-08-18T16_19_55.txt</guid>
			<link>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-08-18T16_19_55.txt</link>
			<pubDate>Mon, 18 Aug 2008 16:19:55 +1000</pubDate>
			<title>Just Practicing</title>
			<description>
				<![CDATA[
				<img src="http://www.vergenet.net/~horms/pleb_blossom/pics/5-3930.jpg"
				 width=480 height=319 alt="[Helicopter above Pitt St]">
				<p>
				The Army has been practicing running two helicopters up Pitt St.  this
				afternoon. So far they have done about half a dozen laps, down from
				Circular&nbsp;Quay to about Town&nbsp;Hall where they do some maneuver that
				I can't quite see out of my window before looping back North over the
				Domain. They seem to take about a 15-30 minute rest between each lap. Not
				sure where they go during this time. Perhaps up to Palm&nbsp;Beach. Or
				perhaps they drop in for scones with the PM at Kirribilli&nbsp;House. In
				any case, I'm glad that they are keeping themselves busy and giving the
				office workers something to peer at our of their windows.
				]]>
			</description>
		</item>
		<item>
			<guid isPermaLink='false'>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-08-18T12_12_27.txt</guid>
			<link>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-08-18T12_12_27.txt</link>
			<pubDate>Mon, 18 Aug 2008 12:12:27 +1000</pubDate>
			<title>Browser Crud</title>
			<description>
				<![CDATA[
				<img src="http://www.vergenet.net/~horms/pleb_blossom/pics/firefox.png"
				 width="538" height="103" alt="[Firefox error message]">
				<p>
				Am I the only person who invokes <em>firefox&nbsp;-P&nbsp;profile</em>
				and expects it to work even if firefox is already running?
				]]>
			</description>
		</item>
		<item>
			<guid isPermaLink='false'>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-08-06T09_56_52.txt</guid>
			<link>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-08-06T09_56_52.txt</link>
			<pubDate>Wed, 06 Aug 2008 09:56:52 +1000</pubDate>
			<title>Word Games</title>
			<description>
				<![CDATA[
				<p>
				Sometimes when you live in a foreign country interesting things happen.
				For <a href="http://www.chizart.net/">Chiz</a>, yesterday was one of those
				days.
				<p>
				Before, during and after dinner she was complaining of not feeling very
				well due to a sore stomache. She was wondering if perhaps she was
				coming down with a cold - there is at least one going around. On the
				short walk home from dinner she asked me what the sasuage like things
				below ones stomache are called, as they hurt too. I let her know
				that <em>intestines</em> was the word that she was after.
				<p>
				When we got home she showed me the elite new tea that she had been
				drinking on recommendation from a friend. Four or five cups since
				she started the day before...
				<p>
				<img src="http://www.vergenet.net/~horms/pleb_blossom/pics/5-3919-crop1.jpg"
				 width="240" height="131" alt="[Clearing Intestines to Reduce Weight Tea]">
				]]>
			</description>
		</item>
		<item>
			<guid isPermaLink='false'>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-07-19T11_04_38.txt</guid>
			<link>http://www.vergenet.net/~horms/pleb_blossom/archives#2008-07-19T11_04_38.txt</link>
			<pubDate>Sat, 19 Jul 2008 11:04:38 +1000</pubDate>
			<title>kexec-tools&nbsp;2.0.0</title>
			<description>
				<![CDATA[
				<img src="http://www.vergenet.net/~horms/pleb_blossom/pics/2007-10-03-125520.0_1024.jpg"
				 alt="[Sunset at Tokoriki in Fiji]" width="115" height="83" align="left">
				<p>
				Some time back in 2006 I sifted through many mailing list posts
				and pulled together all the patches to kexec-tools that were floating
				about. I subsequently put these in a git tree and released them
				as kexec-tools-testing.
				<p>
				As time went on, kexec-tools-testing ended up having releases about
				every 3 months or so, and became the focus for development of
				kexec-tools.
				<p>
				It has become a bit silly to call this code kexec-tools-testing,
				as it is the main development branch. The name only seems to serve
				to confuse people and perhaps scare some people off.
				<p>
				Along with the latest release of the code I have renamed the tree
				kexec-tools. So don't be confused any longer!
				<p>
				More about how to get kexec-tools
				<a href="http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/README.html">here</a>
				<br clear="left">
				]]>
			</description>
		</item>
	</channel>
</rss>
