2007-10-18 04:25:59

by Mike Galbraith

[permalink] [raw]
Subject: [microcode] 2.6.23.git pulled this morning oopses loading P4 microcode

Greetings,

Freshly pulled tree oopes per $subject.

[ 114.714335] BUG: unable to handle kernel NULL pointer dereference at virtual address 00000031
[ 114.732810] printing eip: c03332ff *pde = 00000000
[ 114.747614] Oops: 0000 [#1] PREEMPT SMP
[ 114.761320] Modules linked in: microcode snd_seq edd button battery ac ip6t_REJECT xt_tcpudp ipt_REJECT xt_state iptable_mangle iptable_nat nf_nat iptable_filter ip6table_mangle nf_conntrack_ipv4 nf_conntrack ip_tables ip6table_filter ip6_tables x_tables nls_iso8859_1 nls_cp437 nls_utf8 snd_intel8x0 snd_ac97_codec ac97_bus snd_pcm snd_mpu401 snd_timer snd_mpu401_uart snd_rawmidi prism54 snd_page_alloc snd_seq_device snd soundcore intel_agp agpgart i2c_i801 fan thermal processor
[ 114.781462] CPU: 0
[ 114.781464] EIP: 0060:[<c03332ff>] Not tainted VLI
[ 114.781468] EFLAGS: 00010293 (2.6.23-smp-git #13)
[ 114.781478] EIP is at misc_register+0x53/0x14f
[ 114.781483] eax: 00000025 ebx: f8bff858 ecx: f8bff900 edx: 00000031
[ 114.781490] esi: 000000b8 edi: f8bff864 ebp: c2e0de88 esp: c2e0de68
[ 114.781496] ds: 007b es: 007b fs: 00d8 gs: 0033 ss: 0068
[ 114.781502] Process modprobe (pid: 6115, ti=c2e0d000 task=c2efa070 task.ti=c2e0d000)
[ 114.781508] Stack: c1cb4070 f8bff900 c2e0de88 c014818c f8bff900 f8bff900 f8bff900 00000029
[ 114.781521] c2e0de9c f8bac011 c01368e6 ffffffff f8bff900 c2e0dfb0 c0149dfa 00000000
[ 114.781533] 00000000 00002000 c04d4060 c2e0ded0 c2e0df58 f8be0058 f8be0054 f8bff948
[ 114.781545] Call Trace:
[ 114.781548] [<c010514a>] show_trace_log_lvl+0x1a/0x30
[ 114.781558] [<c0105205>] show_stack_log_lvl+0xa5/0xca
[ 114.781564] [<c0105426>] show_registers+0x1fc/0x33d
[ 114.781571] [<c010567d>] die+0x116/0x239
[ 114.781577] [<c011d008>] do_page_fault+0x2dc/0x5c4
[ 114.781585] [<c04c0662>] error_code+0x72/0x78
[ 114.781594] [<f8bac011>] microcode_init+0x11/0xbb [microcode]
[ 114.781604] [<c0149dfa>] sys_init_module+0xef/0x19bb
[ 114.781612] [<c01041ba>] syscall_call+0x7/0xb
[ 114.781618] =======================
[ 114.781621] Code: 0c 0f 18 02 90 81 3d 60 d5 61 c0 60 d5 61 c0 0f 84 fb 00 00 00 8b 33 39 30 75 0d e9 a9 00 00 00 39 30 0f 84 a1 00 00 00 8d 42 f4 <8b> 50 0c 0f 18 02 90 3d 54 d5 61 c0 75 e7 81 fe ff 00 00 00 0f
[ 114.781677] EIP: [<c03332ff>] misc_register+0x53/0x14f SS:ESP 0068:c2e0de68

(gdb) list *misc_register+0x53
0xc03332ff is in misc_register (drivers/char/misc.c:194).
189 int err = 0;
190
191 INIT_LIST_HEAD(&misc->list);
192
193 mutex_lock(&misc_mtx);
194 list_for_each_entry(c, &misc_list, list) {
195 if (c->minor == misc->minor) {
196 mutex_unlock(&misc_mtx);
197 return -EBUSY;
198 }





2007-10-18 17:57:16

by Mike Galbraith

[permalink] [raw]
Subject: [bisected][mismerge?] Re: [microcode] 2.6.23.git pulled this morning oopses loading P4 microcode

On Thu, 2007-10-18 at 06:25 +0200, Mike Galbraith wrote:
> Greetings,
>
> Freshly pulled tree oopes per $subject.
>
> [ 114.714335] BUG: unable to handle kernel NULL pointer dereference at virtual address 00000031
> [ 114.732810] printing eip: c03332ff *pde = 00000000
> [ 114.747614] Oops: 0000 [#1] PREEMPT SMP
> [ 114.761320] Modules linked in: microcode snd_seq edd button battery ac ip6t_REJECT xt_tcpudp ipt_REJECT xt_state iptable_mangle iptable_nat nf_nat iptable_filter ip6table_mangle nf_conntrack_ipv4 nf_conntrack ip_tables ip6table_filter ip6_tables x_tables nls_iso8859_1 nls_cp437 nls_utf8 snd_intel8x0 snd_ac97_codec ac97_bus snd_pcm snd_mpu401 snd_timer snd_mpu401_uart snd_rawmidi prism54 snd_page_alloc snd_seq_device snd soundcore intel_agp agpgart i2c_i801 fan thermal processor
> [ 114.781462] CPU: 0
> [ 114.781464] EIP: 0060:[<c03332ff>] Not tainted VLI
> [ 114.781468] EFLAGS: 00010293 (2.6.23-smp-git #13)
> [ 114.781478] EIP is at misc_register+0x53/0x14f
> [ 114.781483] eax: 00000025 ebx: f8bff858 ecx: f8bff900 edx: 00000031
> [ 114.781490] esi: 000000b8 edi: f8bff864 ebp: c2e0de88 esp: c2e0de68
> [ 114.781496] ds: 007b es: 007b fs: 00d8 gs: 0033 ss: 0068
> [ 114.781502] Process modprobe (pid: 6115, ti=c2e0d000 task=c2efa070 task.ti=c2e0d000)
> [ 114.781508] Stack: c1cb4070 f8bff900 c2e0de88 c014818c f8bff900 f8bff900 f8bff900 00000029
> [ 114.781521] c2e0de9c f8bac011 c01368e6 ffffffff f8bff900 c2e0dfb0 c0149dfa 00000000
> [ 114.781533] 00000000 00002000 c04d4060 c2e0ded0 c2e0df58 f8be0058 f8be0054 f8bff948
> [ 114.781545] Call Trace:
> [ 114.781548] [<c010514a>] show_trace_log_lvl+0x1a/0x30
> [ 114.781558] [<c0105205>] show_stack_log_lvl+0xa5/0xca
> [ 114.781564] [<c0105426>] show_registers+0x1fc/0x33d
> [ 114.781571] [<c010567d>] die+0x116/0x239
> [ 114.781577] [<c011d008>] do_page_fault+0x2dc/0x5c4
> [ 114.781585] [<c04c0662>] error_code+0x72/0x78
> [ 114.781594] [<f8bac011>] microcode_init+0x11/0xbb [microcode]
> [ 114.781604] [<c0149dfa>] sys_init_module+0xef/0x19bb
> [ 114.781612] [<c01041ba>] syscall_call+0x7/0xb
> [ 114.781618] =======================
> [ 114.781621] Code: 0c 0f 18 02 90 81 3d 60 d5 61 c0 60 d5 61 c0 0f 84 fb 00 00 00 8b 33 39 30 75 0d e9 a9 00 00 00 39 30 0f 84 a1 00 00 00 8d 42 f4 <8b> 50 0c 0f 18 02 90 3d 54 d5 61 c0 75 e7 81 fe ff 00 00 00 0f
> [ 114.781677] EIP: [<c03332ff>] misc_register+0x53/0x14f SS:ESP 0068:c2e0de68
>
> (gdb) list *misc_register+0x53
> 0xc03332ff is in misc_register (drivers/char/misc.c:194).
> 189 int err = 0;
> 190
> 191 INIT_LIST_HEAD(&misc->list);
> 192
> 193 mutex_lock(&misc_mtx);
> 194 list_for_each_entry(c, &misc_list, list) {
> 195 if (c->minor == misc->minor) {
> 196 mutex_unlock(&misc_mtx);
> 197 return -EBUSY;
> 198 }
>

The winner of a very long git bisect session:

04c71976500352d02f60616d2b960267d8c5fe24 is first bad commit
commit 04c71976500352d02f60616d2b960267d8c5fe24
Author: Samuel Thibault <[email protected]>
Date: Tue Oct 16 23:27:04 2007 -0700

unicode diacritics support


Attempting to revert with git:

root@Homer: git revert 04c71976500352d02f60616d2b960267d8c5fe24
Auto-merged drivers/char/keyboard.c
Auto-merged drivers/char/vt_ioctl.c
CONFLICT (delete/modify): drivers/tc/lk201-map.c_shipped deleted in HEAD and modified in 04c7197... unicode diacritics support. Version 04c7197... unicode diacritics support of drivers/tc/lk201-map.c_shipped left in tree.
Automatic revert failed. After resolving the conflicts,
mark the corrected paths with 'git-add <paths>'
and commit the result.

I reverted it manually in my working tree, ignoring a couple of bogus
rejects and the missing lk201-map.c_shipped which is _created_ in the
git tree by the attempt to revert, and now have a working kernel. The
oops on microcode driver load is gone, as is the freeze on shutdown when
scripts attempt to set hardware clock, nmi_watchdog firing when I poke
SysRq-T, and the inability to login via serial console reported in
thread:

http://groups.google.com/group/fa.linux.kernel/msg/1b08c2f15894aaf7

-Mike

2007-10-18 22:53:34

by Samuel Thibault

[permalink] [raw]
Subject: Re: [bisected][mismerge?] Re: [microcode] 2.6.23.git pulled this morning oopses loading P4 microcode

Hi,

Mike Galbraith, le Thu 18 Oct 2007 19:56:38 +0200, a ?crit :
> The winner of a very long git bisect session:
>
> unicode diacritics support

Uh, I fail to see how that could have an impact, I've again checked the
boundaries, it looks fine, please people have a look.

Could you try something odd? On your tree that has the change reverted,
please try the attached patch, which makes the array the same size at it
would be with the change, possibly triggering bugs in completely other
parts of the kernel.

Samuel


Attachments:
(No filename) (524.00 B)
patch (394.00 B)
Download all attachments

2007-10-19 02:49:19

by Mike Galbraith

[permalink] [raw]
Subject: Re: [bisected][mismerge?] Re: [microcode] 2.6.23.git pulled this morning oopses loading P4 microcode

On Thu, 2007-10-18 at 23:33 +0100, Samuel Thibault wrote:
> Hi,
>
> Mike Galbraith, le Thu 18 Oct 2007 19:56:38 +0200, a ?crit :
> > The winner of a very long git bisect session:
> >
> > unicode diacritics support
>
> Uh, I fail to see how that could have an impact, I've again checked the
> boundaries, it looks fine, please people have a look.

I too was reluctant to believe the bisect result. But...

> Could you try something odd? On your tree that has the change reverted,
> please try the attached patch, which makes the array the same size at it
> would be with the change, possibly triggering bugs in completely other
> parts of the kernel.

That didn't break my box. However, removing your test patch and
re-applying the revert I generated between git tree and working tree
brought it right back. With the below applied, diff says there is no
difference between working tree and git tree (except for
vsyscall_32.lds, which is a generated file kbuild leaves lying around).
Per gitk, the git repository is at
d85714d81cc0408daddb68c10f7fd69eafe7c213

diff -uprNX /root/dontdiff git/linux-2.6/drivers/acorn/char/defkeymap-l7200.c linux-2.6.23.git/drivers/acorn/char/defkeymap-l7200.c
--- git/linux-2.6/drivers/acorn/char/defkeymap-l7200.c 2007-10-18 18:55:53.000000000 +0200
+++ linux-2.6.23.git/drivers/acorn/char/defkeymap-l7200.c 2007-10-18 19:02:12.000000000 +0200
@@ -346,7 +346,7 @@ char *func_table[MAX_NR_FUNC] = {
0,
};

-struct kbdiacruc accent_table[MAX_DIACR] = {
+struct kbdiacr accent_table[MAX_DIACR] = {
{'`', 'A', '\300'}, {'`', 'a', '\340'},
{'\'', 'A', '\301'}, {'\'', 'a', '\341'},
{'^', 'A', '\302'}, {'^', 'a', '\342'},
diff -uprNX /root/dontdiff git/linux-2.6/drivers/char/consolemap.c linux-2.6.23.git/drivers/char/consolemap.c
--- git/linux-2.6/drivers/char/consolemap.c 2007-10-18 18:55:53.000000000 +0200
+++ linux-2.6.23.git/drivers/char/consolemap.c 2007-10-18 19:02:12.000000000 +0200
@@ -669,29 +669,19 @@ void con_protect_unimap(struct vc_data *
p->readonly = rdonly;
}

-/*
- * Always use USER_MAP. These functions are used by the keyboard,
- * which shouldn't be affected by G0/G1 switching, etc.
- * If the user map still contains default values, i.e. the
- * direct-to-font mapping, then assume user is using Latin1.
- */
/* may be called during an interrupt */
u32 conv_8bit_to_uni(unsigned char c)
{
+ /*
+ * Always use USER_MAP. This function is used by the keyboard,
+ * which shouldn't be affected by G0/G1 switching, etc.
+ * If the user map still contains default values, i.e. the
+ * direct-to-font mapping, then assume user is using Latin1.
+ */
unsigned short uni = translations[USER_MAP][c];
return uni == (0xf000 | c) ? c : uni;
}

-int conv_uni_to_8bit(u32 uni)
-{
- int c;
- for (c = 0; c < 0x100; c++)
- if (translations[USER_MAP][c] == uni ||
- (translations[USER_MAP][c] == (c | 0xf000) && uni == c))
- return c;
- return -1;
-}
-
int
conv_uni_to_pc(struct vc_data *conp, long ucs)
{
diff -uprNX /root/dontdiff git/linux-2.6/drivers/char/keyboard.c linux-2.6.23.git/drivers/char/keyboard.c
--- git/linux-2.6/drivers/char/keyboard.c 2007-10-18 18:55:53.000000000 +0200
+++ linux-2.6.23.git/drivers/char/keyboard.c 2007-10-18 19:02:19.000000000 +0200
@@ -38,7 +38,6 @@
#include <linux/kbd_kern.h>
#include <linux/kbd_diacr.h>
#include <linux/vt_kern.h>
-#include <linux/consolemap.h>
#include <linux/sysrq.h>
#include <linux/input.h>
#include <linux/reboot.h>
@@ -404,12 +403,9 @@ static unsigned int handle_diacr(struct
return d;

if (kbd->kbdmode == VC_UNICODE)
- to_utf8(vc, d);
- else {
- int c = conv_uni_to_8bit(d);
- if (c != -1)
- put_queue(vc, c);
- }
+ to_utf8(vc, conv_8bit_to_uni(d));
+ else if (d < 0x100)
+ put_queue(vc, d);

return ch;
}
@@ -421,12 +417,9 @@ static void fn_enter(struct vc_data *vc)
{
if (diacr) {
if (kbd->kbdmode == VC_UNICODE)
- to_utf8(vc, diacr);
- else {
- int c = conv_uni_to_8bit(diacr);
- if (c != -1)
- put_queue(vc, c);
- }
+ to_utf8(vc, conv_8bit_to_uni(diacr));
+ else if (diacr < 0x100)
+ put_queue(vc, diacr);
diacr = 0;
}
put_queue(vc, 13);
@@ -634,12 +627,9 @@ static void k_unicode(struct vc_data *vc
return;
}
if (kbd->kbdmode == VC_UNICODE)
- to_utf8(vc, value);
- else {
- int c = conv_uni_to_8bit(value);
- if (c != -1)
- put_queue(vc, c);
- }
+ to_utf8(vc, conv_8bit_to_uni(value));
+ else if (value < 0x100)
+ put_queue(vc, value);
}

/*
@@ -656,12 +646,7 @@ static void k_deadunicode(struct vc_data

static void k_self(struct vc_data *vc, unsigned char value, char up_flag)
{
- unsigned int uni;
- if (kbd->kbdmode == VC_UNICODE)
- uni = value;
- else
- uni = conv_8bit_to_uni(value);
- k_unicode(vc, uni, up_flag);
+ k_unicode(vc, value, up_flag);
}

static void k_dead2(struct vc_data *vc, unsigned char value, char up_flag)
diff -uprNX /root/dontdiff git/linux-2.6/drivers/char/vt_ioctl.c linux-2.6.23.git/drivers/char/vt_ioctl.c
--- git/linux-2.6/drivers/char/vt_ioctl.c 2007-10-18 18:55:53.000000000 +0200
+++ linux-2.6.23.git/drivers/char/vt_ioctl.c 2007-10-18 19:02:19.000000000 +0200
@@ -23,7 +23,6 @@
#include <linux/major.h>
#include <linux/fs.h>
#include <linux/console.h>
-#include <linux/consolemap.h>
#include <linux/signal.h>
#include <linux/timex.h>

@@ -583,27 +582,10 @@ int vt_ioctl(struct tty_struct *tty, str
case KDGKBDIACR:
{
struct kbdiacrs __user *a = up;
- struct kbdiacr diacr;
- int i;

if (put_user(accent_table_size, &a->kb_cnt))
return -EFAULT;
- for (i = 0; i < accent_table_size; i++) {
- diacr.diacr = conv_uni_to_8bit(accent_table[i].diacr);
- diacr.base = conv_uni_to_8bit(accent_table[i].base);
- diacr.result = conv_uni_to_8bit(accent_table[i].result);
- if (copy_to_user(a->kbdiacr + i, &diacr, sizeof(struct kbdiacr)))
- return -EFAULT;
- }
- return 0;
- }
- case KDGKBDIACRUC:
- {
- struct kbdiacrsuc __user *a = up;
-
- if (put_user(accent_table_size, &a->kb_cnt))
- return -EFAULT;
- if (copy_to_user(a->kbdiacruc, accent_table, accent_table_size*sizeof(struct kbdiacruc)))
+ if (copy_to_user(a->kbdiacr, accent_table, accent_table_size*sizeof(struct kbdiacr)))
return -EFAULT;
return 0;
}
@@ -611,30 +593,6 @@ int vt_ioctl(struct tty_struct *tty, str
case KDSKBDIACR:
{
struct kbdiacrs __user *a = up;
- struct kbdiacr diacr;
- unsigned int ct;
- int i;
-
- if (!perm)
- return -EPERM;
- if (get_user(ct,&a->kb_cnt))
- return -EFAULT;
- if (ct >= MAX_DIACR)
- return -EINVAL;
- accent_table_size = ct;
- for (i = 0; i < ct; i++) {
- if (copy_from_user(&diacr, a->kbdiacr + i, sizeof(struct kbdiacr)))
- return -EFAULT;
- accent_table[i].diacr = conv_8bit_to_uni(diacr.diacr);
- accent_table[i].base = conv_8bit_to_uni(diacr.base);
- accent_table[i].result = conv_8bit_to_uni(diacr.result);
- }
- return 0;
- }
-
- case KDSKBDIACRUC:
- {
- struct kbdiacrsuc __user *a = up;
unsigned int ct;

if (!perm)
@@ -644,7 +602,7 @@ int vt_ioctl(struct tty_struct *tty, str
if (ct >= MAX_DIACR)
return -EINVAL;
accent_table_size = ct;
- if (copy_from_user(accent_table, a->kbdiacruc, ct*sizeof(struct kbdiacruc)))
+ if (copy_from_user(accent_table, a->kbdiacr, ct*sizeof(struct kbdiacr)))
return -EFAULT;
return 0;
}
diff -uprNX /root/dontdiff git/linux-2.6/drivers/s390/char/keyboard.c linux-2.6.23.git/drivers/s390/char/keyboard.c
--- git/linux-2.6/drivers/s390/char/keyboard.c 2007-10-18 18:55:53.000000000 +0200
+++ linux-2.6.23.git/drivers/s390/char/keyboard.c 2007-10-18 19:02:21.000000000 +0200
@@ -11,7 +11,6 @@
#include <linux/sched.h>
#include <linux/sysrq.h>

-#include <linux/consolemap.h>
#include <linux/kbd_kern.h>
#include <linux/kbd_diacr.h>
#include <asm/uaccess.h>
@@ -83,11 +82,11 @@ kbd_alloc(void) {
if (!kbd->fn_handler)
goto out_func;
kbd->accent_table =
- kmalloc(sizeof(struct kbdiacruc)*MAX_DIACR, GFP_KERNEL);
+ kmalloc(sizeof(struct kbdiacr)*MAX_DIACR, GFP_KERNEL);
if (!kbd->accent_table)
goto out_fn_handler;
memcpy(kbd->accent_table, accent_table,
- sizeof(struct kbdiacruc)*MAX_DIACR);
+ sizeof(struct kbdiacr)*MAX_DIACR);
kbd->accent_table_size = accent_table_size;
return kbd;

@@ -184,8 +183,8 @@ kbd_ebcasc(struct kbd_data *kbd, unsigne
* Otherwise, conclude that DIACR was not combining after all,
* queue it and return CH.
*/
-static unsigned int
-handle_diacr(struct kbd_data *kbd, unsigned int ch)
+static unsigned char
+handle_diacr(struct kbd_data *kbd, unsigned char ch)
{
int i, d;

@@ -461,6 +460,7 @@ int
kbd_ioctl(struct kbd_data *kbd, struct file *file,
unsigned int cmd, unsigned long arg)
{
+ struct kbdiacrs __user *a;
void __user *argp;
int ct, perm;

@@ -481,40 +481,17 @@ kbd_ioctl(struct kbd_data *kbd, struct f
case KDSKBSENT:
return do_kdgkb_ioctl(kbd, argp, cmd, perm);
case KDGKBDIACR:
- {
- struct kbdiacrs __user *a = argp;
- struct kbdiacr diacr;
- int i;
+ a = argp;

if (put_user(kbd->accent_table_size, &a->kb_cnt))
return -EFAULT;
- for (i = 0; i < kbd->accent_table_size; i++) {
- diacr.diacr = kbd->accent_table[i].diacr;
- diacr.base = kbd->accent_table[i].base;
- diacr.result = kbd->accent_table[i].result;
- if (copy_to_user(a->kbdiacr + i, &diacr, sizeof(struct kbdiacr)))
- return -EFAULT;
- }
- return 0;
- }
- case KDGKBDIACRUC:
- {
- struct kbdiacrsuc __user *a = argp;
-
ct = kbd->accent_table_size;
- if (put_user(ct, &a->kb_cnt))
- return -EFAULT;
- if (copy_to_user(a->kbdiacruc, kbd->accent_table,
- ct * sizeof(struct kbdiacruc)))
+ if (copy_to_user(a->kbdiacr, kbd->accent_table,
+ ct * sizeof(struct kbdiacr)))
return -EFAULT;
return 0;
- }
case KDSKBDIACR:
- {
- struct kbdiacrs __user *a = argp;
- struct kbdiacr diacr;
- int i;
-
+ a = argp;
if (!perm)
return -EPERM;
if (get_user(ct, &a->kb_cnt))
@@ -522,31 +499,10 @@ kbd_ioctl(struct kbd_data *kbd, struct f
if (ct >= MAX_DIACR)
return -EINVAL;
kbd->accent_table_size = ct;
- for (i = 0; i < ct; i++) {
- if (copy_from_user(&diacr, a->kbdiacr + i, sizeof(struct kbdiacr)))
- return -EFAULT;
- kbd->accent_table[i].diacr = diacr.diacr;
- kbd->accent_table[i].base = diacr.base;
- kbd->accent_table[i].result = diacr.result;
- }
- return 0;
- }
- case KDSKBDIACRUC:
- {
- struct kbdiacrsuc __user *a = argp;
-
- if (!perm)
- return -EPERM;
- if (get_user(ct, &a->kb_cnt))
- return -EFAULT;
- if (ct >= MAX_DIACR)
- return -EINVAL;
- kbd->accent_table_size = ct;
- if (copy_from_user(kbd->accent_table, a->kbdiacruc,
- ct * sizeof(struct kbdiacruc)))
+ if (copy_from_user(kbd->accent_table, a->kbdiacr,
+ ct * sizeof(struct kbdiacr)))
return -EFAULT;
return 0;
- }
default:
return -ENOIOCTLCMD;
}
diff -uprNX /root/dontdiff git/linux-2.6/drivers/s390/char/keyboard.h linux-2.6.23.git/drivers/s390/char/keyboard.h
--- git/linux-2.6/drivers/s390/char/keyboard.h 2007-10-18 18:55:53.000000000 +0200
+++ linux-2.6.23.git/drivers/s390/char/keyboard.h 2007-10-18 19:02:21.000000000 +0200
@@ -25,9 +25,9 @@ struct kbd_data {
unsigned short **key_maps;
char **func_table;
fn_handler_fn **fn_handler;
- struct kbdiacruc *accent_table;
+ struct kbdiacr *accent_table;
unsigned int accent_table_size;
- unsigned int diacr;
+ unsigned char diacr;
unsigned short sysrq;
};

diff -uprNX /root/dontdiff git/linux-2.6/include/linux/consolemap.h linux-2.6.23.git/include/linux/consolemap.h
--- git/linux-2.6/include/linux/consolemap.h 2007-10-18 18:55:53.000000000 +0200
+++ linux-2.6.23.git/include/linux/consolemap.h 2007-10-18 19:02:34.000000000 +0200
@@ -16,5 +16,4 @@ extern u16 inverse_translate(struct vc_d
extern unsigned short *set_translate(int m, struct vc_data *vc);
extern int conv_uni_to_pc(struct vc_data *conp, long ucs);
extern u32 conv_8bit_to_uni(unsigned char c);
-extern int conv_uni_to_8bit(u32 uni);
void console_map_init(void);
diff -uprNX /root/dontdiff git/linux-2.6/include/linux/kbd_diacr.h linux-2.6.23.git/include/linux/kbd_diacr.h
--- git/linux-2.6/include/linux/kbd_diacr.h 2007-10-18 18:55:53.000000000 +0200
+++ linux-2.6.23.git/include/linux/kbd_diacr.h 2007-10-18 19:02:34.000000000 +0200
@@ -2,7 +2,7 @@
#define _DIACR_H
#include <linux/kd.h>

-extern struct kbdiacruc accent_table[];
+extern struct kbdiacr accent_table[];
extern unsigned int accent_table_size;

#endif /* _DIACR_H */
diff -uprNX /root/dontdiff git/linux-2.6/include/linux/kd.h linux-2.6.23.git/include/linux/kd.h
--- git/linux-2.6/include/linux/kd.h 2007-10-18 18:55:53.000000000 +0200
+++ linux-2.6.23.git/include/linux/kd.h 2007-10-18 19:02:34.000000000 +0200
@@ -125,16 +125,6 @@ struct kbdiacrs {
#define KDGKBDIACR 0x4B4A /* read kernel accent table */
#define KDSKBDIACR 0x4B4B /* write kernel accent table */

-struct kbdiacruc {
- __u32 diacr, base, result;
-};
-struct kbdiacrsuc {
- unsigned int kb_cnt; /* number of entries in following array */
- struct kbdiacruc kbdiacruc[256]; /* MAX_DIACR from keyboard.h */
-};
-#define KDGKBDIACRUC 0x4BFA /* read kernel accent table - UCS */
-#define KDSKBDIACRUC 0x4BFB /* write kernel accent table - UCS */
-
struct kbkeycode {
unsigned int scancode, keycode;
};


2007-10-19 09:12:32

by Samuel Thibault

[permalink] [raw]
Subject: Re: [bisected][mismerge?] Re: [microcode] 2.6.23.git pulled this morning oopses loading P4 microcode

Just to make sure, could you check in System.map that accent_table is
correctly 256*3*4=3072 bytes long?

Samuel

2007-10-19 10:18:31

by Mike Galbraith

[permalink] [raw]
Subject: Re: [bisected][mismerge?] Re: [microcode] 2.6.23.git pulled this morning oopses loading P4 microcode

On Fri, 2007-10-19 at 04:49 +0200, Mike Galbraith wrote:
> On Thu, 2007-10-18 at 23:33 +0100, Samuel Thibault wrote:
> > Hi,
> >
> > Mike Galbraith, le Thu 18 Oct 2007 19:56:38 +0200, a ?crit :
> > > The winner of a very long git bisect session:
> > >
> > > unicode diacritics support
> >
> > Uh, I fail to see how that could have an impact, I've again checked the
> > boundaries, it looks fine, please people have a look.
>
> I too was reluctant to believe the bisect result. But...

Weeeell now, that skepticism is indeed well founded. It's dontdiff. A
diff of trees where defkeymap.c_shipped has been modified produces no
output. Once a working tree has been afflicted by using diff+dontdiff
to update it, even overwriting the entire tree via git-archive doesn't
lead to a good build unless you also touch defkeymap.c_shipped
afterward. In my case, the working tree remained buildable yet
thoroughly busted through a lengthy bisect and beyond. That bisect
positively identified... the victim.

poo.

-Mike

2007-10-19 10:20:47

by Mike Galbraith

[permalink] [raw]
Subject: Re: [bisected][mismerge?] Re: [microcode] 2.6.23.git pulled this morning oopses loading P4 microcode

On Fri, 2007-10-19 at 09:55 +0100, Samuel Thibault wrote:
> Just to make sure, could you check in System.map that accent_table is
> correctly 256*3*4=3072 bytes long?

See mail I just sent. A day a half wasted here. Sorry for however much
time you wasted on this.

-Mike

2007-10-19 15:34:33

by Randy Dunlap

[permalink] [raw]
Subject: Re: [bisected][mismerge?] Re: [microcode] 2.6.23.git pulled this morning oopses loading P4 microcode

On Fri, 19 Oct 2007 12:18:19 +0200 Mike Galbraith wrote:

> On Fri, 2007-10-19 at 04:49 +0200, Mike Galbraith wrote:
> > On Thu, 2007-10-18 at 23:33 +0100, Samuel Thibault wrote:
> > > Hi,
> > >
> > > Mike Galbraith, le Thu 18 Oct 2007 19:56:38 +0200, a ?crit :
> > > > The winner of a very long git bisect session:
> > > >
> > > > unicode diacritics support
> > >
> > > Uh, I fail to see how that could have an impact, I've again checked the
> > > boundaries, it looks fine, please people have a look.
> >
> > I too was reluctant to believe the bisect result. But...
>
> Weeeell now, that skepticism is indeed well founded. It's dontdiff. A
> diff of trees where defkeymap.c_shipped has been modified produces no
> output. Once a working tree has been afflicted by using diff+dontdiff
> to update it, even overwriting the entire tree via git-archive doesn't
> lead to a good build unless you also touch defkeymap.c_shipped
> afterward. In my case, the working tree remained buildable yet
> thoroughly busted through a lengthy bisect and beyond. That bisect
> positively identified... the victim.
>
> poo.

Yes, that's bad. Sam has asked me to fix some dontdiff problems.
I'll try to get to it soon. Other people can also update it....


---
~Randy