Eric Fox wrote: > Patch works if I disable SMP in kernel. Aha, and it didn't work without the patch with SMP disabled?
> strace setserial -g /dev/ttyM0 > execve("/bin/setserial", ["setserial", "-g", "/dev/ttyM0"], [/* 17 vars > */]) = 0 > uname({sys="Linux", node="dialin-0.vab.com", ...}) = 0 > brk(0) = 0x804d000 > access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or > directory) > open("/etc/ld.so.cache", O_RDONLY) = 3 > fstat64(3, {st_mode=S_IFREG|0644, st_size=19713, ...}) = 0 > old_mmap(NULL, 19713, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f58000 > close(3) = 0 > open("/lib/tls/libc.so.6", O_RDONLY) = 3 > read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320\36"..., 512) = > 512 > fstat64(3, {st_mode=S_IFREG|0755, st_size=1454802, ...}) = 0 > old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, > 0) = 0xb7f57000 > old_mmap(0x39d000, 1223900, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, > 3, 0) = 0x39d000 > old_mmap(0x4c2000, 16384, PROT_READ|PROT_WRITE, > MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x124000) = 0x4c2000 > old_mmap(0x4c6000, 7388, PROT_READ|PROT_WRITE, > MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4c6000 > close(3) = 0 > old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, > 0) = 0xb7f56000 > mprotect(0x4c2000, 4096, PROT_READ) = 0 > mprotect(0x399000, 4096, PROT_READ) = 0 > set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f566c0, limit:1048575, > seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, > seg_not_present:0, 0munmap(0xb7f58000, 19713) = 0 > open("/dev/ttyM0", O_RDWR|O_NONBLOCK) = 3 > ioctl(3, TIOCGSERIAL, 0xbf81c280) = 0 In one of these two there should lie the problem in SMP mode. The latter is OK (no locking), but the former -- hmm, it gets stuck: I guess, we have a recursive locking example here (I can see one of many in the driver now): isicom_open() { ... isicom_setup_port() ... } isicom_setup_port() { ... spin_lock_irqsave(&card->card_lock, flags); ... isicom_config_port(); ... spin_unlock_irqrestore(&card->card_lock, flags); } isicom_config_port() { ... lock_card() ... unlock_card() ... } lock_card() { ... spin_lock_irqsave(&card->card_lock, card->flags); ... } unlock_card() { spin_unlock_irqrestore(&card->card_lock, card->flags); } Going to fix these. thanks, -- http://www.fi.muni.cz/~xslaby/ Jiri Slaby faculty of informatics, masaryk university, brno, cz e-mail: jirislaby gmail com, gpg pubkey fingerprint: B674 9967 0407 CE62 ACC8 22A0 32CC 55C3 39D4 7A7E - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/