<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux, branch v2.6.24-rc7</title>
<subtitle>Linux kernel source tree</subtitle>
<id>https://git.amat.us/linux/atom/?h=v2.6.24-rc7</id>
<link rel='self' href='https://git.amat.us/linux/atom/?h=v2.6.24-rc7'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/'/>
<updated>2008-01-06T21:45:38Z</updated>
<entry>
<title>Linux 2.6.24-rc7</title>
<updated>2008-01-06T21:45:38Z</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@woody.linux-foundation.org</email>
</author>
<published>2008-01-06T21:45:38Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=3ce54450461bad18bbe1f9f5aa3ecd2f8e8d1235'/>
<id>urn:sha1:3ce54450461bad18bbe1f9f5aa3ecd2f8e8d1235</id>
<content type='text'>
</content>
</entry>
<entry>
<title>CPU hotplug: fix cpu_is_offline() on !CONFIG_HOTPLUG_CPU</title>
<updated>2008-01-06T20:39:42Z</updated>
<author>
<name>Ingo Molnar</name>
<email>mingo@elte.hu</email>
</author>
<published>2007-12-30T10:58:17Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=a263898f628dd21e59210b547986c154788f628e'/>
<id>urn:sha1:a263898f628dd21e59210b547986c154788f628e</id>
<content type='text'>
make randconfig bootup testing found that the cpufreq code
crashes on bootup, if the powernow-k8 driver is enabled and
if maxcpus=1 passed on the boot line to a !CONFIG_HOTPLUG_CPU
kernel.

First lockdep found out that there's an inconsistent unlock
sequence:

 =====================================
 [ BUG: bad unlock balance detected! ]
 -------------------------------------
 swapper/1 is trying to release lock (&amp;per_cpu(cpu_policy_rwsem, cpu)) at:
 [&lt;ffffffff806ffd8e&gt;] unlock_policy_rwsem_write+0x3c/0x42
 but there are no more locks to release!

Call Trace:
 [&lt;ffffffff806ffd8e&gt;] unlock_policy_rwsem_write+0x3c/0x42
 [&lt;ffffffff80251c29&gt;] print_unlock_inbalance_bug+0x104/0x12c
 [&lt;ffffffff80252f3a&gt;] mark_held_locks+0x56/0x94
 [&lt;ffffffff806ffd8e&gt;] unlock_policy_rwsem_write+0x3c/0x42
 [&lt;ffffffff807008b6&gt;] cpufreq_add_dev+0x2a8/0x5c4
 ...

then shortly afterwards the cpufreq code crashed on an assert:

 ------------[ cut here ]------------
 kernel BUG at drivers/cpufreq/cpufreq.c:1068!
 invalid opcode: 0000 [1] SMP
 [...]
 Call Trace:
  [&lt;ffffffff805145d6&gt;] sysdev_driver_unregister+0x5b/0x91
  [&lt;ffffffff806ff520&gt;] cpufreq_register_driver+0x15d/0x1a2
  [&lt;ffffffff80cc0596&gt;] powernowk8_init+0x86/0x94
 [...]
 ---[ end trace 1e9219be2b4431de ]---

the bug was caused by maxcpus=1 bootup, which brought up the
secondary core as !cpu_online() but !cpu_is_offline() either,
which on on !CONFIG_HOTPLUG_CPU is always 0 (include/linux/cpu.h):

  /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */
  static inline int cpu_is_offline(int cpu) { return 0; }

but the cpufreq code uses cpu_online() and cpu_is_offline() in
a mixed way - the low-level drivers use cpu_online(), while
the cpufreq core uses cpu_is_offline(). This opened up the
possibility to add the non-initialized sysdev device of the
secondary core:

 cpufreq-core: trying to register driver powernow-k8
 cpufreq-core: adding CPU 0
 powernow-k8: BIOS error - no PSB or ACPI _PSS objects
 cpufreq-core: initialization failed
 cpufreq-core: adding CPU 1
 cpufreq-core: initialization failed

which then blew up. The fix is to make cpu_is_offline() always
the negation of cpu_online(). With that fix applied the kernel
boots up fine without crashing:

 Calling initcall 0xffffffff80cc0510: powernowk8_init+0x0/0x94()
 powernow-k8: Found 1 AMD Athlon(tm) 64 X2 Dual Core Processor 3800+ processors (1 cpu cores) (version 2.20.00)
 powernow-k8: BIOS error - no PSB or ACPI _PSS objects
 initcall 0xffffffff80cc0510: powernowk8_init+0x0/0x94() returned -19.
 initcall 0xffffffff80cc0510 ran for 19 msecs: powernowk8_init+0x0/0x94()
 Calling initcall 0xffffffff80cc328f: init_lapic_nmi_sysfs+0x0/0x39()

We could fix this by making CPU enumeration aware of max_cpus, but that
would be more fragile IMO, and the cpu_online(cpu) != cpu_is_offline(cpu)
possibility was quite confusing and a continuous source of bugs too.

Most distributions have kernels with CPU hotplug enabled, so this bug
remained hidden for a long time.

Bug forensics:

The broken cpu_is_offline() API variant was introduced via:

 commit a59d2e4e6977e7b94e003c96a41f07e96cddc340
 Author: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
 Date:   Mon Mar 8 06:06:03 2004 -0800

     [PATCH] minor cleanups for hotplug CPUs

( this predates linux-2.6.git, this commit is available from Thomas's
  historic git tree. )

Then 1.5 years later the cpufreq code made use of it:

 commit c32b6b8e524d2c337767d312814484d9289550cf
 Author: Ashok Raj &lt;ashok.raj@intel.com&gt;
 Date:   Sun Oct 30 14:59:54 2005 -0800

     [PATCH] create and destroy cpufreq sysfs entries based on cpu notifiers

 +       if (cpu_is_offline(cpu))
 +               return 0;

which is a correct use of the subtly broken new API. v2.6.15 then
shipped with this bug included.

then it took two more years for random-kernel qa to hit it.

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Signed-off-by: Ingo Molnar &lt;mingo@elte.hu&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>hda_intel suspend latency: shorten codec read</title>
<updated>2008-01-06T20:35:56Z</updated>
<author>
<name>Ingo Molnar</name>
<email>mingo@elte.hu</email>
</author>
<published>2008-01-06T20:09:53Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=57a04513cb35086d54bcb2cb92e6627fc8fa0fae'/>
<id>urn:sha1:57a04513cb35086d54bcb2cb92e6627fc8fa0fae</id>
<content type='text'>
not sleeping for every codec read/write but doing a short udelay and
a conditional reschedule has cut suspend+resume latency by about 1
second on my T60.

The patch also fixes the unexpected codec-connection errors that
happen more often in the new power-save mode:
    http://lkml.org/lkml/2007/11/8/255
    http://bugzilla.kernel.org/show_bug.cgi?id=9332

Signed-off-by: Ingo Molnar &lt;mingo@elte.hu&gt;
Acked-by: Takashi Iwai &lt;tiwai@suse.de&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>fix: using joysticks in 32 bit applications on 64 bit systems</title>
<updated>2008-01-06T18:26:06Z</updated>
<author>
<name>Akos Maroy</name>
<email>darkeye@tyrell.hu</email>
</author>
<published>2008-01-06T10:15:55Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=3fee37c1e2579ed3d6090f690e5fd8cf7fa3bb44'/>
<id>urn:sha1:3fee37c1e2579ed3d6090f690e5fd8cf7fa3bb44</id>
<content type='text'>
unfortunately 32 bit apps don't see the joysticks on a 64 bit system.
this prevents one playing X-Plane (http://www.x-plane.com/) or other
32-bit games with joysticks.

this is a known issue, and already raised several times:

 http://readlist.com/lists/vger.kernel.org/linux-kernel/28/144411.html

 http://www.brettcsmith.org/wiki/wiki.cgi?action=browse&amp;diff=1&amp;id=OzyComputer/Joystick

unfortunately this is still not fixed in the mainline kernel.

it would be nice to have this fixed, so that people can play these games
without having to patch their kernel.

the following patch solves the problem on 2.6.22.

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Acked-by: Christoph Hellwig &lt;hch@infradead.org&gt;
Signed-off-by: Ingo Molnar &lt;mingo@elte.hu&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>Revert "scsi: revert "[SCSI] Get rid of scsi_cmnd-&gt;done""</title>
<updated>2008-01-06T18:17:12Z</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@woody.linux-foundation.org</email>
</author>
<published>2008-01-06T18:17:12Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=7b3d9545f9ac8b31528dd2d6d8ec8d19922917b8'/>
<id>urn:sha1:7b3d9545f9ac8b31528dd2d6d8ec8d19922917b8</id>
<content type='text'>
This reverts commit ac40532ef0b8649e6f7f83859ea0de1c4ed08a19, which gets
us back the original cleanup of 6f5391c283d7fdcf24bf40786ea79061919d1e1d.

It turns out that the bug that was triggered by that commit was
apparently not actually triggered by that commit at all, and just the
testing conditions had changed enough to make it appear to be due to it.

The real problem seems to have been found by Peter Osterlund:

  "pktcdvd sets it [block device size] when opening the /dev/pktcdvd
   device, but when the drive is later opened as /dev/scd0, there is
   nothing that sets it back.  (Btw, 40944 is possible if the disk is a
   CDRW that was formatted with "cdrwtool -m 10236".)

   The problem is that pktcdvd opens the cd device in non-blocking mode
   when pktsetup is run, and doesn't close it again until pktsetup -d is
   run.  The effect is that if you meanwhile open the cd device,
   blkdev.c:do_open() doesn't call bd_set_size() because
   bdev-&gt;bd_openers is non-zero."

In particular, to repeat the bug (regardless of whether commit
6f5391c283d7fdcf24bf40786ea79061919d1e1d is applied or not):

  " 1. Start with an empty drive.
    2. pktsetup 0 /dev/scd0
    3. Insert a CD containing an isofs filesystem.
    4. mount /dev/pktcdvd/0 /mnt/tmp
    5. umount /mnt/tmp
    6. Press the eject button.
    7. Insert a DVD containing a non-writable filesystem.
    8. mount /dev/scd0 /mnt/tmp
    9. find /mnt/tmp -type f -print0 | xargs -0 sha1sum &gt;/dev/null
    10. If the DVD contains data beyond the physical size of a CD, you
        get I/O errors in the terminal, and dmesg reports lots of
        "attempt to access beyond end of device" errors."

which in turn is because the nested open after the media change won't
cause the size to be set properly (because the original open still holds
the block device, and we only do the bd_set_size() when we don't have
other people holding the device open).

The proper fix for that is probably to just do something like

	bdev-&gt;bd_inode-&gt;i_size = (loff_t)get_capacity(disk)&lt;&lt;9;

in fs/block_dev.c:do_open() even for the cases where we're not the
original opener (but *not* call bd_set_size(), since that will also
change the block size of the device).

Cc: Peter Osterlund &lt;petero2@telia.com&gt;
Cc: James Bottomley &lt;James.Bottomley@HansenPartnership.com&gt;
Cc: Matthew Wilcox &lt;matthew@wil.cx&gt;
Cc: Ingo Molnar &lt;mingo@elte.hu&gt;
Cc: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>[SCSI] SRP transport: only remove our own entries</title>
<updated>2008-01-04T20:15:51Z</updated>
<author>
<name>Dave Dillow</name>
<email>dillowda@ornl.gov</email>
</author>
<published>2008-01-04T02:34:49Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=911833440b498e3e4fe2f12c1ae2bd44400c7004'/>
<id>urn:sha1:911833440b498e3e4fe2f12c1ae2bd44400c7004</id>
<content type='text'>
The SCSI SRP transport class currently iterates over all children
devices of the host that is being removed in srp_remove_host(). However,
not all of those children were created by the SRP transport, and
removing them will cause corruption and an oops when their creator tries
to remove them.

Signed-off-by: David Dillow &lt;dillowda@ornl.gov&gt;
Acked-by: FUJITA Tomonori &lt;fujita.tomonori@lab.ntt.co.jp&gt;
Signed-off-by: James Bottomley &lt;James.Bottomley@HansenPartnership.com&gt;
</content>
</entry>
<entry>
<title>Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6</title>
<updated>2008-01-04T18:44:17Z</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@woody.linux-foundation.org</email>
</author>
<published>2008-01-04T18:44:17Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=439f61b9f9ebbf84fb7e6b3539fc3794e046bbb9'/>
<id>urn:sha1:439f61b9f9ebbf84fb7e6b3539fc3794e046bbb9</id>
<content type='text'>
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
  [ISDN]: i4l: Fix DLE handling for i4l-audio
  [ISDN] i4l: 'NO CARRIER' message lost after ldisc flush
  [CONNECTOR]: Return proper error code in cn_call_callback()
  [INET]: Fix netdev renaming and inet address labels
  [CASSINI]: Bump driver version and release date.
  [CASSINI]: Fix two obvious NAPI bugs.
  [CASSINI]: Set skb-&gt;truesize properly on receive packets.
  [CASSINI]: Program parent Intel31154 bridge when necessary.
  [CASSINI]: Revert 'dont touch page_count'.
  [CASSINI]: Fix endianness bug.
  [XFRM]: Do not define km_migrate() if !CONFIG_XFRM_MIGRATE
  [X25]: Add missing x25_neigh_put
</content>
</entry>
<entry>
<title>[ISDN]: i4l: Fix DLE handling for i4l-audio</title>
<updated>2008-01-04T11:55:44Z</updated>
<author>
<name>Matthias Goebl</name>
<email>matthias.goebl@goebl.net</email>
</author>
<published>2008-01-04T11:45:28Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=7fde4d779b83898851959f837c9b26fe07ee91c9'/>
<id>urn:sha1:7fde4d779b83898851959f837c9b26fe07ee91c9</id>
<content type='text'>
The DLE handling in i4l-audio seems to be broken.

It produces spurious DLEs so asterisk 1.2.24 with chan_modem_i4l
gets irritated, the error message is:
"chan_modem_i4l.c:450 i4l_read: Value of escape is ^ (17)".
-&gt; There shouldn't be a DLE-^.
If a spurious DLE-ETX occurs, the audio connection even dies.
I use a "AVM Fritz!PCI" isdn card.

I found two issues that only appear if ISDN_AUDIO_SKB_DLECOUNT(skb) &gt; 0:
- The loop in isdn_tty.c:isdn_tty_try_read() doesn't escape a DLE if it's
  the last character.

- The loop in isdn_common.c:isdn_readbchan_tty() doesn't copy its characters,
  it only remembers the last one ("last = *p;").

  Compare it with the loop in isdn_common.c:isdn_readbchan(), that *does*
  copy them ("*cp++ = *p;") correctly.
  The special handling of the "last" character made it more difficult.
  I compared it to linux-2.4.19: There was no "last"-handling and both loops
  did escape and copy all characters correctly.

Signed-off-by: Matthias Goebl &lt;matthias.goebl@goebl.net&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>[ISDN] i4l: 'NO CARRIER' message lost after ldisc flush</title>
<updated>2008-01-04T11:55:40Z</updated>
<author>
<name>Matthias Goebl</name>
<email>matthias.goebl@goebl.net</email>
</author>
<published>2008-01-04T10:19:30Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=00409bb045887ec5e7b9e351bc080c38ab6bfd33'/>
<id>urn:sha1:00409bb045887ec5e7b9e351bc080c38ab6bfd33</id>
<content type='text'>
The ISDN tty layer doesn't produce a 'NO CARRIER' message after hangup.

I suppose it broke when tty_buffer_flush() has been added to
tty_ldisc_flush() in the commit below.

For isdn_tty_modem_result(RESULT_NO_CARRIER..) the
message inserted via isdn_tty_at_cout() -&gt; tty_insert_flip_char()
is flushed immediately by tty_ldisc_flush() -&gt; tty_buffer_flush().
More annoyingly, the audio abort sequence DLE-ETX is also lost.

This patch fixes only active audio connections, because I assume that nobody
changes the line discipline for audio.

For non-audio connections the problem remains.
Maybe we can remove the tty_ldisc_flush() in isdn_tty_modem_result()
at all because it's done at tty_close?

On Mon, May 07, 2007 at 04:05:57PM -0500, Paul Fulghum wrote:
&gt; Flush the tty flip buffer when the line discipline
&gt; input queue is flushed, including the user call
&gt; tcflush(TCIFLUSH/TCIOFLUSH). This prevents unexpected
&gt; stale data after a user application calls tcflush().
&gt;
&gt; Cc: Alan Cox &lt;alan@lxorguk.org.uk&gt;
&gt; Cc: Antonino Ingargiola &lt;tritemio@gmail.com&gt;
&gt; Signed-off-by: Paul Fulghum &lt;paulkf@microgate.com&gt;
&gt;
&gt; --- a/drivers/char/tty_io.c	2007-05-04 05:46:55.000000000 -0500
&gt; +++ b/drivers/char/tty_io.c	2007-05-05 03:23:46.000000000 -0500
&gt; @@ -1240,6 +1263,7 @@ void tty_ldisc_flush(struct tty_struct *
&gt;  			ld-&gt;flush_buffer(tty);
&gt;  		tty_ldisc_deref(ld);
&gt;  	}
&gt; +	tty_buffer_flush(tty);
[..]

Signed-off-by: Matthias Goebl &lt;matthias.goebl@goebl.net&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>[CONNECTOR]: Return proper error code in cn_call_callback()</title>
<updated>2008-01-04T11:55:37Z</updated>
<author>
<name>Li Zefan</name>
<email>lizf@cn.fujitsu.com</email>
</author>
<published>2008-01-04T09:52:02Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=134d99e302618eeb102c2a5be1f9e98696288bdd'/>
<id>urn:sha1:134d99e302618eeb102c2a5be1f9e98696288bdd</id>
<content type='text'>
Error code should be set to EINVAL instead of ENODEV if !queue_work().
There's another call of queue_work() which may set err to EINVAL.

Signed-off-by: Li Zefan &lt;lizf@cn.fujitsu.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
</feed>
