All of lore.kernel.org
 help / color / mirror / Atom feed
* v2.6.20-rt1, yum/rpm
@ 2007-02-05  6:56 Ingo Molnar
  2007-02-05  9:18 ` Serge Belyshev
                   ` (13 more replies)
  0 siblings, 14 replies; 54+ messages in thread
From: Ingo Molnar @ 2007-02-05  6:56 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-rt-users

i have released the v2.6.20-rt1 kernel, which can be downloaded from the 
usual place:

  http://redhat.com/~mingo/realtime-preempt/

more info about the -rt patchset can be found in the RT wiki:

  http://rt.wiki.kernel.org

This is a fixes-only release. Since the -rt tree has been closely 
tracking Linus' upstream kernel since -rc1, no new issues are expected - 
please re-report if anything is still unfixed.

There are lots of changes relative to 2.6.19-rt6 (the last stable 
release), but these are mostly fixes and other gradual improvements. KVM
is now enabled in the yum kernel on both i686 and x86_64 (and has been
enabled since around -rc1-rt1), the -rt tree tracks kvm-trunk (which is
a bit fresher than upstream KVM) and has a few additional paravirt
speedups implemented and enabled.

to build a 2.6.20-rt1 tree, the following patches should be applied:

  http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2
  http://redhat.com/~mingo/realtime-preempt/patch-2.6.20-rt1

the -rt YUM repository for Fedora Core 6 and 5, for architectures i686 
and x86_64 can be activated via:

   cd /etc/yum.repos.d
   wget http://people.redhat.com/~mingo/realtime-preempt/rt.repo

   yum install kernel-rt.x86_64   # on x86_64
   yum install kernel-rt          # on i686

   yum update kernel-rt           # refresh - or enable yum-updatesd

as usual, bugreports, fixes and suggestions are welcome,

	Ingo

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  9:18 ` Serge Belyshev
@ 2007-02-05  9:02   ` Ingo Molnar
  0 siblings, 0 replies; 54+ messages in thread
From: Ingo Molnar @ 2007-02-05  9:02 UTC (permalink / raw)
  To: Serge Belyshev; +Cc: linux-kernel, linux-rt-users


* Serge Belyshev <belyshev@depni.sinp.msu.ru> wrote:

> Ingo Molnar <mingo@elte.hu> writes:
> 
> > i have released the v2.6.20-rt1 kernel, which can be downloaded from 
> > the usual place:
> 
> I did not find tarball with split patches there. Could you please make 
> it available somewhere via http or ftp?

it basically consists of the -hrt queue, the GTOD queue (both are 
available in -mm) plus the rest of -rt in a mostly monolithic fashion. I 
dont really want to post it in a queue form because most of the time 
it's not bisectable, etc. It's really an internal thing - i do my 
development on the full tree, so that's the primary source form anyway.

	Ingo

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
@ 2007-02-05  9:18 ` Serge Belyshev
  2007-02-05  9:02   ` Ingo Molnar
  2007-02-05 10:36 ` Sunil Naidu
                   ` (12 subsequent siblings)
  13 siblings, 1 reply; 54+ messages in thread
From: Serge Belyshev @ 2007-02-05  9:18 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

Ingo Molnar <mingo@elte.hu> writes:

> i have released the v2.6.20-rt1 kernel, which can be downloaded from the 
> usual place:

I did not find tarball with split patches there.
Could you please make it available somewhere via http or ftp?

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05 10:42   ` Peter Zijlstra
@ 2007-02-05 10:22     ` Ingo Molnar
  2007-02-05 11:15     ` Sunil Naidu
  1 sibling, 0 replies; 54+ messages in thread
From: Ingo Molnar @ 2007-02-05 10:22 UTC (permalink / raw)
  To: Peter Zijlstra; +Cc: Sunil Naidu, linux-kernel, linux-rt-users


* Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:

> > But here is an interesting dmesg:
> > 
> > rcu_boost_dat: idx=1 b=0 ul=0 ub=0 boost: a=0 b=0
> > rcu_boost_dat block:    0  0  0  0?
> > rcu_boost_dat boost:    0! 0  0  0?
> > rcu_boost_dat unlock:   0? 0  0  0?
> > 
> > I didn'tunderstand this with ? Am I missing anything here or please
> > give some inputs.
> 
> That is Paul McKenney's RCU priority boosting stuff.

yeah, those messages are diagnostic. You can turn them off by disabling 
CONFIG_PREEMPT_RCU_BOOST_STATS.

	Ingo

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
  2007-02-05  9:18 ` Serge Belyshev
@ 2007-02-05 10:36 ` Sunil Naidu
  2007-02-05 10:42   ` Peter Zijlstra
  2007-02-05 12:59 ` Michal Piotrowski
                   ` (11 subsequent siblings)
  13 siblings, 1 reply; 54+ messages in thread
From: Sunil Naidu @ 2007-02-05 10:36 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

On 2/5/07, Ingo Molnar <mingo@elte.hu> wrote:
> i have released the v2.6.20-rt1 kernel, which can be downloaded from the
> usual place:

Clean boot for me with 2.6.20 & 2.6.20-rt1. There isn't any error
(like in 2.6.20-rc7-rt3).

But here is an interesting dmesg:

rcu_boost_dat: idx=1 b=0 ul=0 ub=0 boost: a=0 b=0
rcu_boost_dat block:    0  0  0  0?
rcu_boost_dat boost:    0! 0  0  0?
rcu_boost_dat unlock:   0? 0  0  0?

I didn'tunderstand this with ? Am I missing anything here or please
give some inputs.


Complete dmesg:-

Linux version 2.6.20-rt1-Topol (root@Typhoon) (gcc version 4.1.1
20070105 (Red Hat 4.1.1-51)) #1 SMP PREEMPT Mon Feb 5 15:28:07 IST
2007
BIOS-provided physical RAM map:
sanitize start
sanitize end
copy_e820_map() start: 0000000000000000 size: 000000000009fc00 end:
000000000009fc00 type: 1
copy_e820_map() type is E820_RAM
copy_e820_map() start: 000000000009fc00 size: 0000000000000400 end:
00000000000a0000 type: 2
copy_e820_map() start: 00000000000e6000 size: 000000000001a000 end:
0000000000100000 type: 2
copy_e820_map() start: 0000000000100000 size: 000000001f62f800 end:
000000001f72f800 type: 1
copy_e820_map() type is E820_RAM
copy_e820_map() start: 000000001f72f800 size: 0000000000000800 end:
000000001f730000 type: 4
copy_e820_map() start: 000000001f730000 size: 0000000000010000 end:
000000001f740000 type: 3
copy_e820_map() start: 000000001f740000 size: 00000000000b0000 end:
000000001f7f0000 type: 4
copy_e820_map() start: 000000001f7f0000 size: 0000000000010000 end:
000000001f800000 type: 2
copy_e820_map() start: 00000000e0000000 size: 0000000010000000 end:
00000000f0000000 type: 2
copy_e820_map() start: 00000000fed13000 size: 0000000000007000 end:
00000000fed1a000 type: 2
copy_e820_map() start: 00000000fed1c000 size: 0000000000084000 end:
00000000feda0000 type: 2
 BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
 BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 000000001f72f800 (usable)
 BIOS-e820: 000000001f72f800 - 000000001f730000 (ACPI NVS)
 BIOS-e820: 000000001f730000 - 000000001f740000 (ACPI data)
 BIOS-e820: 000000001f740000 - 000000001f7f0000 (ACPI NVS)
 BIOS-e820: 000000001f7f0000 - 000000001f800000 (reserved)
 BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
 BIOS-e820: 00000000fed13000 - 00000000fed1a000 (reserved)
 BIOS-e820: 00000000fed1c000 - 00000000feda0000 (reserved)
503MB LOWMEM available.
found SMP MP-table at 000ff780
Entering add_active_range(0, 0, 128815) 0 entries of 256 used
Zone PFN ranges:
  DMA             0 ->     4096
  Normal       4096 ->   128815
early_node_map[1] active PFN ranges
    0:        0 ->   128815
On node 0 totalpages: 128815
  DMA zone: 32 pages used for memmap
  DMA zone: 0 pages reserved
  DMA zone: 4064 pages, LIFO batch:0
  Normal zone: 974 pages used for memmap
  Normal zone: 123745 pages, LIFO batch:31
DMI 2.3 present.
ACPI: RSDP (v000 ACPIAM                                ) @ 0x000f4eb0
ACPI: RSDT (v001 INTEL  D915GAV  0x20060222 MSFT 0x00000097) @ 0x1f730000
ACPI: FADT (v002 INTEL  D915GAV  0x20060222 MSFT 0x00000097) @ 0x1f730200
ACPI: MADT (v001 INTEL  D915GAV  0x20060222 MSFT 0x00000097) @ 0x1f730390
ACPI: MCFG (v001 INTEL  D915GAV  0x20060222 MSFT 0x00000097) @ 0x1f730400
ACPI: ASF! (v016 LEGEND I865PASF 0x00000001 INTL 0x02002026) @ 0x1f736050
ACPI: TCPA (v001 INTEL  TBLOEMID 0x00000001 MSFT 0x00000097) @ 0x1f7360f0
ACPI: WDDT (v001 INTEL  OEMWDDT  0x00000001 INTL 0x02002026) @ 0x1f736122
ACPI: DSDT (v001 INTEL  D915GAV  0x00000001 INTL 0x02002026) @ 0x00000000
ACPI: PM-Timer IO Port: 0x408
ACPI: Local APIC address 0xfee00000
ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
Processor #0 15:4 APIC version 20
ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)
Processor #1 15:4 APIC version 20
ACPI: LAPIC_NMI (acpi_id[0x01] dfl dfl lint[0x1])
ACPI: LAPIC_NMI (acpi_id[0x02] dfl dfl lint[0x1])
ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0])
IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23
ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
ACPI: IRQ0 used by override.
ACPI: IRQ2 used by override.
ACPI: IRQ9 used by override.
Enabling APIC mode:  Flat.  Using 1 I/O APICs
Using ACPI (MADT) for SMP configuration information
Allocating PCI resources starting at 20000000 (gap: 1f800000:c0800000)
Detected 3000.307 MHz processor.
Real-Time Preemption Support (C) 2004-2007 Ingo Molnar
Built 1 zonelists.  Total pages: 127809
Kernel command line: ro root=LABEL=/1 rhgb quiet
mapped APIC to ffffd000 (fee00000)
mapped IOAPIC to ffffc000 (fec00000)
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Initializing CPU#0
WARNING: experimental RCU implementation.
PID hash table entries: 2048 (order: 11, 8192 bytes)
Console: colour VGA+ 80x25
num_possible_cpus(): 2
CPU#0: allocated 2097152 bytes trace buffer.
CPU#0: allocated 2097152 bytes max-trace buffer.
CPU#1: allocated 2097152 bytes trace buffer.
CPU#1: allocated 2097152 bytes max-trace buffer.
allocated 4194304 bytes out-trace buffer.
tracer: a total of 12582912 bytes allocated.
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 492048k/515260k available (1931k kernel code, 22604k reserved,
748k data, 220k init, 0k highmem)
virtual kernel memory layout:
    fixmap  : 0xfffb7000 - 0xfffff000   ( 288 kB)
    vmalloc : 0xe0000000 - 0xfffb5000   ( 511 MB)
    lowmem  : 0xc0000000 - 0xdf72f000   ( 503 MB)
      .init : 0xc03a3000 - 0xc03da000   ( 220 kB)
      .data : 0xc02e2c71 - 0xc039df34   ( 748 kB)
      .text : 0xc0100000 - 0xc02e2c71   (1931 kB)
Checking if this processor honours the WP bit even in supervisor mode... Ok.
Calibrating delay using timer specific routine.. 6003.02 BogoMIPS (lpj=3001512)
Security Framework v1.0.0 initialized
SELinux:  Initializing.
SELinux:  Starting in permissive mode
selinux_register_security:  Registering secondary module capability
Capability LSM initialized as secondary
Mount-cache hash table entries: 512
CPU: After generic identify, caps: bfebfbff 00100000 00000000 00000000
0000441d 00000000 00000000
monitor/mwait feature present.
using mwait in idle threads.
CPU: Trace cache: 12K uops, L1 D cache: 16K
CPU: L2 cache: 1024K
CPU: Physical Processor ID: 0
CPU: After all inits, caps: bfebfbff 00100000 00000000 00003180
0000441d 00000000 00000000
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#0.
CPU0: Intel P4/Xeon Extended MCE MSRs (12) available
CPU0: Thermal monitoring enabled
Checking 'hlt' instruction... OK.
Freeing SMP alternatives: 10k freed
ACPI: Core revision 20060707
CPU0: Intel(R) Pentium(R) 4 CPU 3.00GHz stepping 01
Booting processor 1/1 eip 2000
Initializing CPU#1
Calibrating delay using timer specific routine.. 5999.34 BogoMIPS (lpj=2999670)
CPU: After generic identify, caps: bfebfbff 00100000 00000000 00000000
0000441d 00000000 00000000
monitor/mwait feature present.
CPU: Trace cache: 12K uops, L1 D cache: 16K
CPU: L2 cache: 1024K
CPU: Physical Processor ID: 0
CPU: After all inits, caps: bfebfbff 00100000 00000000 00003180
0000441d 00000000 00000000
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#1.
CPU1: Intel P4/Xeon Extended MCE MSRs (12) available
CPU1: Thermal monitoring enabled
CPU1: Intel(R) Pentium(R) 4 CPU 3.00GHz stepping 01
Total of 2 processors activated (12002.36 BogoMIPS).
ENABLING IO-APIC IRQs
..TIMER: vector=0x31 apic1=0 pin1=2 apic2=-1 pin2=-1
checking TSC synchronization [CPU#0 -> CPU#1]: passed.
Brought up 2 CPUs
migration_cost=84
Starting RCU priority booster
NET: Registered protocol family 16
ACPI: bus type pci registered
PCI: Using MMCONFIG
Setting up standard PCI resources
rcu_boost_dat: idx=1 b=0 ul=0 ub=0 boost: a=0 b=0
rcu_boost_dat block:    0  0  0  0?
rcu_boost_dat boost:    0! 0  0  0?
rcu_boost_dat unlock:   0? 0  0  0?
ACPI: Interpreter enabled
ACPI: Using IOAPIC for interrupt routing
ACPI: PCI Root Bridge [PCI0] (0000:00)
PCI: Probing PCI hardware (bus 00)
Boot video device is 0000:00:02.0
PCI quirk: region 0400-047f claimed by ICH6 ACPI/GPIO/TCO
PCI quirk: region 0500-053f claimed by ICH6 GPIO
PCI: Transparent bridge - 0000:00:1e.0
ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]
ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEGP._PRT]
ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P2._PRT]
ACPI: Power Resource [URP1] (off)
ACPI: Power Resource [FDDP] (off)
ACPI: Power Resource [LPTP] (off)
ACPI: Power Resource [URP2] (off)
ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEX1._PRT]
ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEX2._PRT]
ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEX3._PRT]
ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEX4._PRT]
ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 9 10 *11 12 14 15)
ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 9 10 11 12 14 15) *0, disabled.
ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 *5 6 7 9 10 11 12 14 15)
ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 9 *10 11 12 14 15)
ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 7 9 10 11 12 14 15) *0, disabled.
ACPI: PCI Interrupt Link [LNKF] (IRQs *3 4 5 6 7 9 10 11 12 14 15)
ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 7 9 10 11 12 14 15) *0, disabled.
ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 7 *9 10 11 12 14 15)
Linux Plug and Play Support v0.97 (c) Adam Belay
pnp: PnP ACPI init
pnp: PnP ACPI: found 13 devices
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
PCI: Using ACPI for IRQ routing
PCI: If a device doesn't work, try "pci=routeirq".  If it helps, post a report
NetLabel: Initializing
NetLabel:  domain hash size = 128
NetLabel:  protocols = UNLABELED CIPSOv4
NetLabel:  unlabeled traffic allowed by default
pnp: 00:0b: ioport range 0x400-0x47f could not be reserved
pnp: 00:0b: ioport range 0x680-0x6ff has been reserved
pnp: 00:0b: ioport range 0x500-0x53f has been reserved
PCI: Ignore bogus resource 6 [0:0] of 0000:00:02.0
PCI: Bridge: 0000:00:01.0
  IO window: disabled.
  MEM window: ffa00000-ffafffff
  PREFETCH window: cff00000-cfffffff
PCI: Bridge: 0000:00:1c.0
  IO window: disabled.
  MEM window: ff600000-ff6fffff
  PREFETCH window: cfb00000-cfbfffff
PCI: Bridge: 0000:00:1c.1
  IO window: disabled.
  MEM window: ff700000-ff7fffff
  PREFETCH window: cfc00000-cfcfffff
PCI: Bridge: 0000:00:1c.2
  IO window: disabled.
  MEM window: ff800000-ff8fffff
  PREFETCH window: cfd00000-cfdfffff
PCI: Bridge: 0000:00:1c.3
  IO window: disabled.
  MEM window: ff900000-ff9fffff
  PREFETCH window: cfe00000-cfefffff
PCI: Bridge: 0000:00:1e.0
  IO window: b000-bfff
  MEM window: ff500000-ff5fffff
  PREFETCH window: cfa00000-cfafffff
ACPI: PCI Interrupt 0000:00:01.0[A] -> GSI 16 (level, low) -> IRQ 16
PCI: Setting latency timer of device 0000:00:01.0 to 64
ACPI: PCI Interrupt 0000:00:1c.0[A] -> GSI 17 (level, low) -> IRQ 17
PCI: Setting latency timer of device 0000:00:1c.0 to 64
ACPI: PCI Interrupt 0000:00:1c.1[B] -> GSI 16 (level, low) -> IRQ 16
PCI: Setting latency timer of device 0000:00:1c.1 to 64
ACPI: PCI Interrupt 0000:00:1c.2[C] -> GSI 18 (level, low) -> IRQ 18
PCI: Setting latency timer of device 0000:00:1c.2 to 64
ACPI: PCI Interrupt 0000:00:1c.3[D] -> GSI 19 (level, low) -> IRQ 19
PCI: Setting latency timer of device 0000:00:1c.3 to 64
PCI: Setting latency timer of device 0000:00:1e.0 to 64
NET: Registered protocol family 2
IP route cache hash table entries: 4096 (order: 2, 16384 bytes)
TCP established hash table entries: 16384 (order: 7, 655360 bytes)
TCP bind hash table entries: 8192 (order: 6, 294912 bytes)
TCP: Hash tables configured (established 16384 bind 8192)
TCP reno registered
checking if image is initramfs... it is
Freeing initrd memory: 1459k freed
audit: initializing netlink socket (disabled)
audit(1170689521.499:1): initialized
VFS: Disk quotas dquot_6.5.1
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
SELinux:  Registering netfilter hooks
io scheduler noop registered
io scheduler cfq registered (default)
PCI: Setting latency timer of device 0000:00:01.0 to 64
assign_interrupt_mode Found MSI capability
Allocate Port Service[0000:00:01.0:pcie00]
Allocate Port Service[0000:00:01.0:pcie03]
PCI: Setting latency timer of device 0000:00:1c.0 to 64
assign_interrupt_mode Found MSI capability
Allocate Port Service[0000:00:1c.0:pcie00]
Allocate Port Service[0000:00:1c.0:pcie02]
Allocate Port Service[0000:00:1c.0:pcie03]
PCI: Setting latency timer of device 0000:00:1c.1 to 64
assign_interrupt_mode Found MSI capability
Allocate Port Service[0000:00:1c.1:pcie00]
Allocate Port Service[0000:00:1c.1:pcie02]
Allocate Port Service[0000:00:1c.1:pcie03]
PCI: Setting latency timer of device 0000:00:1c.2 to 64
assign_interrupt_mode Found MSI capability
Allocate Port Service[0000:00:1c.2:pcie00]
Allocate Port Service[0000:00:1c.2:pcie02]
Allocate Port Service[0000:00:1c.2:pcie03]
PCI: Setting latency timer of device 0000:00:1c.3 to 64
assign_interrupt_mode Found MSI capability
Allocate Port Service[0000:00:1c.3:pcie00]
Allocate Port Service[0000:00:1c.3:pcie02]
Allocate Port Service[0000:00:1c.3:pcie03]
ACPI: Processor [CPU1] (supports 8 throttling states)
ACPI: Processor [CPU2] (supports 8 throttling states)
isapnp: Scanning for PnP cards...
isapnp: No Plug & Play device found
Real Time Clock Driver v1.12ac
Non-volatile memory driver v1.2
Linux agpgart interface v0.101 (c) Dave Jones
agpgart: Detected an Intel 915G Chipset.
agpgart: Detected 7932K stolen memory.
agpgart: AGP aperture is 256M @ 0xd0000000
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
RAMDISK driver initialized: 16 RAM disks of 16384K size 4096 blocksize
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
ICH6: IDE controller at PCI slot 0000:00:1f.1
ACPI: PCI Interrupt 0000:00:1f.1[A] -> GSI 18 (level, low) -> IRQ 18
ICH6: chipset revision 3
ICH6: not 100% native mode: will probe irqs later
    ide0: BM-DMA at 0xffa0-0xffa7, BIOS settings: hda:DMA, hdb:DMA
    ide1: BM-DMA at 0xffa8-0xffaf, BIOS settings: hdc:pio, hdd:pio
Probing IDE interface ide0...
hda: HL-DT-ST DVDRAM GSA-4163B, ATAPI CD/DVD-ROM drive
hdb: HL-DT-ST GCE-8527B, ATAPI CD/DVD-ROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
Probing IDE interface ide1...
Probing IDE interface ide1...
usbcore: registered new interface driver libusual
usbcore: registered new interface driver hiddev
usbcore: registered new interface driver usbhid
drivers/usb/input/hid-core.c: v2.6:USB HID core driver
PNP: PS/2 Controller [PNP0303:PS2K] at 0x60,0x64 irq 1
PNP: PS/2 controller doesn't have AUX irq; using default 12
serio: i8042 KBD port at 0x60,0x64 irq 1
serio: i8042 AUX port at 0x60,0x64 irq 12
mice: PS/2 mouse device common for all mice
input: AT Translated Set 2 keyboard as /class/input/input0
TCP cubic registered
Initializing XFRM netlink socket
NET: Registered protocol family 1
NET: Registered protocol family 17
Starting balanced_irq
Using IPI Shortcut mode
Freeing unused kernel memory: 220k freed
Time: tsc clocksource has been installed.
USB Universal Host Controller Interface driver v3.0
ACPI: PCI Interrupt 0000:00:1d.0[A] -> GSI 23 (level, low) -> IRQ 20
PCI: Setting latency timer of device 0000:00:1d.0 to 64
uhci_hcd 0000:00:1d.0: UHCI Host Controller
uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 1
uhci_hcd 0000:00:1d.0: irq 20, io base 0x0000c800
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
ACPI: PCI Interrupt 0000:00:1d.1[B] -> GSI 19 (level, low) -> IRQ 19
PCI: Setting latency timer of device 0000:00:1d.1 to 64
uhci_hcd 0000:00:1d.1: UHCI Host Controller
uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 2
uhci_hcd 0000:00:1d.1: irq 19, io base 0x0000cc00
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 2 ports detected
ACPI: PCI Interrupt 0000:00:1d.2[C] -> GSI 18 (level, low) -> IRQ 18
PCI: Setting latency timer of device 0000:00:1d.2 to 64
uhci_hcd 0000:00:1d.2: UHCI Host Controller
uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 3
uhci_hcd 0000:00:1d.2: irq 18, io base 0x0000d000
usb usb3: configuration #1 chosen from 1 choice
hub 3-0:1.0: USB hub found
hub 3-0:1.0: 2 ports detected
Switched to high resolution mode on CPU 1
Switched to high resolution mode on CPU 0
ACPI: PCI Interrupt 0000:00:1d.3[D] -> GSI 16 (level, low) -> IRQ 16
PCI: Setting latency timer of device 0000:00:1d.3 to 64
uhci_hcd 0000:00:1d.3: UHCI Host Controller
uhci_hcd 0000:00:1d.3: new USB bus registered, assigned bus number 4
uhci_hcd 0000:00:1d.3: irq 16, io base 0x0000d400
usb usb4: configuration #1 chosen from 1 choice
hub 4-0:1.0: USB hub found
hub 4-0:1.0: 2 ports detected
usb 2-1: new low speed USB device using uhci_hcd and address 2
ohci_hcd: 2006 August 04 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI)
ACPI: PCI Interrupt 0000:00:1d.7[A] -> GSI 23 (level, low) -> IRQ 20
PCI: Setting latency timer of device 0000:00:1d.7 to 64
ehci_hcd 0000:00:1d.7: EHCI Host Controller
ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 5
ehci_hcd 0000:00:1d.7: debug port 1
PCI: cache line size of 128 is not supported by device 0000:00:1d.7
ehci_hcd 0000:00:1d.7: irq 20, io mem 0xff43bc00
ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb5: configuration #1 chosen from 1 choice
hub 5-0:1.0: USB hub found
hub 5-0:1.0: 8 ports detected
SCSI subsystem initialized
libata version 2.00 loaded.
ata_piix 0000:00:1f.2: version 2.00ac7
ata_piix 0000:00:1f.2: MAP [ P0 P2 P1 P3 ]
ACPI: PCI Interrupt 0000:00:1f.2[B] -> GSI 19 (level, low) -> IRQ 19
PCI: Setting latency timer of device 0000:00:1f.2 to 64
ata1: SATA max UDMA/133 cmd 0xE800 ctl 0xE402 bmdma 0xD800 irq 19
ata2: SATA max UDMA/133 cmd 0xE000 ctl 0xDC02 bmdma 0xD808 irq 19
scsi0 : ata_piix
ATA: abnormal status 0x7F on port 0xE807
scsi1 : ata_piix
ata2.00: ATA-6, max UDMA/133, 312581808 sectors: LBA48 NCQ (depth 0/32)
ata2.00: ata2: dev 0 multi count 16
ata2.00: configured for UDMA/133
scsi 1:0:0:0: Direct-Access     ATA      ST3160827AS      3.42 PQ: 0 ANSI: 5
SCSI device sda: 312581808 512-byte hdwr sectors (160042 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: write cache: enabled, read cache: enabled, doesn't
support DPO or FUA
SCSI device sda: 312581808 512-byte hdwr sectors (160042 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: write cache: enabled, read cache: enabled, doesn't
support DPO or FUA
 sda: sda1 sda2 sda3 < sda5 sda6 sda7 sda8<6>usb 2-1: new low speed
USB device using uhci_hcd and address 3
 sda9 >
 sda2: <solaris: [s0] sda10 [s1] sda11 [s2] sda12 [s3] sda13 [s4]
sda14 [s5] sda15 >
sd 1:0:0:0: Attached scsi disk sda
usb 2-1: configuration #1 chosen from 1 choice
input: Microsoft Basic Optical Mouse as /class/input/input1
input: USB HID v1.10 Mouse [Microsoft Basic Optical Mouse] on usb-0000:00:1d.1-1
kjournald starting.  Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
SELinux:  Disabled at runtime.
SELinux:  Unregistering netfilter hooks
audit(1170689526.186:2): selinux=0 auid=4294967295
sd 1:0:0:0: Attached scsi generic sg0 type 0
input: PC Speaker as /class/input/input2
iTCO_wdt: Intel TCO WatchDog Timer Driver v1.01 (11-Nov-2006)
iTCO_wdt: Found a ICH6 or ICH6R TCO device (Version=2, TCOBASE=0x0460)
iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)
hda: ATAPI 40X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache, UDMA(33)
Uniform CD-ROM driver Revision: 3.20
fealnx.c:v2.52 Sep-11-2006
ACPI: PCI Interrupt 0000:06:00.0[A] -> GSI 21 (level, low) -> IRQ 21
eth0: 100/10M Ethernet PCI Adapter at 0001b800, 00:a1:b0:10:88:1a, IRQ 21.
hdb: ATAPI 52X CD-ROM CD-R/RW drive, 1536kB Cache, UDMA(33)
intel_rng: Firmware space is locked read-only. If you can't or
intel_rng: don't want to disable this in firmware setup, and if
intel_rng: you are certain that your system has a functional
intel_rng: RNG, try using the 'no_fwh_detect' option.
ACPI: PCI Interrupt 0000:00:1f.3[B] -> GSI 19 (level, low) -> IRQ 19
ACPI: PCI Interrupt 0000:00:1b.0[A] -> GSI 16 (level, low) -> IRQ 16
PCI: Setting latency timer of device 0000:00:1b.0 to 64
input: Power Button (FF) as /class/input/input3
ACPI: Power Button (FF) [PWRF]
input: Power Button (CM) as /class/input/input4
ACPI: Power Button (CM) [PWRB]
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.
device-mapper: ioctl: 4.11.0-ioctl (2006-10-12) initialised: dm-devel@redhat.com
device-mapper: multipath: version 1.0.5 loaded
EXT3 FS on sda6, internal journal
kjournald starting.  Commit interval 5 seconds
EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
EXT3 FS on sda7, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
fuse init (API version 7.8)
Adding 1052216k swap on /dev/sda5.  Priority:-1 extents:1 across:1052216k
IA-32 Microcode Update Driver: v1.14a <tigran@aivazian.fsnet.co.uk>
audit(1170669747.393:3): audit_pid=2000 old=0 by auid=4294967295
[drm] Initialized drm 1.1.0 20060810
ACPI: PCI Interrupt 0000:00:02.0[A] -> GSI 16 (level, low) -> IRQ 16
[drm] Initialized i915 1.6.0 20060119 on minor 0

Thanks,

~Akula2

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05 10:36 ` Sunil Naidu
@ 2007-02-05 10:42   ` Peter Zijlstra
  2007-02-05 10:22     ` Ingo Molnar
  2007-02-05 11:15     ` Sunil Naidu
  0 siblings, 2 replies; 54+ messages in thread
From: Peter Zijlstra @ 2007-02-05 10:42 UTC (permalink / raw)
  To: Sunil Naidu; +Cc: Ingo Molnar, linux-kernel, linux-rt-users

On Mon, 2007-02-05 at 16:06 +0530, Sunil Naidu wrote:
> On 2/5/07, Ingo Molnar <mingo@elte.hu> wrote:
> > i have released the v2.6.20-rt1 kernel, which can be downloaded from the
> > usual place:
> 
> Clean boot for me with 2.6.20 & 2.6.20-rt1. There isn't any error
> (like in 2.6.20-rc7-rt3).
> 
> But here is an interesting dmesg:
> 
> rcu_boost_dat: idx=1 b=0 ul=0 ub=0 boost: a=0 b=0
> rcu_boost_dat block:    0  0  0  0?
> rcu_boost_dat boost:    0! 0  0  0?
> rcu_boost_dat unlock:   0? 0  0  0?
> 
> I didn'tunderstand this with ? Am I missing anything here or please
> give some inputs.

That is Paul McKenney's RCU priority boosting stuff.

Look here:
  http://lkml.org/lkml/2007/1/24/294


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05 10:42   ` Peter Zijlstra
  2007-02-05 10:22     ` Ingo Molnar
@ 2007-02-05 11:15     ` Sunil Naidu
  1 sibling, 0 replies; 54+ messages in thread
From: Sunil Naidu @ 2007-02-05 11:15 UTC (permalink / raw)
  To: Peter Zijlstra; +Cc: Ingo Molnar, linux-kernel, linux-rt-users

On 2/5/07, Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:
> On Mon, 2007-02-05 at 16:06 +0530, Sunil Naidu wrote:
> > On 2/5/07, Ingo Molnar <mingo@elte.hu> wrote:
> > > i have released the v2.6.20-rt1 kernel, which can be downloaded from the
> > > usual place:
> >
> > Clean boot for me with 2.6.20 & 2.6.20-rt1. There isn't any error
> > (like in 2.6.20-rc7-rt3).
> >
> > But here is an interesting dmesg:
> >
> > rcu_boost_dat: idx=1 b=0 ul=0 ub=0 boost: a=0 b=0
> > rcu_boost_dat block:    0  0  0  0?
> > rcu_boost_dat boost:    0! 0  0  0?
> > rcu_boost_dat unlock:   0? 0  0  0?
> >
> > I didn'tunderstand this with ? Am I missing anything here or please
> > give some inputs.
>
> That is Paul McKenney's RCU priority boosting stuff.
>
> Look here:
>   http://lkml.org/lkml/2007/1/24/294

Thanks for the input. I did check the URL to refer the update of the
patch by Paul:-

http://lkml.org/lkml/2007/01/15/219

I am getting error, The requested URL /lkml/2007/01/15/219. was not
found on this server.

~Akula2

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
  2007-02-05  9:18 ` Serge Belyshev
  2007-02-05 10:36 ` Sunil Naidu
@ 2007-02-05 12:59 ` Michal Piotrowski
  2007-02-05 13:47   ` Ingo Molnar
  2007-02-05 14:25 ` Karsten Wiese
                   ` (10 subsequent siblings)
  13 siblings, 1 reply; 54+ messages in thread
From: Michal Piotrowski @ 2007-02-05 12:59 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

Hi,

On 05/02/07, Ingo Molnar <mingo@elte.hu> wrote:
> i have released the v2.6.20-rt1 kernel, which can be downloaded from the
> usual place:
>
>   http://redhat.com/~mingo/realtime-preempt/
>

It looks like a bug to me

BUG: MAX_LOCKDEP_ENTRIES too low!
turning off the locking correctness validator.

http://www.stardust.webpages.pl/files/tbf/euridica/2.6.20-rt1/rt-dmesg
http://www.stardust.webpages.pl/files/tbf/euridica/2.6.20-rt1/rt-config

Regards,
Michal

-- 
Michal K. K. Piotrowski
LTG - Linux Testers Group
(http://www.stardust.webpages.pl/ltg/)

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05 12:59 ` Michal Piotrowski
@ 2007-02-05 13:47   ` Ingo Molnar
  2007-02-05 21:29     ` Michal Piotrowski
  0 siblings, 1 reply; 54+ messages in thread
From: Ingo Molnar @ 2007-02-05 13:47 UTC (permalink / raw)
  To: Michal Piotrowski; +Cc: linux-kernel, linux-rt-users


* Michal Piotrowski <michal.k.k.piotrowski@gmail.com> wrote:

> It looks like a bug to me
> 
> BUG: MAX_LOCKDEP_ENTRIES too low!
> turning off the locking correctness validator.

hm, the patch below should solve this.

	Ingo

Index: linux/kernel/lockdep_internals.h
===================================================================
--- linux.orig/kernel/lockdep_internals.h
+++ linux/kernel/lockdep_internals.h
@@ -15,7 +15,7 @@
  * table (if it's not there yet), and we check it for lock order
  * conflicts and deadlocks.
  */
-#define MAX_LOCKDEP_ENTRIES	8192UL
+#define MAX_LOCKDEP_ENTRIES	16384UL
 
 #define MAX_LOCKDEP_KEYS_BITS	11
 #define MAX_LOCKDEP_KEYS	(1UL << MAX_LOCKDEP_KEYS_BITS)


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
                   ` (2 preceding siblings ...)
  2007-02-05 12:59 ` Michal Piotrowski
@ 2007-02-05 14:25 ` Karsten Wiese
  2007-02-05 21:46   ` USX2Y 2.6.20-rt2 Oops on disconnect Rui Nuno Capela
  2007-02-10  1:29   ` us428control 0.4.5 [RFC] Rui Nuno Capela
  2007-02-05 15:17 ` v2.6.20-rt1, yum/rpm Parag Warudkar
                   ` (9 subsequent siblings)
  13 siblings, 2 replies; 54+ messages in thread
From: Karsten Wiese @ 2007-02-05 14:25 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

Am Montag, 5. Februar 2007 07:56 schrieb Ingo Molnar:
> i have released the v2.6.20-rt1 kernel, which can be downloaded from the 

after resuming from
	$ echo mem > /sys/power/state
both lapic and pic are active, while only lapic should be.
resuming from
	$ echo disk > /sys/power/state
is fine.

      Karsten

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
                   ` (3 preceding siblings ...)
  2007-02-05 14:25 ` Karsten Wiese
@ 2007-02-05 15:17 ` Parag Warudkar
  2007-02-05 21:50 ` Michal Piotrowski
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 54+ messages in thread
From: Parag Warudkar @ 2007-02-05 15:17 UTC (permalink / raw)
  To: linux-kernel

Ingo Molnar <mingo <at> elte.hu> writes:

> 
> i have released the v2.6.20-rt1 kernel, which can be downloaded from the 
> usual place:
> 
>   http://redhat.com/~mingo/realtime-preempt/
> 
> more info about the -rt patchset can be found in the RT wiki:
> 
>   http://rt.wiki.kernel.org
> 

On FC6 with KVM userspace from trunk I get a ton of errors like this in dmesg -

=======================
---------------------------
| preempt count: 00000001 ]
| 1-level deep critical section nesting:
----------------------------------------
.. [<f90ecc48>] .... vmx_vcpu_load+0x26/0xd2 [kvm_intel]
.....[<f90b0a1c>] ..   ( <= vcpu_load+0x38/0x3c [kvm])

BUG: sleeping function called from invalid context qemu(4314) at
arch/i386/mm/highmem.c:8
in_atomic():1 [00000001], irqs_disabled():0
 [<c010503c>] dump_trace+0x63/0x1e8
 [<c01051dd>] show_trace_log_lvl+0x1c/0x39
 [<c01055d4>] show_trace+0x12/0x14
 [<c01055ea>] dump_stack+0x14/0x16
 [<c0122b71>] __might_sleep+0x110/0x117
 [<c012161b>] kmap+0x3e/0x48
 [<f90b415e>] paging32_walk_addr+0x214/0x276 [kvm]
 [<f90b4f08>] paging32_page_fault+0x51/0x749 [kvm]
 [<f90ede01>] handle_exception+0xeb/0x1da [kvm_intel]
 [<f90edc8a>] kvm_vmx_return+0x169/0x1f5 [kvm_intel]
 [<f90b108a>] kvm_dev_ioctl+0x284/0x1148 [kvm]
 [<c0189db9>] do_ioctl+0x21/0x66
 [<c018a053>] vfs_ioctl+0x255/0x268
 [<c018a0ae>] sys_ioctl+0x48/0x62
 [<c0104009>] syscall_call+0x7/0xb
 [<009858b2>] 0x9858b2
 =======================
---------------------------
| preempt count: 00000001 ]
| 1-level deep critical section nesting:
----------------------------------------
.. [<f90ecc48>] .... vmx_vcpu_load+0x26/0xd2 [kvm_intel]
.....[<f90b0a1c>] ..   ( <= vcpu_load+0x38/0x3c [kvm])

BUG: sleeping function called from invalid context qemu(4314) at
arch/i386/mm/highmem.c:8
in_atomic():1 [00000001], irqs_disabled():0
 [<c010503c>] dump_trace+0x63/0x1e8
 [<c01051dd>] show_trace_log_lvl+0x1c/0x39
 [<c01055d4>] show_trace+0x12/0x14
 [<c01055ea>] dump_stack+0x14/0x16
 [<c0122b71>] __might_sleep+0x110/0x117
 [<c012161b>] kmap+0x3e/0x48
 [<f90b415e>] paging32_walk_addr+0x214/0x276 [kvm]
 [<f90b4f08>] paging32_page_fault+0x51/0x749 [kvm]
 [<f90ede01>] handle_exception+0xeb/0x1da [kvm_intel]
 [<f90edc8a>] kvm_vmx_return+0x169/0x1f5 [kvm_intel]
 [<f90b108a>] kvm_dev_ioctl+0x284/0x1148 [kvm]
 [<c0189db9>] do_ioctl+0x21/0x66
 [<c018a053>] vfs_ioctl+0x255/0x268
 [<c018a0ae>] sys_ioctl+0x48/0x62
 [<c0104009>] syscall_call+0x7/0xb
 [<009858b2>] 0x9858b2
 =======================
---------------------------
| preempt count: 00000001 ]
| 1-level deep critical section nesting:
----------------------------------------
.. [<f90ecc48>] .... vmx_vcpu_load+0x26/0xd2 [kvm_intel]
.....[<f90b0a1c>] ..   ( <= vcpu_load+0x38/0x3c [kvm])



^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05 13:47   ` Ingo Molnar
@ 2007-02-05 21:29     ` Michal Piotrowski
  0 siblings, 0 replies; 54+ messages in thread
From: Michal Piotrowski @ 2007-02-05 21:29 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Michal Piotrowski, linux-kernel, linux-rt-users

Ingo Molnar napisał(a):
> * Michal Piotrowski <michal.k.k.piotrowski@gmail.com> wrote:
> 
>> It looks like a bug to me
>>
>> BUG: MAX_LOCKDEP_ENTRIES too low!
>> turning off the locking correctness validator.
> 
> hm, the patch below should solve this.

Lockdep works. Thanks!

2.6.20-rt2

======================================================
[ INFO: hard-safe -> hard-unsafe lock order detected ]
[ 2.6.20-rt2 #2
------------------------------------------------------
softirq-timer/0/5 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire:
 (console_sem.lock){--..}, at: [<c0311981>] rt_mutex_slowunlock+0xc/0x5b

and this task is already holding:
 (xtime_lock){+...}, at: [<c012a8b8>] run_timer_softirq+0x47/0x9ad
which would create a new lock dependency:
 (xtime_lock){+...} -> (console_sem.lock){--..}

but this new dependency connects a hard-irq-safe lock:
 (xtime_lock){+...}
... which became hard-irq-safe at:
  [<c013d124>] mark_lock+0x6b/0x40b
  [<c013dee5>] __lock_acquire+0x3b3/0xb94
  [<c013e72e>] lock_acquire+0x68/0x82
  [<c03127d3>] __spin_lock+0x35/0x42
  [<c013a654>] tick_periodic+0x15/0x68
  [<c013a6ba>] tick_handle_periodic+0x13/0x45
  [<c010684f>] timer_interrupt+0x31/0x38
  [<c0155912>] handle_IRQ_event+0x63/0xfc
  [<c0157267>] handle_level_irq+0xa7/0xf0
  [<c0105dc1>] do_IRQ+0xa3/0xce
  [<c0103ac6>] common_interrupt+0x2e/0x34
  [<c0312e57>] __spin_unlock_irqrestore+0x42/0x59
  [<c0156075>] setup_irq+0x170/0x1e0
  [<c04907e4>] time_init_hook+0x19/0x1b
  [<c0488d87>] hpet_time_init+0xd/0xf
  [<c0485667>] start_kernel+0x271/0x42a
  [<ffffffff>] 0xffffffff

to a hard-irq-unsafe lock:
 (console_sem.lock){--..}
... which became hard-irq-unsafe at:
...  [<c013d124>] mark_lock+0x6b/0x40b
  [<c013d50e>] mark_held_locks+0x4a/0x67
  [<c013d6f1>] trace_hardirqs_on+0x10d/0x150
  [<c0312e55>] __spin_unlock_irqrestore+0x40/0x59
  [<c01431f4>] task_blocks_on_rt_mutex+0x1c4/0x20a
  [<c0311cd0>] rt_mutex_slowlock+0x140/0x234
  [<c03119fd>] rt_mutex_lock+0x2d/0x31
  [<c014441a>] rt_down+0x11/0x28
  [<c012290f>] acquire_console_sem+0x36/0x4c
  [<c0209c10>] fb_flashcursor+0x1a/0x24d
  [<c013177a>] run_workqueue+0x8b/0xd8
  [<c0132309>] worker_thread+0xf8/0x124
  [<c01344b4>] kthread+0xb5/0xe1
  [<c0103dab>] kernel_thread_helper+0x7/0x10
  [<ffffffff>] 0xffffffff

other info that might help us debug this:

1 lock held by softirq-timer/0/5:
 #0:  (xtime_lock){+...}, at: [<c012a8b8>] run_timer_softirq+0x47/0x9ad

the hard-irq-safe lock's dependencies:
-> (xtime_lock){+...} ops: 7875 {
   initial-use  at:
                        [<c013d124>] mark_lock+0x6b/0x40b
                        [<c013dfb9>] __lock_acquire+0x487/0xb94
                        [<c013e72e>] lock_acquire+0x68/0x82
                        [<c03127d3>] __spin_lock+0x35/0x42
                        [<c04916fb>] timekeeping_init+0x25/0x143
                        [<c04855be>] start_kernel+0x1c8/0x42a
                        [<ffffffff>] 0xffffffff
   in-hardirq-W at:
                        [<c013d124>] mark_lock+0x6b/0x40b
                        [<c013dee5>] __lock_acquire+0x3b3/0xb94
                        [<c013e72e>] lock_acquire+0x68/0x82
                        [<c03127d3>] __spin_lock+0x35/0x42
                        [<c013a654>] tick_periodic+0x15/0x68
                        [<c013a6ba>] tick_handle_periodic+0x13/0x45
                        [<c010684f>] timer_interrupt+0x31/0x38
                        [<c0155912>] handle_IRQ_event+0x63/0xfc
                        [<c0157267>] handle_level_irq+0xa7/0xf0
                        [<c0105dc1>] do_IRQ+0xa3/0xce
                        [<c0103ac6>] common_interrupt+0x2e/0x34
                        [<c0312e57>] __spin_unlock_irqrestore+0x42/0x59
                        [<c0156075>] setup_irq+0x170/0x1e0
                        [<c04907e4>] time_init_hook+0x19/0x1b
                        [<c0488d87>] hpet_time_init+0xd/0xf
                        [<c0485667>] start_kernel+0x271/0x42a
                        [<ffffffff>] 0xffffffff
 }
 ... key      at: [<c046bb18>] xtime_lock+0x18/0x80
 -> (clocksource_lock){....} ops: 3800 {
    initial-use  at:
                          [<c013d124>] mark_lock+0x6b/0x40b
                          [<c013dfb9>] __lock_acquire+0x487/0xb94
                          [<c013e72e>] lock_acquire+0x68/0x82
                          [<c0312a40>] __spin_lock_irqsave+0x3e/0x4e
                          [<c0138c4b>] clocksource_get_next+0xd/0x43
                          [<c049170b>] timekeeping_init+0x35/0x143
                          [<c04855be>] start_kernel+0x1c8/0x42a
                          [<ffffffff>] 0xffffffff
  }
  ... key      at: [<c046bd94>] clocksource_lock+0x14/0x80
 ... acquired at:
   [<c013c05b>] add_lock_to_list+0x65/0x89
   [<c013e544>] __lock_acquire+0xa12/0xb94
   [<c013e72e>] lock_acquire+0x68/0x82
   [<c0312a40>] __spin_lock_irqsave+0x3e/0x4e
   [<c0138c4b>] clocksource_get_next+0xd/0x43
   [<c049170b>] timekeeping_init+0x35/0x143
   [<c04855be>] start_kernel+0x1c8/0x42a
   [<ffffffff>] 0xffffffff

 -> (logbuf_lock){....} ops: 1544 {
    initial-use  at:
                          [<c013d124>] mark_lock+0x6b/0x40b
                          [<c013dfb9>] __lock_acquire+0x487/0xb94
                          [<c013e72e>] lock_acquire+0x68/0x82
                          [<c0312a40>] __spin_lock_irqsave+0x3e/0x4e
                          [<c012273c>] release_console_sem+0x3c/0x1c5
                          [<c0122ed2>] vprintk+0x2cd/0x330
                          [<c0122f50>] printk+0x1b/0x1d
                          [<c0485456>] start_kernel+0x60/0x42a
                          [<ffffffff>] 0xffffffff
  }
  ... key      at: [<c046b694>] logbuf_lock+0x14/0x80
 ... acquired at:
   [<c013c05b>] add_lock_to_list+0x65/0x89
   [<c013e544>] __lock_acquire+0xa12/0xb94
   [<c013e72e>] lock_acquire+0x68/0x82
   [<c0312a40>] __spin_lock_irqsave+0x3e/0x4e
   [<c012273c>] release_console_sem+0x3c/0x1c5
   [<c0122ed2>] vprintk+0x2cd/0x330
   [<c0122f50>] printk+0x1b/0x1d
   [<c012aee1>] run_timer_softirq+0x670/0x9ad
   [<c0127689>] ksoftirqd+0x121/0x205
   [<c01344b4>] kthread+0xb5/0xe1
   [<c0103dab>] kernel_thread_helper+0x7/0x10
   [<ffffffff>] 0xffffffff


the hard-irq-unsafe lock's dependencies:
-> (console_sem.lock){--..} ops: 829 {
   initial-use  at:
                        [<c013d124>] mark_lock+0x6b/0x40b
                        [<c013dfb9>] __lock_acquire+0x487/0xb94
                        [<c013e72e>] lock_acquire+0x68/0x82
                        [<c0312a40>] __spin_lock_irqsave+0x3e/0x4e
                        [<c0311981>] rt_mutex_slowunlock+0xc/0x5b
                        [<c03118e4>] rt_mutex_unlock+0x8/0xa
                        [<c014402c>] rt_up+0x25/0x45
                        [<c0122870>] release_console_sem+0x170/0x1c5
                        [<c0122ed2>] vprintk+0x2cd/0x330
                        [<c0122f50>] printk+0x1b/0x1d
                        [<c0485456>] start_kernel+0x60/0x42a
                        [<ffffffff>] 0xffffffff
   softirq-on-W at:
                        [<c013d124>] mark_lock+0x6b/0x40b
                        [<c013d50e>] mark_held_locks+0x4a/0x67
                        [<c013d709>] trace_hardirqs_on+0x125/0x150
                        [<c0312e55>] __spin_unlock_irqrestore+0x40/0x59
                        [<c01431f4>] task_blocks_on_rt_mutex+0x1c4/0x20a
                        [<c0311cd0>] rt_mutex_slowlock+0x140/0x234
                        [<c03119fd>] rt_mutex_lock+0x2d/0x31
                        [<c014441a>] rt_down+0x11/0x28
                        [<c012290f>] acquire_console_sem+0x36/0x4c
                        [<c0209c10>] fb_flashcursor+0x1a/0x24d
                        [<c013177a>] run_workqueue+0x8b/0xd8
                        [<c0132309>] worker_thread+0xf8/0x124
                        [<c01344b4>] kthread+0xb5/0xe1
                        [<c0103dab>] kernel_thread_helper+0x7/0x10
                        [<ffffffff>] 0xffffffff
   hardirq-on-W at:
                        [<c013d124>] mark_lock+0x6b/0x40b
                        [<c013d50e>] mark_held_locks+0x4a/0x67
                        [<c013d6f1>] trace_hardirqs_on+0x10d/0x150
                        [<c0312e55>] __spin_unlock_irqrestore+0x40/0x59
                        [<c01431f4>] task_blocks_on_rt_mutex+0x1c4/0x20a
                        [<c0311cd0>] rt_mutex_slowlock+0x140/0x234
                        [<c03119fd>] rt_mutex_lock+0x2d/0x31
                        [<c014441a>] rt_down+0x11/0x28
                        [<c012290f>] acquire_console_sem+0x36/0x4c
                        [<c0209c10>] fb_flashcursor+0x1a/0x24d
                        [<c013177a>] run_workqueue+0x8b/0xd8
                        [<c0132309>] worker_thread+0xf8/0x124
                        [<c01344b4>] kthread+0xb5/0xe1
                        [<c0103dab>] kernel_thread_helper+0x7/0x10
                        [<ffffffff>] 0xffffffff
 }
 ... key      at: [<c043c318>] console_sem+0x18/0x60
 -> ((raw_spinlock_t *)(&p->pi_lock)){....} ops: 706 {
    initial-use  at:
                          [<c013d124>] mark_lock+0x6b/0x40b
                          [<c013dfb9>] __lock_acquire+0x487/0xb94
                          [<c013e72e>] lock_acquire+0x68/0x82
                          [<c0312a40>] __spin_lock_irqsave+0x3e/0x4e
                          [<c011c7a5>] sched_setscheduler+0x13f/0x22e
                          [<c0135150>] posix_cpu_thread_call+0x88/0xff
                          [<c0491d70>] posix_cpu_thread_init+0x1c/0x3c
                          [<c01003fa>] init+0x4d/0x3c3
                          [<c0103dab>] kernel_thread_helper+0x7/0x10
                          [<ffffffff>] 0xffffffff
  }
  ... key      at: [<c04cc06c>] __key.24574+0x0/0x8
  -> (&rq->rq_lock_key){+...} ops: 29636 {
     initial-use  at:
                            [<c013d124>] mark_lock+0x6b/0x40b
                            [<c013dfb9>] __lock_acquire+0x487/0xb94
                            [<c013e72e>] lock_acquire+0x68/0x82
                            [<c0312a40>] __spin_lock_irqsave+0x3e/0x4e
                            [<c011be68>] init_idle+0x63/0x81
                            [<c0490c3e>] sched_init+0x1a9/0x1b0
                            [<c0485516>] start_kernel+0x120/0x42a
                            [<ffffffff>] 0xffffffff
     in-hardirq-W at:
                            [<c013d124>] mark_lock+0x6b/0x40b
                            [<c013dee5>] __lock_acquire+0x3b3/0xb94
                            [<c013e72e>] lock_acquire+0x68/0x82
                            [<c03127d3>] __spin_lock+0x35/0x42
                            [<c011b21f>] task_running_tick+0x2a/0x23d
                            [<c011e849>] scheduler_tick+0x92/0xee
                            [<c012b88a>] update_process_times+0x3e/0x63
                            [<c013a6a5>] tick_periodic+0x66/0x68
                            [<c013a6ba>] tick_handle_periodic+0x13/0x45
                            [<c010684f>] timer_interrupt+0x31/0x38
                            [<c0155912>] handle_IRQ_event+0x63/0xfc
                            [<c0157267>] handle_level_irq+0xa7/0xf0
                            [<c0105dc1>] do_IRQ+0xa3/0xce
                            [<c0103ac6>] common_interrupt+0x2e/0x34
                            [<c013e740>] lock_acquire+0x7a/0x82
                            [<c0312430>] rt_read_lock+0x2b/0x69
                            [<c0120925>] copy_process+0x6cc/0x136b
                            [<c0121e43>] fork_idle+0x3f/0x58
                            [<c0112023>] do_boot_cpu+0x3c/0x547
                            [<c048c4a0>] smp_prepare_cpus+0x477/0x5eb
                            [<c01003eb>] init+0x3e/0x3c3
                            [<c0103dab>] kernel_thread_helper+0x7/0x10
                            [<ffffffff>] 0xffffffff
   }
   ... key      at: [<c60686cc>] 0xc60686cc
   -> (&rq->rq_lock_key#2){+...} ops: 30044 {
      initial-use  at:
                              [<c013d124>] mark_lock+0x6b/0x40b
                              [<c013dfb9>] __lock_acquire+0x487/0xb94
                              [<c013e72e>] lock_acquire+0x68/0x82
                              [<c0312a40>] __spin_lock_irqsave+0x3e/0x4e
                              [<c011be68>] init_idle+0x63/0x81
                              [<c0121e53>] fork_idle+0x4f/0x58
                              [<c0112023>] do_boot_cpu+0x3c/0x547
                              [<c048c4a0>] smp_prepare_cpus+0x477/0x5eb
                              [<c01003eb>] init+0x3e/0x3c3
                              [<c0103dab>] kernel_thread_helper+0x7/0x10
                              [<ffffffff>] 0xffffffff
      in-hardirq-W at:
                              [<c013d124>] mark_lock+0x6b/0x40b
                              [<c013dee5>] __lock_acquire+0x3b3/0xb94
                              [<c013e72e>] lock_acquire+0x68/0x82
                              [<c03127d3>] __spin_lock+0x35/0x42
                              [<c011b6be>] task_rq_lock+0x36/0x5d
                              [<c011ca30>] try_to_wake_up+0x29/0x3cf
                              [<c011ce79>] wake_up_process+0x19/0x1b
                              [<c0126af7>] wakeup_softirqd+0x30/0x34
                              [<c01277c6>] raise_softirq+0x59/0x77
                              [<c012b50e>] run_local_timers+0xd/0x14
                              [<c012b88f>] update_process_times+0x43/0x63
                              [<c013a6a5>] tick_periodic+0x66/0x68
                              [<c013a6ba>] tick_handle_periodic+0x13/0x45
                              [<c0113e30>] smp_apic_timer_interrupt+0xa6/0xb8
                              [<c0103ba7>] apic_timer_interrupt+0x33/0x38
                              [<c0101b16>] default_idle+0x49/0x62
                              [<c01013ec>] cpu_idle+0xd4/0x11e
                              [<c0112d05>] start_secondary+0x35a/0x362
                              [<ffffffff>] 0xffffffff
    }
    ... key      at: [<c60e86cc>] 0xc60e86cc
   ... acquired at:
   [<c013c05b>] add_lock_to_list+0x65/0x89
   [<c013e544>] __lock_acquire+0xa12/0xb94
   [<c013e72e>] lock_acquire+0x68/0x82
   [<c03127d3>] __spin_lock+0x35/0x42
   [<c011b029>] double_rq_lock+0x33/0x37
   [<c011b8ab>] __migrate_task+0x58/0x131
   [<c011eb9f>] migration_thread+0x196/0x1e5
   [<c01344b4>] kthread+0xb5/0xe1
   [<c0103dab>] kernel_thread_helper+0x7/0x10
   [<ffffffff>] 0xffffffff

  ... acquired at:
   [<c013c05b>] add_lock_to_list+0x65/0x89
   [<c013e544>] __lock_acquire+0xa12/0xb94
   [<c013e72e>] lock_acquire+0x68/0x82
   [<c03127d3>] __spin_lock+0x35/0x42
   [<c011c7c3>] sched_setscheduler+0x15d/0x22e
   [<c0135150>] posix_cpu_thread_call+0x88/0xff
   [<c0491d70>] posix_cpu_thread_init+0x1c/0x3c
   [<c01003fa>] init+0x4d/0x3c3
   [<c0103dab>] kernel_thread_helper+0x7/0x10
   [<ffffffff>] 0xffffffff

  -> (&rq->rq_lock_key#2){+...} ops: 30044 {
     initial-use  at:
                            [<c013d124>] mark_lock+0x6b/0x40b
                            [<c013dfb9>] __lock_acquire+0x487/0xb94
                            [<c013e72e>] lock_acquire+0x68/0x82
                            [<c0312a40>] __spin_lock_irqsave+0x3e/0x4e
                            [<c011be68>] init_idle+0x63/0x81
                            [<c0121e53>] fork_idle+0x4f/0x58
                            [<c0112023>] do_boot_cpu+0x3c/0x547
                            [<c048c4a0>] smp_prepare_cpus+0x477/0x5eb
                            [<c01003eb>] init+0x3e/0x3c3
                            [<c0103dab>] kernel_thread_helper+0x7/0x10
                            [<ffffffff>] 0xffffffff
     in-hardirq-W at:
                            [<c013d124>] mark_lock+0x6b/0x40b
                            [<c013dee5>] __lock_acquire+0x3b3/0xb94
                            [<c013e72e>] lock_acquire+0x68/0x82
                            [<c03127d3>] __spin_lock+0x35/0x42
                            [<c011b6be>] task_rq_lock+0x36/0x5d
                            [<c011ca30>] try_to_wake_up+0x29/0x3cf
                            [<c011ce79>] wake_up_process+0x19/0x1b
                            [<c0126af7>] wakeup_softirqd+0x30/0x34
                            [<c01277c6>] raise_softirq+0x59/0x77
                            [<c012b50e>] run_local_timers+0xd/0x14
                            [<c012b88f>] update_process_times+0x43/0x63
                            [<c013a6a5>] tick_periodic+0x66/0x68
                            [<c013a6ba>] tick_handle_periodic+0x13/0x45
                            [<c0113e30>] smp_apic_timer_interrupt+0xa6/0xb8
                            [<c0103ba7>] apic_timer_interrupt+0x33/0x38
                            [<c0101b16>] default_idle+0x49/0x62
                            [<c01013ec>] cpu_idle+0xd4/0x11e
                            [<c0112d05>] start_secondary+0x35a/0x362
                            [<ffffffff>] 0xffffffff
   }
   ... key      at: [<c60e86cc>] 0xc60e86cc
  ... acquired at:
   [<c013c05b>] add_lock_to_list+0x65/0x89
   [<c013e544>] __lock_acquire+0xa12/0xb94
   [<c013e72e>] lock_acquire+0x68/0x82
   [<c03127d3>] __spin_lock+0x35/0x42
   [<c011c7c3>] sched_setscheduler+0x15d/0x22e
   [<c0135150>] posix_cpu_thread_call+0x88/0xff
   [<c012ec53>] notifier_call_chain+0x20/0x31
   [<c012ec80>] raw_notifier_call_chain+0x8/0xa
   [<c0144569>] _cpu_up+0x3d/0xbf
   [<c0144611>] cpu_up+0x26/0x38
   [<c010043e>] init+0x91/0x3c3
   [<c0103dab>] kernel_thread_helper+0x7/0x10
   [<ffffffff>] 0xffffffff

 ... acquired at:
   [<c013c05b>] add_lock_to_list+0x65/0x89
   [<c013e544>] __lock_acquire+0xa12/0xb94
   [<c013e72e>] lock_acquire+0x68/0x82
   [<c03127d3>] __spin_lock+0x35/0x42
   [<c0143055>] task_blocks_on_rt_mutex+0x25/0x20a
   [<c0311cd0>] rt_mutex_slowlock+0x140/0x234
   [<c03119fd>] rt_mutex_lock+0x2d/0x31
   [<c014441a>] rt_down+0x11/0x28
   [<c012290f>] acquire_console_sem+0x36/0x4c
   [<c0209c10>] fb_flashcursor+0x1a/0x24d
   [<c013177a>] run_workqueue+0x8b/0xd8
   [<c0132309>] worker_thread+0xf8/0x124
   [<c01344b4>] kthread+0xb5/0xe1
   [<c0103dab>] kernel_thread_helper+0x7/0x10
   [<ffffffff>] 0xffffffff

 -> (&rq->rq_lock_key#2){+...} ops: 30044 {
    initial-use  at:
                          [<c013d124>] mark_lock+0x6b/0x40b
                          [<c013dfb9>] __lock_acquire+0x487/0xb94
                          [<c013e72e>] lock_acquire+0x68/0x82
                          [<c0312a40>] __spin_lock_irqsave+0x3e/0x4e
                          [<c011be68>] init_idle+0x63/0x81
                          [<c0121e53>] fork_idle+0x4f/0x58
                          [<c0112023>] do_boot_cpu+0x3c/0x547
                          [<c048c4a0>] smp_prepare_cpus+0x477/0x5eb
                          [<c01003eb>] init+0x3e/0x3c3
                          [<c0103dab>] kernel_thread_helper+0x7/0x10
                          [<ffffffff>] 0xffffffff
    in-hardirq-W at:
                          [<c013d124>] mark_lock+0x6b/0x40b
                          [<c013dee5>] __lock_acquire+0x3b3/0xb94
                          [<c013e72e>] lock_acquire+0x68/0x82
                          [<c03127d3>] __spin_lock+0x35/0x42
                          [<c011b6be>] task_rq_lock+0x36/0x5d
                          [<c011ca30>] try_to_wake_up+0x29/0x3cf
                          [<c011ce79>] wake_up_process+0x19/0x1b
                          [<c0126af7>] wakeup_softirqd+0x30/0x34
                          [<c01277c6>] raise_softirq+0x59/0x77
                          [<c012b50e>] run_local_timers+0xd/0x14
                          [<c012b88f>] update_process_times+0x43/0x63
                          [<c013a6a5>] tick_periodic+0x66/0x68
                          [<c013a6ba>] tick_handle_periodic+0x13/0x45
                          [<c0113e30>] smp_apic_timer_interrupt+0xa6/0xb8
                          [<c0103ba7>] apic_timer_interrupt+0x33/0x38
                          [<c0101b16>] default_idle+0x49/0x62
                          [<c01013ec>] cpu_idle+0xd4/0x11e
                          [<c0112d05>] start_secondary+0x35a/0x362
                          [<ffffffff>] 0xffffffff
  }
  ... key      at: [<c60e86cc>] 0xc60e86cc
 ... acquired at:
   [<c013c05b>] add_lock_to_list+0x65/0x89
   [<c013e544>] __lock_acquire+0xa12/0xb94
   [<c013e72e>] lock_acquire+0x68/0x82
   [<c03127d3>] __spin_lock+0x35/0x42
   [<c011b6be>] task_rq_lock+0x36/0x5d
   [<c011ca30>] try_to_wake_up+0x29/0x3cf
   [<c011ce79>] wake_up_process+0x19/0x1b
   [<c014281e>] wakeup_next_waiter+0x1d9/0x1e1
   [<c03119b8>] rt_mutex_slowunlock+0x43/0x5b
   [<c03118e4>] rt_mutex_unlock+0x8/0xa
   [<c014402c>] rt_up+0x25/0x45
   [<c0122870>] release_console_sem+0x170/0x1c5
   [<c0122ed2>] vprintk+0x2cd/0x330
   [<c0122f50>] printk+0x1b/0x1d
   [<c0288c89>] usb_register_driver+0xa3/0xeb
   [<c049c440>] usb_usual_init+0xf/0x29
   [<c01004df>] init+0x132/0x3c3
   [<c0103dab>] kernel_thread_helper+0x7/0x10
   [<ffffffff>] 0xffffffff


stack backtrace:
 [<c01041a3>] dump_trace+0x63/0x1eb
 [<c0104348>] show_trace_log_lvl+0x1d/0x3a
 [<c0104a23>] show_trace+0x12/0x14
 [<c0104ab6>] dump_stack+0x16/0x18
 [<c013da8f>] check_usage+0x241/0x24b
 [<c013e451>] __lock_acquire+0x91f/0xb94
 [<c013e72e>] lock_acquire+0x68/0x82
 [<c0312a40>] __spin_lock_irqsave+0x3e/0x4e
 [<c0311981>] rt_mutex_slowunlock+0xc/0x5b
 [<c03118e4>] rt_mutex_unlock+0x8/0xa
 [<c014402c>] rt_up+0x25/0x45
 [<c0122870>] release_console_sem+0x170/0x1c5
 [<c0122ed2>] vprintk+0x2cd/0x330
 [<c0122f50>] printk+0x1b/0x1d
 [<c012aee1>] run_timer_softirq+0x670/0x9ad
 [<c0127689>] ksoftirqd+0x121/0x205
 [<c01344b4>] kthread+0xb5/0xe1
 [<c0103dab>] kernel_thread_helper+0x7/0x10
 =======================
---------------------------
| preempt count: 00000003 ]
| 3-level deep critical section nesting:
----------------------------------------
.. [<c03127b1>] .... __spin_lock+0x13/0x42
.....[<c012a8b8>] ..   ( <= run_timer_softirq+0x47/0x9ad)
.. [<c0144017>] .... rt_up+0x10/0x45
.....[<c0122870>] ..   ( <= release_console_sem+0x170/0x1c5)
.. [<c0312a1e>] .... __spin_lock_irqsave+0x1c/0x4e
.....[<c0311981>] ..   ( <= rt_mutex_slowunlock+0xc/0x5b)

0xc03127b1 is in __spin_lock (kernel/spinlock.c:218).
213     EXPORT_SYMBOL(__write_lock_bh);
214
215     void __lockfunc __spin_lock(raw_spinlock_t *lock)
216     {
217             preempt_disable();
218             spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
219             _raw_spin_lock(lock);
220     }
221
222     EXPORT_SYMBOL(__spin_lock);

0xc012a8b8 is in run_timer_softirq (include/linux/seqlock.h:148).
143     }
144
145     static __always_inline void __write_seqlock_raw(raw_seqlock_t *sl)
146     {
147             spin_lock(&sl->lock);
148             ++sl->sequence;
149             smp_wmb();
150     }
151
152     static __always_inline void __write_sequnlock_raw(raw_seqlock_t *sl)


0xc0144017 is in rt_up (include/asm/atomic.h:189).
184             if(unlikely(boot_cpu_data.x86==3))
185                     goto no_xadd;
186     #endif
187             /* Modern 486+ processor */
188             __i = i;
189             __asm__ __volatile__(
190                     LOCK_PREFIX "xaddl %0, %1"
191                     :"+r" (i), "+m" (v->counter)
192                     : : "memory");
193             return i + __i;

0xc0122870 is in release_console_sem (kernel/printk.c:864).
859              * up only if we are in a preemptible section. We normally dont
860              * printk from non-preemptible sections so this is for the emergency
861              * case only.
862              */
863     #ifdef CONFIG_PREEMPT_RT
864             if (!in_atomic() && !irqs_disabled())
865     #endif
866             if (wake_klogd && !oops_in_progress && waitqueue_active(&log_wait))
867                     wake_up_interruptible(&log_wait);
868     }

0xc0312a1e is in __spin_lock_irqsave (kernel/spinlock.c:122).
117     {
118             unsigned long flags;
119
120             local_irq_save(flags);
121             preempt_disable();
122             spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
123             /*
124              * On lockdep we dont want the hand-coded irq-enable of
125              * _raw_spin_lock_flags() code, because lockdep assumes
126              * that interrupts are not re-enabled during lock-acquire:


0xc0311981 is in rt_mutex_slowunlock (kernel/rtmutex.c:1053).
1048    static void __sched
1049    rt_mutex_slowunlock(struct rt_mutex *lock)
1050    {
1051            unsigned long flags;
1052
1053            spin_lock_irqsave(&lock->wait_lock, flags);
1054
1055            debug_rt_mutex_unlock(lock);
1056
1057            rt_mutex_deadlock_account_unlock(current);

http://www.stardust.webpages.pl/files/tbf/euridica/2.6.20-rt2/rt-config
http://www.stardust.webpages.pl/files/tbf/euridica/2.6.20-rt2/rt-dmesg

Regards,
Michal

-- 
Michal K. K. Piotrowski
LTG - Linux Testers Group
(http://www.stardust.webpages.pl/ltg/)

^ permalink raw reply	[flat|nested] 54+ messages in thread

* USX2Y 2.6.20-rt2 Oops on disconnect
  2007-02-05 14:25 ` Karsten Wiese
@ 2007-02-05 21:46   ` Rui Nuno Capela
  2007-02-05 22:27     ` Karsten Wiese
  2007-02-10  1:29   ` us428control 0.4.5 [RFC] Rui Nuno Capela
  1 sibling, 1 reply; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-05 21:46 UTC (permalink / raw)
  To: Karsten Wiese, Karsten Wiese; +Cc: alsa-devel

Hi Karsten,

I'm having this kernel oops right on disconnecting my US-224. Probably it
has been creeping around before, but only now I had the opportunity to
report.

...
ALSA sound/usb/usx2y/usx2yhwdeppcm.c:76: activ frame status -62. Most
propably some hardware problem.
usb 2-1: USB disconnect, address 5
BUG: unable to handle kernel paging request at virtual address 00070033
 printing eip:
e06ccc6f
*pde = 00000000
stopped custom tracer.
Oops: 0000 [#1]
PREEMPT
Modules linked in: snd_rtctimer snd_seq_midi snd_seq_midi_event
snd_seq_dummy snd_pcm_oss snd_mixer_oss snd_seq snd_usb_usx2y snd_usb_lib
snd_rawmidi snd_seq_device snd_hwdep snd_ali5451 snd_ac97_codec snd_pcm
snd_timer snd appletalk ax25 ipx p8023 arc4 ecb blkcipher
ieee80211_crypt_wep af_packet ipv6 button battery ac loop dm_mod hostap_cs
hostap ieee80211_crypt pcmcia firmware_class i2c_ali1535 ohci1394 ieee1394
ohci_hcd parport_pc ide_cd cdrom parport usbcore i2c_ali15x3 shpchp
yenta_socket ati_agp i2c_core agpgart rsrc_nonstatic pci_hotplug
pcmcia_core ac97_bus natsemi soundcore snd_page_alloc ext3 mbcache jbd edd
fan alim15x3 thermal processor ide_disk ide_core
CPU:    0
EIP:    0060:[<e06ccc6f>]    Not tainted VLI
EFLAGS: 00210202   (2.6.20-rt2.0 #1)
EIP is at snd_info_free_entry+0xa/0x47 [snd]
eax: 00070007   ebx: 00070007   ecx: c040be90   edx: c4d44d30
esi: dc63dc00   edi: dc63ddac   ebp: d4399e78   esp: d4399e74
ds: 007b   es: 007b   ss: 0068   preempt: 00000001
Process jackd (pid: 5167, ti=d4399000 task=c4d44d30 task.ti=d4399000)
Stack: dc63dc00 d4399e90 e06cb6f9 00000000 c4ded3e0 dc63dc00 c4ded3e0
d4399eb8
       e06cb7cf 00000000 d4399eb8 c0116dcf 00000001 d3eec480 d31b4f18
d31b4e00
       d5d29c00 d4399ee4 e06f8f89 00000000 df7659c0 d321e8bc d4399ee0
d3eec480
Call Trace:
 [<e06cb6f9>] snd_card_do_free+0xb4/0xea [snd]
 [<e06cb7cf>] snd_card_file_remove+0xa0/0x10f [snd]
 [<e06f8f89>] snd_pcm_release+0xbb/0xc5 [snd_pcm]
 [<e06cbd6e>] snd_disconnect_release+0x70/0x78 [snd]
 [<c01617f0>] __fput+0xa4/0x163
 [<c01618c5>] fput+0x16/0x18
 [<c015f025>] filp_close+0x54/0x5c
 [<c011b00b>] put_files_struct+0x66/0xa8
 [<c011c0c4>] do_exit+0x20e/0x75a
 [<c011c6a0>] complete_and_exit+0x0/0x16
 [<c0103e04>] syscall_call+0x7/0xb
 [<b7f39199>] 0xb7f39199
 =======================
Code: 85 28 00 00 e8 04 89 a3 df eb 0f 8b 53 2c e8 65 ff ff ff c7 43 2c 00
00 00 00 83 c4 10 5b 5e 5d c3 55 85 c0 89 e5 53 89 c3 74 3a <83> 78 2c 00
74 1b b8 40 89 6d e0 e8 18 bb bd df 89 d8 e8 4b ff
EIP: [<e06ccc6f>] snd_info_free_entry+0xa/0x47 [snd] SS:ESP 0068:d4399e74
 <1>Fixing recursive fault but reboot is needed!
Bad page state in process 'beagled-helper'
page:c123fe40 flags:0x40000000 mapping:00000000 mapcount:0 count:-1
Trying to fix it up, but a reboot is needed
Backtrace:
 [<c0104d68>] dump_trace+0x63/0x1e5
 [<c0104f04>] show_trace_log_lvl+0x1a/0x2f
 [<c01054d4>] show_trace+0x12/0x14
 [<c0105567>] dump_stack+0x16/0x18
 [<c0149262>] bad_page+0x61/0x8e
 [<c0149ab0>] get_page_from_freelist+0x1d6/0x2a7
 [<c0149bce>] __alloc_pages+0x4d/0x274
 [<c0146e18>] generic_file_buffered_write+0x154/0x520
 [<c014764f>] __generic_file_aio_write_nolock+0x46b/0x4d8
 [<c0147712>] generic_file_aio_write+0x56/0xb4
 [<e085e157>] ext3_file_write+0x27/0x96 [ext3]
 [<c016046e>] do_sync_write+0xc2/0xff
 [<c0160cad>] vfs_write+0xaf/0x163
 [<c016122d>] sys_write+0x3d/0x61
 [<c0103d90>] sysenter_past_esp+0x5d/0x81
 [<ffffe410>] _einittext+0x3fc3c386/0xffee9993
 =======================

Cheers,
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
                   ` (4 preceding siblings ...)
  2007-02-05 15:17 ` v2.6.20-rt1, yum/rpm Parag Warudkar
@ 2007-02-05 21:50 ` Michal Piotrowski
  2007-02-06  0:11 ` Michal Piotrowski
                   ` (7 subsequent siblings)
  13 siblings, 0 replies; 54+ messages in thread
From: Michal Piotrowski @ 2007-02-05 21:50 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

Ingo Molnar napisał(a):
> i have released the v2.6.20-rt1 kernel, which can be downloaded from the 
> usual place:
> 
>   http://redhat.com/~mingo/realtime-preempt/
> 
> more info about the -rt patchset can be found in the RT wiki:

2.6.20-rt2

echo shutdown > /sys/power/disk; echo disk > /sys/power/state

Disabling non-boot CPUs ...
CPU1 playing dead
 [<c01041a3>] dump_trace+0x63/0x1eb
 [<c0104348>] show_trace_log_lvl+0x1d/0x3a
 [<c0104a23>] show_trace+0x12/0x14
 [<c0104ab6>] dump_stack+0x16/0x18
 [<c01013a5>] cpu_idle+0x8d/0x11e
 [<c0112d05>] start_secondary+0x35a/0x362
 =======================
---------------------------
| preempt count: 00000001 ]
| 1-level deep critical section nesting:
----------------------------------------
.. [<c010142b>] .... cpu_idle+0x113/0x11e
.....[<c0112d05>] ..   ( <= start_secondary+0x35a/0x362)

0xc010142b is in cpu_idle (arch/i386/kernel/process.c:204).
199                     tick_nohz_restart_sched_tick();
200                     local_irq_disable();
201                     __preempt_enable_no_resched();
202                     __schedule();
203                     preempt_disable();
204                     local_irq_enable();
205             }
206     }
207
208     void cpu_idle_wait(void)

0xc0112d05 is in start_secondary (arch/i386/kernel/smpboot.c:432).
427             /* We can take interrupts now: we're officially "up". */
428             local_irq_enable();
429
430             wmb();
431             cpu_idle();
432     }
433
434     /*
435      * Everything has been set up for the secondary
436      * CPUs - they just need to reload everything


lapic suspend on CPU#0
 [<c01041a3>] dump_trace+0x63/0x1eb
 [<c0104348>] show_trace_log_lvl+0x1d/0x3a
 [<c0104a23>] show_trace+0x12/0x14
 [<c0104ab6>] dump_stack+0x16/0x18
 [<c0113ac8>] lapic_suspend+0xd8/0x101
 [<c02543c0>] sysdev_suspend+0x8d/0x1ee
 [<c0258117>] device_power_down+0x119/0x152
 [<c014ab42>] swsusp_suspend+0x17/0x67
 [<c014b2a1>] pm_suspend_disk+0x9a/0x161
 [<c014a169>] enter_state+0x52/0x1bb
 [<c014a358>] state_store+0x86/0x9c
 [<c01abed4>] subsys_attr_store+0x20/0x25
 [<c01ac176>] sysfs_write_file+0xa1/0xc2
 [<c0177962>] vfs_write+0xaf/0x163
 [<c0177fda>] sys_write+0x40/0x67
 [<c01030e0>] syscall_call+0x7/0xb
 [<b7f74410>] 0xb7f74410
 =======================
---------------------------
| preempt count: 00000000 ]
| 0-level deep critical section nesting:
----------------------------------------

swsusp: critical section:
swsusp: Need to copy 122686 pages
swsusp: Normal pages needed: 36485 + 1024 + 40, available pages: 192889
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#0.
CPU0: Intel P4/Xeon Extended MCE MSRs (12) available
CPU0: Thermal monitoring enabled
lapic resume on CPU#0
 [<c01041a3>] dump_trace+0x63/0x1eb
 [<c0104348>] show_trace_log_lvl+0x1d/0x3a
 [<c0104a23>] show_trace+0x12/0x14
 [<c0104ab6>] dump_stack+0x16/0x18
 [<c0113b22>] lapic_resume+0x31/0x1c3
 [<c025404e>] __sysdev_resume+0x14/0x57
 [<c025453a>] sysdev_resume+0x19/0x54
 [<c02585a7>] device_power_up+0x8/0xf
 [<c014ab85>] swsusp_suspend+0x5a/0x67
 [<c014b2a1>] pm_suspend_disk+0x9a/0x161
 [<c014a169>] enter_state+0x52/0x1bb
 [<c014a358>] state_store+0x86/0x9c
 [<c01abed4>] subsys_attr_store+0x20/0x25
 [<c01ac176>] sysfs_write_file+0xa1/0xc2
 [<c0177962>] vfs_write+0xaf/0x163
 [<c0177fda>] sys_write+0x40/0x67
 [<c01030e0>] syscall_call+0x7/0xb
 [<b7f74410>] 0xb7f74410
 =======================
---------------------------
| preempt count: 00000000 ]
| 0-level deep critical section nesting:
----------------------------------------

http://www.stardust.webpages.pl/files/tbf/euridica/2.6.20-rt2/rt-dmesg2
http://www.stardust.webpages.pl/files/tbf/euridica/2.6.20-rt2/rt-config

Regards,
Michal

-- 
Michal K. K. Piotrowski
LTG - Linux Testers Group
(http://www.stardust.webpages.pl/ltg/)

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: USX2Y 2.6.20-rt2 Oops on disconnect
  2007-02-05 21:46   ` USX2Y 2.6.20-rt2 Oops on disconnect Rui Nuno Capela
@ 2007-02-05 22:27     ` Karsten Wiese
  2007-02-06 11:53       ` Takashi Iwai
  2007-02-07  0:54       ` USX2Y 2.6.20-rt2 Oops on disconnect [SOLVED] Rui Nuno Capela
  0 siblings, 2 replies; 54+ messages in thread
From: Karsten Wiese @ 2007-02-05 22:27 UTC (permalink / raw)
  To: Rui Nuno Capela; +Cc: alsa-devel

[-- Attachment #1: Type: text/plain, Size: 3914 bytes --]

Am Montag, 5. Februar 2007 22:46 schrieb Rui Nuno Capela:
> Hi Karsten,
> 
> I'm having this kernel oops right on disconnecting my US-224. Probably it
> has been creeping around before, but only now I had the opportunity to
> report.
> 
> ...
> ALSA sound/usb/usx2y/usx2yhwdeppcm.c:76: activ frame status -62. Most
> propably some hardware problem.
> usb 2-1: USB disconnect, address 5
> BUG: unable to handle kernel paging request at virtual address 00070033
>  printing eip:
> e06ccc6f
> *pde = 00000000
> stopped custom tracer.
> Oops: 0000 [#1]
> PREEMPT
> Modules linked in: snd_rtctimer snd_seq_midi snd_seq_midi_event
> snd_seq_dummy snd_pcm_oss snd_mixer_oss snd_seq snd_usb_usx2y snd_usb_lib
> snd_rawmidi snd_seq_device snd_hwdep snd_ali5451 snd_ac97_codec snd_pcm
> snd_timer snd appletalk ax25 ipx p8023 arc4 ecb blkcipher
> ieee80211_crypt_wep af_packet ipv6 button battery ac loop dm_mod hostap_cs
> hostap ieee80211_crypt pcmcia firmware_class i2c_ali1535 ohci1394 ieee1394
> ohci_hcd parport_pc ide_cd cdrom parport usbcore i2c_ali15x3 shpchp
> yenta_socket ati_agp i2c_core agpgart rsrc_nonstatic pci_hotplug
> pcmcia_core ac97_bus natsemi soundcore snd_page_alloc ext3 mbcache jbd edd
> fan alim15x3 thermal processor ide_disk ide_core
> CPU:    0
> EIP:    0060:[<e06ccc6f>]    Not tainted VLI
> EFLAGS: 00210202   (2.6.20-rt2.0 #1)
> EIP is at snd_info_free_entry+0xa/0x47 [snd]
> eax: 00070007   ebx: 00070007   ecx: c040be90   edx: c4d44d30
> esi: dc63dc00   edi: dc63ddac   ebp: d4399e78   esp: d4399e74
> ds: 007b   es: 007b   ss: 0068   preempt: 00000001
> Process jackd (pid: 5167, ti=d4399000 task=c4d44d30 task.ti=d4399000)
> Stack: dc63dc00 d4399e90 e06cb6f9 00000000 c4ded3e0 dc63dc00 c4ded3e0
> d4399eb8
>        e06cb7cf 00000000 d4399eb8 c0116dcf 00000001 d3eec480 d31b4f18
> d31b4e00
>        d5d29c00 d4399ee4 e06f8f89 00000000 df7659c0 d321e8bc d4399ee0
> d3eec480
> Call Trace:
>  [<e06cb6f9>] snd_card_do_free+0xb4/0xea [snd]
>  [<e06cb7cf>] snd_card_file_remove+0xa0/0x10f [snd]
>  [<e06f8f89>] snd_pcm_release+0xbb/0xc5 [snd_pcm]
>  [<e06cbd6e>] snd_disconnect_release+0x70/0x78 [snd]
>  [<c01617f0>] __fput+0xa4/0x163
>  [<c01618c5>] fput+0x16/0x18
>  [<c015f025>] filp_close+0x54/0x5c
>  [<c011b00b>] put_files_struct+0x66/0xa8
>  [<c011c0c4>] do_exit+0x20e/0x75a
>  [<c011c6a0>] complete_and_exit+0x0/0x16
>  [<c0103e04>] syscall_call+0x7/0xb
>  [<b7f39199>] 0xb7f39199
>  =======================
> Code: 85 28 00 00 e8 04 89 a3 df eb 0f 8b 53 2c e8 65 ff ff ff c7 43 2c 00
> 00 00 00 83 c4 10 5b 5e 5d c3 55 85 c0 89 e5 53 89 c3 74 3a <83> 78 2c 00
> 74 1b b8 40 89 6d e0 e8 18 bb bd df 89 d8 e8 4b ff
> EIP: [<e06ccc6f>] snd_info_free_entry+0xa/0x47 [snd] SS:ESP 0068:d4399e74
>  <1>Fixing recursive fault but reboot is needed!
> Bad page state in process 'beagled-helper'
> page:c123fe40 flags:0x40000000 mapping:00000000 mapcount:0 count:-1
> Trying to fix it up, but a reboot is needed
> Backtrace:
>  [<c0104d68>] dump_trace+0x63/0x1e5
>  [<c0104f04>] show_trace_log_lvl+0x1a/0x2f
>  [<c01054d4>] show_trace+0x12/0x14
>  [<c0105567>] dump_stack+0x16/0x18
>  [<c0149262>] bad_page+0x61/0x8e
>  [<c0149ab0>] get_page_from_freelist+0x1d6/0x2a7
>  [<c0149bce>] __alloc_pages+0x4d/0x274
>  [<c0146e18>] generic_file_buffered_write+0x154/0x520
>  [<c014764f>] __generic_file_aio_write_nolock+0x46b/0x4d8
>  [<c0147712>] generic_file_aio_write+0x56/0xb4
>  [<e085e157>] ext3_file_write+0x27/0x96 [ext3]
>  [<c016046e>] do_sync_write+0xc2/0xff
>  [<c0160cad>] vfs_write+0xaf/0x163
>  [<c016122d>] sys_write+0x3d/0x61
>  [<c0103d90>] sysenter_past_esp+0x5d/0x81
>  [<ffffe410>] _einittext+0x3fc3c386/0xffee9993
>  =======================

hm, just pulled the usb-cable off my us428 twice with nothing in dmesg.
Under jackd working.
Which is the way to reproduce this?
As a shot in the dark, please try the attached patch.
Should be correct anyhow ;-)

      Cheers, Karsten

[-- Attachment #2: snd_hwdep_release-racefix.diff --]
[-- Type: text/x-diff, Size: 1054 bytes --]

Hi Takashi,

had some oopses here running -rt kernels,
which vanished after applying this.

      Karsten
------------------------------------------------------------------- 
snd_hwdep_release() racefix


snd_card_file_remove() can free the snd_card.
Touch hw->* only before calling snd_card_file_remove().

Unrelated: Allow hwdep devices not to have own ops.release();


Signed-off-by: Karsten Wiese <fzu@wemgehoertderstaat.de>


--- /alsa-kernel/core/hwdep.c_	2007-01-30 20:32:01.000000000 +0100
+++ /alsa-kernel/core/hwdep.c	2007-01-30 20:32:01.000000000 +0100
@@ -156,15 +156,16 @@
 	int err = -ENXIO;
 	struct snd_hwdep *hw = file->private_data;
 	struct module *mod = hw->card->module;
+
 	mutex_lock(&hw->open_mutex);
-	if (hw->ops.release) {
+	if (hw->ops.release)
 		err = hw->ops.release(hw, file);
-		wake_up(&hw->open_wait);
-	}
 	if (hw->used > 0)
 		hw->used--;
-	snd_card_file_remove(hw->card, file);
 	mutex_unlock(&hw->open_mutex);
+	wake_up(&hw->open_wait);
+
+	snd_card_file_remove(hw->card, file);
 	module_put(mod);
 	return err;
 }

[-- Attachment #3: Type: text/plain, Size: 374 bytes --]

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

[-- Attachment #4: Type: text/plain, Size: 161 bytes --]

_______________________________________________
Alsa-devel mailing list
Alsa-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
                   ` (5 preceding siblings ...)
  2007-02-05 21:50 ` Michal Piotrowski
@ 2007-02-06  0:11 ` Michal Piotrowski
  2007-02-06  1:14 ` Daniel Walker
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 54+ messages in thread
From: Michal Piotrowski @ 2007-02-06  0:11 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

On 05/02/07, Ingo Molnar <mingo@elte.hu> wrote:
> i have released the v2.6.20-rt1 kernel, which can be downloaded from the
> usual place:
>
>   http://redhat.com/~mingo/realtime-preempt/
>

-rt2 vs. autotest.

Good news - It passes aiostress, linus_stress and ltp.

Bad news - it hangs a few seconds after pi_tests (I don't see any
errors in /var/log/messages)

Regards,
Michal

-- 
Michal K. K. Piotrowski
LTG - Linux Testers Group
(http://www.stardust.webpages.pl/ltg/)

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
                   ` (6 preceding siblings ...)
  2007-02-06  0:11 ` Michal Piotrowski
@ 2007-02-06  1:14 ` Daniel Walker
  2007-02-06 10:05 ` Pre-packaged version Alessio Igor Bogani
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 54+ messages in thread
From: Daniel Walker @ 2007-02-06  1:14 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users


The /proc/interrupts timer entry is dangling a little. With PREEMPT_RT
the entry doesn't get updated ..

My system after two hours uptime,

           CPU0       CPU1       
  0:         56          0   IO-APIC-edge      timer
  1:          2          0   IO-APIC-edge      i8042
  4:       1450          0   IO-APIC-edge      serial
  6:          3          0   IO-APIC-edge      floppy
  8:          0          0   IO-APIC-edge      rtc
  9:          0          0   IO-APIC-fasteoi   acpi
 12:          4          0   IO-APIC-edge      i8042
 14:     824890          0   IO-APIC-edge      ide0
 17:        182          0   IO-APIC-fasteoi   HDA Intel
 20:          0          0   IO-APIC-fasteoi   uhci_hcd:usb2
 21:          0          0   IO-APIC-fasteoi   libata, ehci_hcd:usb1, uhci_hcd:usb4
 22:          0          0   IO-APIC-fasteoi   uhci_hcd:usb3
 23:       7515          0   IO-APIC-fasteoi   uhci_hcd:usb5, eth0
NMI:          0          0 
LOC:    1749635    1749614 
ERR:          0

Daniel


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Pre-packaged version
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
                   ` (7 preceding siblings ...)
  2007-02-06  1:14 ` Daniel Walker
@ 2007-02-06 10:05 ` Alessio Igor Bogani
  2007-02-06 10:10 ` v2.6.20-rt1, yum/rpm Arjan van de Ven
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 54+ messages in thread
From: Alessio Igor Bogani @ 2007-02-06 10:05 UTC (permalink / raw)
  To: linux-rt-users

[...]
> the -rt YUM repository for Fedora Core 6 and 5, for architectures i686 
> and x86_64 can be activated via:
[...]

For Ubuntu feisty users (last section "Beta available") at:

https://wiki.ubuntu.com/RealTime

Ciao,
Alessio

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
                   ` (8 preceding siblings ...)
  2007-02-06 10:05 ` Pre-packaged version Alessio Igor Bogani
@ 2007-02-06 10:10 ` Arjan van de Ven
  2007-02-07 12:32   ` Ingo Molnar
  2007-02-06 10:30 ` Sunil Naidu
                   ` (3 subsequent siblings)
  13 siblings, 1 reply; 54+ messages in thread
From: Arjan van de Ven @ 2007-02-06 10:10 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

On Mon, 2007-02-05 at 07:56 +0100, Ingo Molnar wrote:
> i have released the v2.6.20-rt1 kernel, which can be downloaded from the 
> usual place:
> 
>   http://redhat.com/~mingo/realtime-preempt/
> 
> more info about the -rt patchset can be found in the RT wiki:
> 
>   http://rt.wiki.kernel.org
> 
> This is a fixes-only release. Since the -rt tree has been closely 
> tracking Linus' upstream kernel since -rc1, no new issues are expected - 
> please re-report if anything is still unfixed.


patch below has 2 tweaks
1) the new RCU feature wakes up once per second, make sure this is using
the new round_jiffies() infrastructure
2) the slab background reap code is waking up once per 2 seconds per
cpu. The patch makes this more dynamic; if no work was done (no activity
on the cpu happened) then this is made to be 4 seconds

Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>


Index: linux-2.6.20-rt2/kernel/rcupreempt.c
===================================================================
--- linux-2.6.20-rt2.orig/kernel/rcupreempt.c
+++ linux-2.6.20-rt2/kernel/rcupreempt.c
@@ -465,7 +465,7 @@ static int rcu_booster(void *arg)
 		 * adjust, or eliminate in case of OOM.
 		 */
 
-		schedule_timeout_interruptible(HZ);
+		schedule_timeout_interruptible(round_jiffies_relative(HZ));
 
 		/* Print stats if enough time has passed. */
 
Index: linux-2.6.20-rt2/kernel/rcutorture.c
===================================================================
--- linux-2.6.20-rt2.orig/kernel/rcutorture.c
+++ linux-2.6.20-rt2/kernel/rcutorture.c
@@ -288,7 +288,7 @@ static int rcu_torture_preempt(void *arg
 			cond_resched();
 		if (rcu_torture_completed() == completedstart)
 			rcu_torture_preempt_errors++;
-		schedule_timeout_interruptible(HZ);
+		schedule_timeout_interruptible(round_jiffies_relative(HZ));
 	} while (!kthread_should_stop());
 	return 0;
 }
@@ -660,7 +660,7 @@ rcu_torture_reader(void *arg)
 		if (p == NULL) {
 			/* Wait for rcu_torture_writer to get underway */
 			cur_ops->readunlock(idx);
-			schedule_timeout_interruptible(HZ);
+			schedule_timeout_interruptible(round_jiffies_relative(HZ));
 			continue;
 		}
 		if (p->rtort_mbtest == 0)
Index: linux-2.6.20-rt2/mm/slab.c
===================================================================
--- linux-2.6.20-rt2.orig/mm/slab.c
+++ linux-2.6.20-rt2/mm/slab.c
@@ -1062,7 +1062,7 @@ static int transfer_objects(struct array
 #ifndef CONFIG_NUMA
 
 #define drain_alien_cache(cachep, alien) do { } while (0)
-#define reap_alien(cachep, l3, this_cpu) do { } while (0)
+#define reap_alien(cachep, l3, this_cpu) 0
 
 static inline struct array_cache **alloc_alien_cache(int node, int limit)
 {
@@ -1160,7 +1160,7 @@ static void __drain_alien_cache(struct k
 /*
  * Called from cache_reap() to regularly drain alien caches round robin.
  */
-static void
+static int
 reap_alien(struct kmem_cache *cachep, struct kmem_list3 *l3, int *this_cpu)
 {
 	int node = per_cpu(reap_node, *this_cpu);
@@ -1171,8 +1171,10 @@ reap_alien(struct kmem_cache *cachep, st
 		if (ac && ac->avail && spin_trylock_irq(&ac->lock)) {
 			__drain_alien_cache(cachep, ac, node, this_cpu);
 			spin_unlock_irq(&ac->lock);
+			return 1;
 		}
 	}
+	return 0;
 }
 
 static void drain_alien_cache(struct kmem_cache *cachep,
@@ -2473,7 +2475,7 @@ static void check_spinlock_acquired_node
 #define check_spinlock_acquired_node(x, y) do { } while(0)
 #endif
 
-static void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
+static int drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
 			struct array_cache *ac,
 			int force, int node);
 
@@ -4114,15 +4116,16 @@ static int enable_cpucache(struct kmem_c
  * Drain an array if it contains any elements taking the l3 lock only if
  * necessary. Note that the l3 listlock also protects the array_cache
  * if drain_array() is used on the shared array.
+ * returns non-zero if some work is done
  */
-void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
+int drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
 		 struct array_cache *ac, int force, int node)
 {
 	int this_cpu = smp_processor_id();
 	int tofree;
 
 	if (!ac || !ac->avail)
-		return;
+		return 0;
 	if (ac->touched && !force) {
 		ac->touched = 0;
 	} else {
@@ -4138,6 +4141,7 @@ void drain_array(struct kmem_cache *cach
 		}
 		slab_spin_unlock_irq(&l3->list_lock, this_cpu);
 	}
+	return 1;
 }
 
 /**
@@ -4157,6 +4161,7 @@ static void cache_reap(struct work_struc
 	int this_cpu = raw_smp_processor_id(), node = cpu_to_node(this_cpu);
 	struct kmem_cache *searchp;
 	struct kmem_list3 *l3;
+	int work_done = 0;
 
 	if (!mutex_trylock(&cache_chain_mutex)) {
 		/* Give up. Setup the next iteration. */
@@ -4175,10 +4180,10 @@ static void cache_reap(struct work_struc
 		 */
 		l3 = searchp->nodelists[node];
 
-		reap_alien(searchp, l3, &this_cpu);
+		work_done += reap_alien(searchp, l3, &this_cpu);
 
-		drain_array(searchp, l3, cpu_cache_get(searchp, this_cpu),
-			    0, node);
+		work_done += drain_array(searchp, l3,
+			    cpu_cache_get(searchp, this_cpu), 0, node);
 
 		/*
 		 * These are racy checks but it does not matter
@@ -4189,7 +4194,7 @@ static void cache_reap(struct work_struc
 
 		l3->next_reap = jiffies + REAPTIMEOUT_LIST3;
 
-		drain_array(searchp, l3, l3->shared, 0, node);
+		work_done += drain_array(searchp, l3, l3->shared, 0, node);
 
 		if (l3->free_touched)
 			l3->free_touched = 0;
@@ -4207,9 +4212,10 @@ next:
 	mutex_unlock(&cache_chain_mutex);
 	next_reap_node();
 	refresh_cpu_vm_stats(smp_processor_id());
+
 	/* Set up the next iteration */
 	schedule_delayed_work(&__get_cpu_var(reap_work),
-		round_jiffies_relative(REAPTIMEOUT_CPUC));
+		round_jiffies_relative((1+!work_done) * REAPTIMEOUT_CPUC));
 }
 
 #ifdef CONFIG_PROC_FS



^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
                   ` (9 preceding siblings ...)
  2007-02-06 10:10 ` v2.6.20-rt1, yum/rpm Arjan van de Ven
@ 2007-02-06 10:30 ` Sunil Naidu
  2007-02-06 19:38 ` Chuck Harding
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 54+ messages in thread
From: Sunil Naidu @ 2007-02-06 10:30 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

On 2/5/07, Ingo Molnar <mingo@elte.hu> wrote:
> i have released the v2.6.20-rt1 kernel, which can be downloaded from the

This is about 2.6.20-rt2, no issues here.

PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 init [5]
    2 ?        S      0:00 [migration/0]
    3 ?        S      0:00 [posix_cpu_timer]
    4 ?        S      0:00 [softirq-high/0]
    5 ?        S      0:00 [softirq-timer/0]
    6 ?        S      0:00 [softirq-net-tx/]
    7 ?        S      0:00 [softirq-net-rx/]
    8 ?        S      0:00 [softirq-block/0]
    9 ?        S      0:00 [softirq-tasklet]
   10 ?        S      0:00 [softirq-sched/0]
   11 ?        S      0:00 [softirq-hrtimer]
   12 ?        S      0:00 [softirq-rcu/0]
   13 ?        S<     0:00 [desched/0]
   14 ?        S      0:00 [migration/1]
   15 ?        S      0:00 [posix_cpu_timer]
   16 ?        S      0:00 [softirq-high/1]
   17 ?        S      0:00 [softirq-timer/1]
   18 ?        S      0:00 [softirq-net-tx/]
   19 ?        S      0:00 [softirq-net-rx/]
   20 ?        S      0:00 [softirq-block/1]
   21 ?        S      0:00 [softirq-tasklet]
   22 ?        S      0:00 [softirq-sched/1]
   23 ?        S      0:00 [softirq-hrtimer]
   24 ?        S      0:00 [softirq-rcu/1]
   25 ?        S<     0:00 [desched/1]
   26 ?        S<     0:00 [events/0]
   27 ?        S<     0:00 [events/1]
   28 ?        S<     0:00 [khelper]
   29 ?        S      0:00 [RCU Prio Booste]
   30 ?        S<     0:00 [kthread]
   63 ?        S<     0:00 [kblockd/0]
   64 ?        S<     0:00 [kblockd/1]
   65 ?        S<     0:00 [kacpid]
   66 ?        S<     0:00 [IRQ-9]
  157 ?        S<     0:00 [cqueue/0]
  158 ?        S<     0:00 [cqueue/1]
  159 ?        S<     0:00 [ksuspend_usbd]
  162 ?        S<     0:00 [khubd]
  164 ?        S<     0:00 [kseriod]
  189 ?        S      0:00 [pdflush]
  190 ?        S      0:00 [pdflush]
  191 ?        S<     0:00 [kswapd0]
  192 ?        S<     0:00 [flush_filesd/0]
  193 ?        S<     0:00 [flush_filesd/1]
  194 ?        S<     0:00 [aio/0]
  195 ?        S<     0:00 [aio/1]
  285 ?        S<     0:00 [IRQ-8]
  317 ?        S<     0:00 [IRQ-14]
  332 ?        S<     0:00 [IRQ-12]
  333 ?        S<     0:00 [IRQ-1]
  339 ?        S<     0:00 [kpsmoused]
  343 ?        S      0:00 [kirqd]
  351 ?        S<     0:00 [IRQ-20]
  352 ?        S<     0:00 [IRQ-19]
  353 ?        S<     0:00 [IRQ-18]
  354 ?        S<     0:00 [IRQ-16]
  376 ?        S<     0:00 [ata/0]
  377 ?        S<     0:00 [ata/1]
  378 ?        S<     0:00 [ata_aux]
  382 ?        S<     0:00 [scsi_eh_0]
  383 ?        S<     0:00 [scsi_eh_1]
  384 ?        S<     0:00 [kjournald]
  412 ?        S<     0:00 [kauditd]
  449 ?        S<s    0:00 /sbin/udevd -d
 1153 ?        S<     0:00 [hda_codec]
 1552 ?        S<     0:00 [kmpathd/0]
 1553 ?        S<     0:00 [kmpathd/1]
 1561 ?        S<     0:00 [kmirrord]
 1582 ?        S<     0:00 [kjournald]
................
.................
................

Wanted to ask, is there any (performance) problem with multi-sessions
(on the same box) with these kernels? I read some time back about Real
Time sound (exact terminology I don't remember), how to test this
using Intel hda? Any pointers?


Thanks,

Akula2

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: USX2Y 2.6.20-rt2 Oops on disconnect
  2007-02-05 22:27     ` Karsten Wiese
@ 2007-02-06 11:53       ` Takashi Iwai
  2007-02-07  0:54       ` USX2Y 2.6.20-rt2 Oops on disconnect [SOLVED] Rui Nuno Capela
  1 sibling, 0 replies; 54+ messages in thread
From: Takashi Iwai @ 2007-02-06 11:53 UTC (permalink / raw)
  To: Karsten Wiese; +Cc: alsa-devel, Rui Nuno Capela

At Mon, 5 Feb 2007 23:27:06 +0100,
Karsten Wiese wrote:
> 
> Hi Takashi,
> 
> had some oopses here running -rt kernels,
> which vanished after applying this.

It wasn't included in 2.6.20, so likely this may be the cause.

You can also try either the latest alsa-driver from HG tree or the
alsa.git mm branch, both of which include this fix.


Takashi


> 
>       Karsten
> ------------------------------------------------------------------- 
> snd_hwdep_release() racefix
> 
> 
> snd_card_file_remove() can free the snd_card.
> Touch hw->* only before calling snd_card_file_remove().
> 
> Unrelated: Allow hwdep devices not to have own ops.release();
> 
> 
> Signed-off-by: Karsten Wiese <fzu@wemgehoertderstaat.de>
> 
> 
> --- /alsa-kernel/core/hwdep.c_	2007-01-30 20:32:01.000000000 +0100
> +++ /alsa-kernel/core/hwdep.c	2007-01-30 20:32:01.000000000 +0100
> @@ -156,15 +156,16 @@
>  	int err = -ENXIO;
>  	struct snd_hwdep *hw = file->private_data;
>  	struct module *mod = hw->card->module;
> +
>  	mutex_lock(&hw->open_mutex);
> -	if (hw->ops.release) {
> +	if (hw->ops.release)
>  		err = hw->ops.release(hw, file);
> -		wake_up(&hw->open_wait);
> -	}
>  	if (hw->used > 0)
>  		hw->used--;
> -	snd_card_file_remove(hw->card, file);
>  	mutex_unlock(&hw->open_mutex);
> +	wake_up(&hw->open_wait);
> +
> +	snd_card_file_remove(hw->card, file);
>  	module_put(mod);
>  	return err;
>  }

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
                   ` (10 preceding siblings ...)
  2007-02-06 10:30 ` Sunil Naidu
@ 2007-02-06 19:38 ` Chuck Harding
  2007-02-06 20:08   ` K.R. Foley
  2007-02-27 17:39 ` K.R. Foley
  2007-04-26 13:57 ` v2.6.21-rt1 Ingo Molnar
  13 siblings, 1 reply; 54+ messages in thread
From: Chuck Harding @ 2007-02-06 19:38 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-rt-users

On Mon, 5 Feb 2007, Ingo Molnar wrote:

> i have released the v2.6.20-rt1 kernel, which can be downloaded from the
> usual place:
>
>  http://redhat.com/~mingo/realtime-preempt/

I find no patch-2.6.20-rt1 there. Is it somewhere else, perhaps?

>
> more info about the -rt patchset can be found in the RT wiki:
>
>  http://rt.wiki.kernel.org
>
> This is a fixes-only release. Since the -rt tree has been closely
> tracking Linus' upstream kernel since -rc1, no new issues are expected -
> please re-report if anything is still unfixed.
>
> There are lots of changes relative to 2.6.19-rt6 (the last stable
> release), but these are mostly fixes and other gradual improvements. KVM
> is now enabled in the yum kernel on both i686 and x86_64 (and has been
> enabled since around -rc1-rt1), the -rt tree tracks kvm-trunk (which is
> a bit fresher than upstream KVM) and has a few additional paravirt
> speedups implemented and enabled.
>
> to build a 2.6.20-rt1 tree, the following patches should be applied:
>
>  http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2
>  http://redhat.com/~mingo/realtime-preempt/patch-2.6.20-rt1
>
> the -rt YUM repository for Fedora Core 6 and 5, for architectures i686
> and x86_64 can be activated via:
>
>   cd /etc/yum.repos.d
>   wget http://people.redhat.com/~mingo/realtime-preempt/rt.repo
>
>   yum install kernel-rt.x86_64   # on x86_64
>   yum install kernel-rt          # on i686
>
>   yum update kernel-rt           # refresh - or enable yum-updatesd
>
> as usual, bugreports, fixes and suggestions are welcome,
>
> 	Ingo
> -
> To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

-- 
Charles D. (Chuck) Harding   <charding@llnl.gov>    Voice: 925-423-8879
Senior Computer Associate      LC Operations          Fax: 925-423-6961
B453 R2253/2131  Pager: 00500  Ops Room: 925-422-3743 Ops: 925-422-0484
Lawrence Livermore National Laboratory          Computation Directorate
Livermore, CA USA    http://www.llnl.gov    GPG Public Key ID: B9EB6601
-------------------- http://tinyurl.com/5w5ey -------------------------
-- Support bacteria - it's the only culture some people have! --

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-06 19:38 ` Chuck Harding
@ 2007-02-06 20:08   ` K.R. Foley
  0 siblings, 0 replies; 54+ messages in thread
From: K.R. Foley @ 2007-02-06 20:08 UTC (permalink / raw)
  To: Chuck Harding; +Cc: Ingo Molnar, linux-rt-users

Chuck Harding wrote:
> On Mon, 5 Feb 2007, Ingo Molnar wrote:
> 
>> i have released the v2.6.20-rt1 kernel, which can be downloaded from the
>> usual place:
>>
>>  http://redhat.com/~mingo/realtime-preempt/
> 
> I find no patch-2.6.20-rt1 there. Is it somewhere else, perhaps?
> 
rt1 is now in older:
http://people.redhat.com/mingo/realtime-preempt/older/patch-2.6.20-rt1

However, looks like Ingo is up to rt4 now but there is no rt4 patch,
only RPMs? Ingo?

>>
>> more info about the -rt patchset can be found in the RT wiki:
>>
>>  http://rt.wiki.kernel.org
>>
>> This is a fixes-only release. Since the -rt tree has been closely
>> tracking Linus' upstream kernel since -rc1, no new issues are expected -
>> please re-report if anything is still unfixed.
>>
>> There are lots of changes relative to 2.6.19-rt6 (the last stable
>> release), but these are mostly fixes and other gradual improvements. KVM
>> is now enabled in the yum kernel on both i686 and x86_64 (and has been
>> enabled since around -rc1-rt1), the -rt tree tracks kvm-trunk (which is
>> a bit fresher than upstream KVM) and has a few additional paravirt
>> speedups implemented and enabled.
>>
>> to build a 2.6.20-rt1 tree, the following patches should be applied:
>>
>>  http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2
>>  http://redhat.com/~mingo/realtime-preempt/patch-2.6.20-rt1
>>
>> the -rt YUM repository for Fedora Core 6 and 5, for architectures i686
>> and x86_64 can be activated via:
>>
>>   cd /etc/yum.repos.d
>>   wget http://people.redhat.com/~mingo/realtime-preempt/rt.repo
>>
>>   yum install kernel-rt.x86_64   # on x86_64
>>   yum install kernel-rt          # on i686
>>
>>   yum update kernel-rt           # refresh - or enable yum-updatesd
>>
>> as usual, bugreports, fixes and suggestions are welcome,
>>
>>     Ingo
>> -
>> To unsubscribe from this list: send the line "unsubscribe
>> linux-rt-users" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
> 


-- 
   kr

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: USX2Y 2.6.20-rt2 Oops on disconnect [SOLVED]
  2007-02-05 22:27     ` Karsten Wiese
  2007-02-06 11:53       ` Takashi Iwai
@ 2007-02-07  0:54       ` Rui Nuno Capela
  2007-02-07 10:26         ` Takashi Iwai
  1 sibling, 1 reply; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-07  0:54 UTC (permalink / raw)
  To: Karsten Wiese; +Cc: Takashi Iwai, alsa-devel

Karsten Wiese wrote:
> Am Montag, 5. Februar 2007 22:46 schrieb Rui Nuno Capela:
>> Hi Karsten,
>>
>> I'm having this kernel oops right on disconnecting my US-224. Probably it
>> has been creeping around before, but only now I had the opportunity to
>> report.
>>
>> ...
> 
> hm, just pulled the usb-cable off my us428 twice with nothing in dmesg.
> Under jackd working.
> Which is the way to reproduce this?
> As a shot in the dark, please try the attached patch.
> Should be correct anyhow ;-)
> 
> ...
> Hi Takashi,
> 
> had some oopses here running -rt kernels,
> which vanished after applying this.
> 
>       Karsten
> ------------------------------------------------------------------- 
> snd_hwdep_release() racefix
> 
> 
> snd_card_file_remove() can free the snd_card.
> Touch hw->* only before calling snd_card_file_remove().
> 
> Unrelated: Allow hwdep devices not to have own ops.release();
> 
> 
> Signed-off-by: Karsten Wiese <fzu@wemgehoertderstaat.de>
> 
> 
> --- /alsa-kernel/core/hwdep.c_	2007-01-30 20:32:01.000000000 +0100
> +++ /alsa-kernel/core/hwdep.c	2007-01-30 20:32:01.000000000 +0100
> @@ -156,15 +156,16 @@
>  	int err = -ENXIO;
>  	struct snd_hwdep *hw = file->private_data;
>  	struct module *mod = hw->card->module;
> +
>  	mutex_lock(&hw->open_mutex);
> -	if (hw->ops.release) {
> +	if (hw->ops.release)
>  		err = hw->ops.release(hw, file);
> -		wake_up(&hw->open_wait);
> -	}
>  	if (hw->used > 0)
>  		hw->used--;
> -	snd_card_file_remove(hw->card, file);
>  	mutex_unlock(&hw->open_mutex);
> +	wake_up(&hw->open_wait);
> +
> +	snd_card_file_remove(hw->card, file);
>  	module_put(mod);
>  	return err;
>  }
> 

OK. Karsten's patch (snd_hwdep_release-racefix.diff) applied. Oops no
more, at least on this early reported machine. I've just missed that one
before and assumed it was already present on the -rt patchset (as was
the OHCI fix).

Make me wait no longer. Make it through 2.6.21 merge window too, please?

Cheers.
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: USX2Y 2.6.20-rt2 Oops on disconnect [SOLVED]
  2007-02-07  0:54       ` USX2Y 2.6.20-rt2 Oops on disconnect [SOLVED] Rui Nuno Capela
@ 2007-02-07 10:26         ` Takashi Iwai
  0 siblings, 0 replies; 54+ messages in thread
From: Takashi Iwai @ 2007-02-07 10:26 UTC (permalink / raw)
  To: Rui Nuno Capela; +Cc: Karsten Wiese, alsa-devel

At Wed, 07 Feb 2007 00:54:23 +0000,
Rui Nuno Capela wrote:
> 
> Karsten Wiese wrote:
> > Am Montag, 5. Februar 2007 22:46 schrieb Rui Nuno Capela:
> >> Hi Karsten,
> >>
> >> I'm having this kernel oops right on disconnecting my US-224. Probably it
> >> has been creeping around before, but only now I had the opportunity to
> >> report.
> >>
> >> ...
> > 
> > hm, just pulled the usb-cable off my us428 twice with nothing in dmesg.
> > Under jackd working.
> > Which is the way to reproduce this?
> > As a shot in the dark, please try the attached patch.
> > Should be correct anyhow ;-)
> > 
> > ...
> > Hi Takashi,
> > 
> > had some oopses here running -rt kernels,
> > which vanished after applying this.
> > 
> >       Karsten
> > ------------------------------------------------------------------- 
> > snd_hwdep_release() racefix
> > 
> > 
> > snd_card_file_remove() can free the snd_card.
> > Touch hw->* only before calling snd_card_file_remove().
> > 
> > Unrelated: Allow hwdep devices not to have own ops.release();
> > 
> > 
> > Signed-off-by: Karsten Wiese <fzu@wemgehoertderstaat.de>
> > 
> > 
> > --- /alsa-kernel/core/hwdep.c_	2007-01-30 20:32:01.000000000 +0100
> > +++ /alsa-kernel/core/hwdep.c	2007-01-30 20:32:01.000000000 +0100
> > @@ -156,15 +156,16 @@
> >  	int err = -ENXIO;
> >  	struct snd_hwdep *hw = file->private_data;
> >  	struct module *mod = hw->card->module;
> > +
> >  	mutex_lock(&hw->open_mutex);
> > -	if (hw->ops.release) {
> > +	if (hw->ops.release)
> >  		err = hw->ops.release(hw, file);
> > -		wake_up(&hw->open_wait);
> > -	}
> >  	if (hw->used > 0)
> >  		hw->used--;
> > -	snd_card_file_remove(hw->card, file);
> >  	mutex_unlock(&hw->open_mutex);
> > +	wake_up(&hw->open_wait);
> > +
> > +	snd_card_file_remove(hw->card, file);
> >  	module_put(mod);
> >  	return err;
> >  }
> > 
> 
> OK. Karsten's patch (snd_hwdep_release-racefix.diff) applied. Oops no
> more, at least on this early reported machine. I've just missed that one
> before and assumed it was already present on the -rt patchset (as was
> the OHCI fix).

Good to hear that it's really fixed.

> Make me wait no longer. Make it through 2.6.21 merge window too, please?

It's in ALSA tree, so it should be merged in the next merge window.


Takashi

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-06 10:10 ` v2.6.20-rt1, yum/rpm Arjan van de Ven
@ 2007-02-07 12:32   ` Ingo Molnar
  0 siblings, 0 replies; 54+ messages in thread
From: Ingo Molnar @ 2007-02-07 12:32 UTC (permalink / raw)
  To: Arjan van de Ven; +Cc: linux-kernel, linux-rt-users


* Arjan van de Ven <arjan@infradead.org> wrote:

> patch below has 2 tweaks
> 1) the new RCU feature wakes up once per second, make sure this is using
> the new round_jiffies() infrastructure
> 2) the slab background reap code is waking up once per 2 seconds per
> cpu. The patch makes this more dynamic; if no work was done (no activity
> on the cpu happened) then this is made to be 4 seconds

thanks, i've applied both tweaks.

	Ingo

^ permalink raw reply	[flat|nested] 54+ messages in thread

* us428control 0.4.5 [RFC]
  2007-02-05 14:25 ` Karsten Wiese
  2007-02-05 21:46   ` USX2Y 2.6.20-rt2 Oops on disconnect Rui Nuno Capela
@ 2007-02-10  1:29   ` Rui Nuno Capela
  2007-02-10 15:37     ` Rui Nuno Capela
  1 sibling, 1 reply; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-10  1:29 UTC (permalink / raw)
  To: alsa-devel

Hi Karsten et al.,

After a very long period I've finally got the time and initiative to get
back on continuing us428control implementation details, specially
regarding my US-224 usability as a dedicated DAW control surface.

Almost 3 years ago I had the MMC implementation started but left it in
the bare basic status, that was about the transport and shuttle controls.

Now I wish to have a chance and push it a little bit further and
complete some other things in the process.

Specifically, I'm proposing about the following:

a) SELECT, REC, MUTE and SOLO switching.
b) NULL fader switching.
c) MMC Masked-Write command mapping to REC, MUTE and SOLO[*]

I have already a) and b) working partially, at least for the lightnings
(LEDs) as you can check from [1], with version bumped to
0.4.5; c) will follow promptly on those next days.

I would like your early but valuable comments, whether this effort makes
any sense, specially in regard to the US-428.

[*] I have some fundamental doubts if there's an MMC command information
field for track SOLOing. AFAIK theres only those for track REC and MUTE
status, dunno how can I do the SOLO signaling :( Ah, any hint would be
highly appreciated, specially from someone who has access to the
official MIDI specification, the one regarding MMC Recommended Practices
RP-013 in particular ;)

[1] http://www.rncbc.org/usx2y/us428control-0.4.5-1.tar.gz

Cheers,
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: us428control 0.4.5 [RFC]
  2007-02-10  1:29   ` us428control 0.4.5 [RFC] Rui Nuno Capela
@ 2007-02-10 15:37     ` Rui Nuno Capela
  2007-02-13 16:07       ` Q: How to detect which USx2y is connected? Rui Nuno Capela
                         ` (2 more replies)
  0 siblings, 3 replies; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-10 15:37 UTC (permalink / raw)
  To: alsa-devel; +Cc: Karsten Wiese, Karsten Wiese, Rui Nuno Capela

Hi again,

Some more improvements [1], specially regarding BANK layer switching:
- when not in INPUT MONITOR mode, the SELECT, REC, MUTE/SOLO channel LED
states are preserved across four (4) layers, now switchable with the
BANK_R and BANK_L buttons.

Next steps will regard the proposed MMC Masked Write command traffic and
the NULL fader switch, although this last one is falling short of
usefulness on my mind :)

[1] http://www.rncbc.org/usx2y/us428control-0.4.5-2.tar.gz

Cheers.
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Q: How to detect which USx2y is connected?
  2007-02-10 15:37     ` Rui Nuno Capela
@ 2007-02-13 16:07       ` Rui Nuno Capela
  2007-02-13 17:36         ` Karsten Wiese
  2007-02-14 22:43       ` [PATCH] us428control 0.4.5 Rui Nuno Capela
  2007-02-16 17:13       ` [PATCH] us428control 0.4.6 Rui Nuno Capela
  2 siblings, 1 reply; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-13 16:07 UTC (permalink / raw)
  To: Karsten Wiese; +Cc: alsa-devel

Hi Karsten,

In my quest in completing us428control implementation, I'm now stumbling
on a fundamental question regarding the number of tracks/channel-faders
(per bank) each particular usx2y device supports. The question boils down
to what is the actual numeric value of the y in the actual usx2y model
name :)

In practice, I need to know which usx2y model is actually connected.

So, what is the best/deterministic way to detect (programmatically)
whether us428control is connecting to a US224 (y=4, as mine) _or_ a US428
(y=8, as yours) ?

Is snd_hwdep_info_get_name() expected to be the most correct method?

TIA
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-13 16:07       ` Q: How to detect which USx2y is connected? Rui Nuno Capela
@ 2007-02-13 17:36         ` Karsten Wiese
  2007-02-13 17:47           ` Karsten Wiese
  2007-02-13 17:48           ` Takashi Iwai
  0 siblings, 2 replies; 54+ messages in thread
From: Karsten Wiese @ 2007-02-13 17:36 UTC (permalink / raw)
  To: Rui Nuno Capela; +Cc: alsa-devel

Hi Rui,

Am Dienstag, 13. Februar 2007 schrieb Rui Nuno Capela:
> Hi Karsten,
> 
> In my quest in completing us428control implementation, I'm now stumbling
> on a fundamental question regarding the number of tracks/channel-faders
> (per bank) each particular usx2y device supports. The question boils down
> to what is the actual numeric value of the y in the actual usx2y model
> name :)
> 
> In practice, I need to know which usx2y model is actually connected.
> 
> So, what is the best/deterministic way to detect (programmatically)
> whether us428control is connecting to a US224 (y=4, as mine) _or_ a US428
> (y=8, as yours) ?
> 
> Is snd_hwdep_info_get_name() expected to be the most correct method?

Yes, I fear. this gives the /proc/bus/usb/002/004 filename.
I just did cat /proc/bus/usb/004/005 > x
and check x with hexedit: the 1604 and 8001 is in there.
I don't know how to portably interpret a read from
/proc/bus/usb/004/005 though.

libusb seams to only give the product id (1604:800x) by iterating over 
all usb-devices.

Thanks, Karsten

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-13 17:36         ` Karsten Wiese
@ 2007-02-13 17:47           ` Karsten Wiese
  2007-02-13 17:48           ` Takashi Iwai
  1 sibling, 0 replies; 54+ messages in thread
From: Karsten Wiese @ 2007-02-13 17:47 UTC (permalink / raw)
  To: Rui Nuno Capela; +Cc: alsa-devel

Am Dienstag, 13. Februar 2007 schrieb Karsten Wiese:
> Hi Rui,
> 
> Am Dienstag, 13. Februar 2007 schrieb Rui Nuno Capela:
> > Hi Karsten,
> > 
> > In my quest in completing us428control implementation, I'm now stumbling
> > on a fundamental question regarding the number of tracks/channel-faders
> > (per bank) each particular usx2y device supports. The question boils down
> > to what is the actual numeric value of the y in the actual usx2y model
> > name :)
> > 
> > In practice, I need to know which usx2y model is actually connected.
> > 
> > So, what is the best/deterministic way to detect (programmatically)
> > whether us428control is connecting to a US224 (y=4, as mine) _or_ a US428
> > (y=8, as yours) ?
> > 
> > Is snd_hwdep_info_get_name() expected to be the most correct method?
> 
> Yes, I fear. this gives the /proc/bus/usb/002/004 filename.
> I just did cat /proc/bus/usb/004/005 > x
> and check x with hexedit: the 1604 and 8001 is in there.
> I don't know how to portably interpret a read from
> /proc/bus/usb/004/005 though.
> 
> libusb seams to only give the product id (1604:800x) by iterating over 
> all usb-devices.

Also the /sys filesystem gives some infos:

	$ cat /sys/bus/usb/devices/4-1\:1.0/modalias
	usb:v1604p8001d0001dc00dsc00dp00icFFisc00ip00


How do the (void on 224) 428 slidervalues show up in us428control?
 
Thanks, Karsten
 



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-13 17:36         ` Karsten Wiese
  2007-02-13 17:47           ` Karsten Wiese
@ 2007-02-13 17:48           ` Takashi Iwai
  2007-02-13 18:08             ` Rui Nuno Capela
  1 sibling, 1 reply; 54+ messages in thread
From: Takashi Iwai @ 2007-02-13 17:48 UTC (permalink / raw)
  To: Karsten Wiese; +Cc: alsa-devel, Rui Nuno Capela

At Tue, 13 Feb 2007 18:36:35 +0100,
Karsten Wiese wrote:
> 
> Hi Rui,
> 
> Am Dienstag, 13. Februar 2007 schrieb Rui Nuno Capela:
> > Hi Karsten,
> > 
> > In my quest in completing us428control implementation, I'm now stumbling
> > on a fundamental question regarding the number of tracks/channel-faders
> > (per bank) each particular usx2y device supports. The question boils down
> > to what is the actual numeric value of the y in the actual usx2y model
> > name :)
> > 
> > In practice, I need to know which usx2y model is actually connected.
> > 
> > So, what is the best/deterministic way to detect (programmatically)
> > whether us428control is connecting to a US224 (y=4, as mine) _or_ a US428
> > (y=8, as yours) ?
> > 
> > Is snd_hwdep_info_get_name() expected to be the most correct method?
> 
> Yes, I fear. this gives the /proc/bus/usb/002/004 filename.
> I just did cat /proc/bus/usb/004/005 > x
> and check x with hexedit: the 1604 and 8001 is in there.
> I don't know how to portably interpret a read from
> /proc/bus/usb/004/005 though.

Note that /proc/bus/usb is deprecated on many distros...


Takashi

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-13 17:48           ` Takashi Iwai
@ 2007-02-13 18:08             ` Rui Nuno Capela
  2007-02-13 18:13               ` Rui Nuno Capela
  2007-02-13 19:03               ` Karsten Wiese
  0 siblings, 2 replies; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-13 18:08 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: Karsten Wiese, alsa-devel

[-- Attachment #1: Type: text/plain, Size: 1854 bytes --]

Takashi Iwai wrote:
> At Tue, 13 Feb 2007 18:36:35 +0100,
> Karsten Wiese wrote:
>> Hi Rui,
>>
>> Am Dienstag, 13. Februar 2007 schrieb Rui Nuno Capela:
>>> Hi Karsten,
>>>
>>> In my quest in completing us428control implementation, I'm now stumbling
>>> on a fundamental question regarding the number of tracks/channel-faders
>>> (per bank) each particular usx2y device supports. The question boils down
>>> to what is the actual numeric value of the y in the actual usx2y model
>>> name :)
>>>
>>> In practice, I need to know which usx2y model is actually connected.
>>>
>>> So, what is the best/deterministic way to detect (programmatically)
>>> whether us428control is connecting to a US224 (y=4, as mine) _or_ a US428
>>> (y=8, as yours) ?
>>>
>>> Is snd_hwdep_info_get_name() expected to be the most correct method?
>> Yes, I fear. this gives the /proc/bus/usb/002/004 filename.
>> I just did cat /proc/bus/usb/004/005 > x
>> and check x with hexedit: the 1604 and 8001 is in there.
>> I don't know how to portably interpret a read from
>> /proc/bus/usb/004/005 though.
> 
> Note that /proc/bus/usb is deprecated on many distros...
> 

How about using snd_pcm_hw_params_get_channels_max() ?
At least on capture the US224 should give 2 and the US428 should give 4
as the maximum number of channels.

It would be handful for me if the attached test program could be ran
against a US428, just for the records ;)

On my US224 it gives:

$ snd_hwdep_info hw:3
---hwdep---
snd_hwdep_info_get_id   (hw:3) = 'USX2Y Loader'
snd_hwdep_info_get_name (hw:3) = '/proc/bus/usb/001/004'
---pcm (capture)---
snd_pcm_hw_params_get_channels_min(hw:3) = 2
snd_pcm_hw_params_get_channels_max(hw:3) = 2
---pcm (playback)---
snd_pcm_hw_params_get_channels_min(hw:3) = 2
snd_pcm_hw_params_get_channels_max(hw:3) = 2

Karsten?
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org

[-- Attachment #2: snd_hwdep_info.c --]
[-- Type: text/plain, Size: 2446 bytes --]

#include <stdio.h>
#include <stdlib.h>

#include <alsa/asoundlib.h>

/**
	Vendor / Product ID
    0x1604 / 0x8001 (US428)
	0x1604 / 0x8005 (US224)
	0x1604 / 0x8007 (US122)
*/
int print_hwdep_info ( const char *name )
{
	snd_hwdep_t *hwdep = NULL;
	snd_hwdep_info_t *hwdep_info;
	int err;

	if ((err = snd_hwdep_open(&hwdep, name,
			SND_HWDEP_OPEN_READ | SND_HWDEP_OPEN_NONBLOCK)) < 0) {
		fprintf(stderr, "snd_hwdep_open(%s): %s\n", name, snd_strerror(err));
		return err;
	}

	snd_hwdep_info_alloca(&hwdep_info);
	if ((err = snd_hwdep_info(hwdep, hwdep_info)) < 0) {
		fprintf(stderr, "snd_hwdep_info(%s): %s\n", name, snd_strerror(err));
	} else {
		printf("snd_hwdep_info_get_id   (%s) = '%s'\n", name, snd_hwdep_info_get_id(hwdep_info));
		printf("snd_hwdep_info_get_name (%s) = '%s'\n", name, snd_hwdep_info_get_name(hwdep_info));
	}

	if ((err = snd_hwdep_close(hwdep)) < 0)
		fprintf(stderr, "snd_hwdep_close(%s): %s\n", name, snd_strerror(err));
	
	return err;
}

int print_pcm_info ( const char *name, int stream )
{
	snd_pcm_t *pcm;
	snd_pcm_hw_params_t *hw_params;
	unsigned int channels;
	int err;
	
	if ((err = snd_pcm_open(&pcm, name, stream, SND_PCM_NONBLOCK)) < 0) {
		fprintf(stderr, "snd_pcm_open(%s): %s\n", name, snd_strerror(err));
		return err;
	}

	snd_pcm_hw_params_alloca(&hw_params);
	if ((err = snd_pcm_hw_params_any(pcm, hw_params)) < 0) {
		fprintf(stderr, "snd_pcm_hw_params_any(%s): %s\n", name, snd_strerror(err));
	} else {
		if ((err = snd_pcm_hw_params_get_channels_min(hw_params, &channels)) < 0) {
			fprintf(stderr, "snd_pcm_hw_params_get_channels_min(%s): %s\n", name, snd_strerror(err));
		} else {
			printf("snd_pcm_hw_params_get_channels_min(%s) = %u\n", name, channels);
		}
		if ((err = snd_pcm_hw_params_get_channels_max(hw_params, &channels)) < 0) {
			fprintf(stderr, "snd_pcm_hw_params_get_channels_max(%s): %s\n", name, snd_strerror(err));
		} else {
			printf("snd_pcm_hw_params_get_channels_max(%s) = %u\n", name, channels);
		}
	}

	if ((err = snd_pcm_close(pcm)) < 0)
		fprintf(stderr, "snd_pcm_close(%s): %s\n", name, snd_strerror(err));
	
	return err;
}


int main ( int argc, char *argv[] )
{
	int i;

	for (i = 1; i < argc; ++i) {
		const char *name = argv[i];
		printf("---hwdep---\n");
		print_hwdep_info(name);
		printf("---pcm (capture)---\n");
		print_pcm_info(name, SND_PCM_STREAM_CAPTURE);
		printf("---pcm (playback)---\n");
		print_pcm_info(name, SND_PCM_STREAM_PLAYBACK);
	}
}

[-- Attachment #3: Type: text/plain, Size: 374 bytes --]

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

[-- Attachment #4: Type: text/plain, Size: 161 bytes --]

_______________________________________________
Alsa-devel mailing list
Alsa-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-13 18:08             ` Rui Nuno Capela
@ 2007-02-13 18:13               ` Rui Nuno Capela
  2007-02-13 19:03               ` Karsten Wiese
  1 sibling, 0 replies; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-13 18:13 UTC (permalink / raw)
  To: Rui Nuno Capela; +Cc: Takashi Iwai, Karsten Wiese, alsa-devel

Rui Nuno Capela wrote:
> Takashi Iwai wrote:
>> At Tue, 13 Feb 2007 18:36:35 +0100,
>> Karsten Wiese wrote:
>>> Hi Rui,
>>>
>>> Am Dienstag, 13. Februar 2007 schrieb Rui Nuno Capela:
>>>> Hi Karsten,
>>>>
>>>> In my quest in completing us428control implementation, I'm now stumbling
>>>> on a fundamental question regarding the number of tracks/channel-faders
>>>> (per bank) each particular usx2y device supports. The question boils down
>>>> to what is the actual numeric value of the y in the actual usx2y model
>>>> name :)
>>>>
>>>> In practice, I need to know which usx2y model is actually connected.
>>>>
>>>> So, what is the best/deterministic way to detect (programmatically)
>>>> whether us428control is connecting to a US224 (y=4, as mine) _or_ a US428
>>>> (y=8, as yours) ?
>>>>
>>>> Is snd_hwdep_info_get_name() expected to be the most correct method?
>>> Yes, I fear. this gives the /proc/bus/usb/002/004 filename.
>>> I just did cat /proc/bus/usb/004/005 > x
>>> and check x with hexedit: the 1604 and 8001 is in there.
>>> I don't know how to portably interpret a read from
>>> /proc/bus/usb/004/005 though.
>> Note that /proc/bus/usb is deprecated on many distros...
>>
> 

And yes, the path returned from snd_hwdep_info_get_name(), which is atm
 '/proc/bus/usb/001/004', doesn't even exist on the system (opensuse
10.2; 2.6.20-rt3 SMP/HT)

So there must be another way...
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-13 18:08             ` Rui Nuno Capela
  2007-02-13 18:13               ` Rui Nuno Capela
@ 2007-02-13 19:03               ` Karsten Wiese
  2007-02-13 21:01                 ` Rui Nuno Capela
  1 sibling, 1 reply; 54+ messages in thread
From: Karsten Wiese @ 2007-02-13 19:03 UTC (permalink / raw)
  To: Rui Nuno Capela; +Cc: Takashi Iwai, alsa-devel

Am Dienstag, 13. Februar 2007 schrieb Rui Nuno Capela:
> Takashi Iwai wrote:
> > At Tue, 13 Feb 2007 18:36:35 +0100,
> > Karsten Wiese wrote:
> >> Hi Rui,
> >>
> >> Am Dienstag, 13. Februar 2007 schrieb Rui Nuno Capela:
> >>> Hi Karsten,
> >>>
> >>> In my quest in completing us428control implementation, I'm now stumbling
> >>> on a fundamental question regarding the number of tracks/channel-faders
> >>> (per bank) each particular usx2y device supports. The question boils down
> >>> to what is the actual numeric value of the y in the actual usx2y model
> >>> name :)
> >>>
> >>> In practice, I need to know which usx2y model is actually connected.
> >>>
> >>> So, what is the best/deterministic way to detect (programmatically)
> >>> whether us428control is connecting to a US224 (y=4, as mine) _or_ a US428
> >>> (y=8, as yours) ?
> >>>
> >>> Is snd_hwdep_info_get_name() expected to be the most correct method?
> >> Yes, I fear. this gives the /proc/bus/usb/002/004 filename.
> >> I just did cat /proc/bus/usb/004/005 > x
> >> and check x with hexedit: the 1604 and 8001 is in there.
> >> I don't know how to portably interpret a read from
> >> /proc/bus/usb/004/005 though.
> > 
> > Note that /proc/bus/usb is deprecated on many distros...
> > 
> 
> How about using snd_pcm_hw_params_get_channels_max() ?
> At least on capture the US224 should give 2 and the US428 should give 4
> as the maximum number of channels.
> 
> It would be handful for me if the attached test program could be ran
> against a US428, just for the records ;)
> 
> On my US224 it gives:
> 
> $ snd_hwdep_info hw:3
> ---hwdep---
> snd_hwdep_info_get_id   (hw:3) = 'USX2Y Loader'
> snd_hwdep_info_get_name (hw:3) = '/proc/bus/usb/001/004'
> ---pcm (capture)---
> snd_pcm_hw_params_get_channels_min(hw:3) = 2
> snd_pcm_hw_params_get_channels_max(hw:3) = 2
> ---pcm (playback)---
> snd_pcm_hw_params_get_channels_min(hw:3) = 2
> snd_pcm_hw_params_get_channels_max(hw:3) = 2
> 
> Karsten?

 ./a.out hw:1
---hwdep---
snd_hwdep_info_get_id   (hw:1) = 'USX2Y Loader'
snd_hwdep_info_get_name (hw:1) = '/proc/bus/usb/004/007'
---pcm (capture)---
snd_pcm_hw_params_get_channels_min(hw:1) = 2
snd_pcm_hw_params_get_channels_max(hw:1) = 2
---pcm (playback)---
snd_pcm_hw_params_get_channels_min(hw:1) = 2
snd_pcm_hw_params_get_channels_max(hw:1) = 2

The 428's 4 capture channels are only visible to the raw-usb jack thing.
and this is only there for module param nrpacks=1.....

What do you see in your /sys/bus/usb/devices/... ?
(Not that I knew how to deduce the sysfs file from the hwdep->name)

      Karsten

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-13 19:03               ` Karsten Wiese
@ 2007-02-13 21:01                 ` Rui Nuno Capela
  2007-02-14 12:59                   ` Takashi Iwai
  0 siblings, 1 reply; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-13 21:01 UTC (permalink / raw)
  To: Karsten Wiese; +Cc: Takashi Iwai, alsa-devel

Karsten Wiese wrote:
>> How about using snd_pcm_hw_params_get_channels_max() ?
>> At least on capture the US224 should give 2 and the US428 should give 4
>> as the maximum number of channels.
>>
>> It would be handful for me if the attached test program could be ran
>> against a US428, just for the records ;)
>>
>> On my US224 it gives:
>>
>> $ snd_hwdep_info hw:3
>> ---hwdep---
>> snd_hwdep_info_get_id   (hw:3) = 'USX2Y Loader'
>> snd_hwdep_info_get_name (hw:3) = '/proc/bus/usb/001/004'
>> ---pcm (capture)---
>> snd_pcm_hw_params_get_channels_min(hw:3) = 2
>> snd_pcm_hw_params_get_channels_max(hw:3) = 2
>> ---pcm (playback)---
>> snd_pcm_hw_params_get_channels_min(hw:3) = 2
>> snd_pcm_hw_params_get_channels_max(hw:3) = 2
>>
>> Karsten?
> 
>  ./a.out hw:1
> ---hwdep---
> snd_hwdep_info_get_id   (hw:1) = 'USX2Y Loader'
> snd_hwdep_info_get_name (hw:1) = '/proc/bus/usb/004/007'
> ---pcm (capture)---
> snd_pcm_hw_params_get_channels_min(hw:1) = 2
> snd_pcm_hw_params_get_channels_max(hw:1) = 2
> ---pcm (playback)---
> snd_pcm_hw_params_get_channels_min(hw:1) = 2
> snd_pcm_hw_params_get_channels_max(hw:1) = 2
> 
> The 428's 4 capture channels are only visible to the raw-usb jack thing.
> and this is only there for module param nrpacks=1.....
> 
> What do you see in your /sys/bus/usb/devices/... ?
> (Not that I knew how to deduce the sysfs file from the hwdep->name)
> 

We're in trouble... there must be another way. What about the shm
accessed from us428control? Is there supposed to be some watermark or
something? Maybe even the number of fader-channels, who knoes? I'm
afraid only you Karsten can grok that ;)


Anyway, here what I could grab, anyway:

# ls -l /sys/bus/usb/drivers/snd-usb-usx2y/
total 0
lrwxrwxrwx 1 root root    0 Feb 13 20:45 1-1:1.0 ->
../../../../devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0
--w------- 1 root root 4096 Feb 13 20:45 bind
lrwxrwxrwx 1 root root    0 Feb 13 20:45 module ->
../../../../module/snd_usb_usx2y
--w------- 1 root root 4096 Feb 13 20:45 new_id
--w------- 1 root root 4096 Feb 13 20:45 unbind

# ls -l /sys/bus/usb/devices/1-1/
total 0
drwxr-xr-x 3 root root    0 Feb 13 20:50 1-1:1.0
-rw-r--r-- 1 root root 4096 Feb 13 20:39 bConfigurationValue
-r--r--r-- 1 root root 4096 Feb 13 20:39 bDeviceClass
-r--r--r-- 1 root root 4096 Feb 13 20:39 bDeviceProtocol
-r--r--r-- 1 root root 4096 Feb 13 20:39 bDeviceSubClass
-r--r--r-- 1 root root 4096 Feb 13 20:39 bMaxPacketSize0
-r--r--r-- 1 root root 4096 Feb 13 20:39 bMaxPower
-r--r--r-- 1 root root 4096 Feb 13 20:39 bNumConfigurations
-r--r--r-- 1 root root 4096 Feb 13 20:39 bNumInterfaces
-r--r--r-- 1 root root 4096 Feb 13 20:39 bcdDevice
-r--r--r-- 1 root root 4096 Feb 13 20:39 bmAttributes
lrwxrwxrwx 1 root root    0 Feb 13 20:39 bus -> ../../../../../bus/usb
-r--r--r-- 1 root root 4096 Feb 13 20:39 configuration
-r--r--r-- 1 root root 4096 Feb 13 20:39 devnum
lrwxrwxrwx 1 root root    0 Feb 13 20:39 driver ->
../../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root    0 Feb 13 20:39 ep_00 ->
../../../../../class/usb_endpoint/usbdev1.6_ep00
-r--r--r-- 1 root root 4096 Feb 13 20:39 idProduct
-r--r--r-- 1 root root 4096 Feb 13 20:39 idVendor
-r--r--r-- 1 root root 4096 Feb 13 20:39 maxchild
drwxr-xr-x 2 root root    0 Feb 13 20:39 power
lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:audio3 ->
../../../../../class/sound/audio3
lrwxrwxrwx 1 root root    0 Feb 13 20:39 sound:controlC3 ->
../../../../../class/sound/controlC3
lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:dmmidi3 ->
../../../../../class/sound/dmmidi3
lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:dsp3 ->
../../../../../class/sound/dsp3
lrwxrwxrwx 1 root root    0 Feb 13 20:39 sound:hwC3D0 ->
../../../../../class/sound/hwC3D0
lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:hwC3D1 ->
../../../../../class/sound/hwC3D1
lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:midi3 ->
../../../../../class/sound/midi3
lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:midiC3D0 ->
../../../../../class/sound/midiC3D0
lrwxrwxrwx 1 root root    0 Feb 13 20:39 sound:mixer3 ->
../../../../../class/sound/mixer3
lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:pcmC3D0c ->
../../../../../class/sound/pcmC3D0c
lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:pcmC3D0p ->
../../../../../class/sound/pcmC3D0p
lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:pcmC3D2c ->
../../../../../class/sound/pcmC3D2c
lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:pcmC3D2p ->
../../../../../class/sound/pcmC3D2p
-r--r--r-- 1 root root 4096 Feb 13 20:39 speed
lrwxrwxrwx 1 root root    0 Feb 13 20:39 subsystem -> ../../../../../bus/usb
--w------- 1 root root 4096 Feb 13 20:39 uevent
lrwxrwxrwx 1 root root    0 Feb 13 20:39 usb_device:usbdev1.6 ->
../../../../../class/usb_device/usbdev1.6
lrwxrwxrwx 1 root root    0 Feb 13 20:39 usb_endpoint:usbdev1.6_ep00 ->
../../../../../class/usb_endpoint/usbdev1.6_ep00
-r--r--r-- 1 root root 4096 Feb 13 20:39 version

# cat /sys/bus/usb/devices/1-1/{idVendor,idProduct}
1604
8005


Cheers.
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-13 21:01                 ` Rui Nuno Capela
@ 2007-02-14 12:59                   ` Takashi Iwai
  2007-02-14 14:30                     ` Rui Nuno Capela
  0 siblings, 1 reply; 54+ messages in thread
From: Takashi Iwai @ 2007-02-14 12:59 UTC (permalink / raw)
  To: Rui Nuno Capela; +Cc: Karsten Wiese, alsa-devel

At Tue, 13 Feb 2007 21:01:35 +0000,
Rui Nuno Capela wrote:
> 
> Karsten Wiese wrote:
> >> How about using snd_pcm_hw_params_get_channels_max() ?
> >> At least on capture the US224 should give 2 and the US428 should give 4
> >> as the maximum number of channels.
> >>
> >> It would be handful for me if the attached test program could be ran
> >> against a US428, just for the records ;)
> >>
> >> On my US224 it gives:
> >>
> >> $ snd_hwdep_info hw:3
> >> ---hwdep---
> >> snd_hwdep_info_get_id   (hw:3) = 'USX2Y Loader'
> >> snd_hwdep_info_get_name (hw:3) = '/proc/bus/usb/001/004'
> >> ---pcm (capture)---
> >> snd_pcm_hw_params_get_channels_min(hw:3) = 2
> >> snd_pcm_hw_params_get_channels_max(hw:3) = 2
> >> ---pcm (playback)---
> >> snd_pcm_hw_params_get_channels_min(hw:3) = 2
> >> snd_pcm_hw_params_get_channels_max(hw:3) = 2
> >>
> >> Karsten?
> > 
> >  ./a.out hw:1
> > ---hwdep---
> > snd_hwdep_info_get_id   (hw:1) = 'USX2Y Loader'
> > snd_hwdep_info_get_name (hw:1) = '/proc/bus/usb/004/007'
> > ---pcm (capture)---
> > snd_pcm_hw_params_get_channels_min(hw:1) = 2
> > snd_pcm_hw_params_get_channels_max(hw:1) = 2
> > ---pcm (playback)---
> > snd_pcm_hw_params_get_channels_min(hw:1) = 2
> > snd_pcm_hw_params_get_channels_max(hw:1) = 2
> > 
> > The 428's 4 capture channels are only visible to the raw-usb jack thing.
> > and this is only there for module param nrpacks=1.....
> > 
> > What do you see in your /sys/bus/usb/devices/... ?
> > (Not that I knew how to deduce the sysfs file from the hwdep->name)
> > 
> 
> We're in trouble... there must be another way. What about the shm
> accessed from us428control? Is there supposed to be some watermark or
> something? Maybe even the number of fader-channels, who knoes? I'm
> afraid only you Karsten can grok that ;)

The easiest way would be to add a new hwdep ioctl in usx2y driver to
return the USB ids, etc.  Also, hardcoding the path /proc/xxx is wrong
in the current driver code.  It has to be fixed, too.
You can still add an option to us248control to specify the device type
for making it work with the old driver.

Another way is to use libusb and look for the device with the given
location.  The merit of this is that you need no change in the kernel
although the resultant code might be slightly more complicated.

BTW, the new systems have usually /dev/bus/usb instead of
/proc/bus/usb.  But such path is really system-dependent, and
shouldn't be embedded in the driver code.


Takashi

> 
> 
> Anyway, here what I could grab, anyway:
> 
> # ls -l /sys/bus/usb/drivers/snd-usb-usx2y/
> total 0
> lrwxrwxrwx 1 root root    0 Feb 13 20:45 1-1:1.0 ->
> ../../../../devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0
> --w------- 1 root root 4096 Feb 13 20:45 bind
> lrwxrwxrwx 1 root root    0 Feb 13 20:45 module ->
> ../../../../module/snd_usb_usx2y
> --w------- 1 root root 4096 Feb 13 20:45 new_id
> --w------- 1 root root 4096 Feb 13 20:45 unbind
> 
> # ls -l /sys/bus/usb/devices/1-1/
> total 0
> drwxr-xr-x 3 root root    0 Feb 13 20:50 1-1:1.0
> -rw-r--r-- 1 root root 4096 Feb 13 20:39 bConfigurationValue
> -r--r--r-- 1 root root 4096 Feb 13 20:39 bDeviceClass
> -r--r--r-- 1 root root 4096 Feb 13 20:39 bDeviceProtocol
> -r--r--r-- 1 root root 4096 Feb 13 20:39 bDeviceSubClass
> -r--r--r-- 1 root root 4096 Feb 13 20:39 bMaxPacketSize0
> -r--r--r-- 1 root root 4096 Feb 13 20:39 bMaxPower
> -r--r--r-- 1 root root 4096 Feb 13 20:39 bNumConfigurations
> -r--r--r-- 1 root root 4096 Feb 13 20:39 bNumInterfaces
> -r--r--r-- 1 root root 4096 Feb 13 20:39 bcdDevice
> -r--r--r-- 1 root root 4096 Feb 13 20:39 bmAttributes
> lrwxrwxrwx 1 root root    0 Feb 13 20:39 bus -> ../../../../../bus/usb
> -r--r--r-- 1 root root 4096 Feb 13 20:39 configuration
> -r--r--r-- 1 root root 4096 Feb 13 20:39 devnum
> lrwxrwxrwx 1 root root    0 Feb 13 20:39 driver ->
> ../../../../../bus/usb/drivers/usb
> lrwxrwxrwx 1 root root    0 Feb 13 20:39 ep_00 ->
> ../../../../../class/usb_endpoint/usbdev1.6_ep00
> -r--r--r-- 1 root root 4096 Feb 13 20:39 idProduct
> -r--r--r-- 1 root root 4096 Feb 13 20:39 idVendor
> -r--r--r-- 1 root root 4096 Feb 13 20:39 maxchild
> drwxr-xr-x 2 root root    0 Feb 13 20:39 power
> lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:audio3 ->
> ../../../../../class/sound/audio3
> lrwxrwxrwx 1 root root    0 Feb 13 20:39 sound:controlC3 ->
> ../../../../../class/sound/controlC3
> lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:dmmidi3 ->
> ../../../../../class/sound/dmmidi3
> lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:dsp3 ->
> ../../../../../class/sound/dsp3
> lrwxrwxrwx 1 root root    0 Feb 13 20:39 sound:hwC3D0 ->
> ../../../../../class/sound/hwC3D0
> lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:hwC3D1 ->
> ../../../../../class/sound/hwC3D1
> lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:midi3 ->
> ../../../../../class/sound/midi3
> lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:midiC3D0 ->
> ../../../../../class/sound/midiC3D0
> lrwxrwxrwx 1 root root    0 Feb 13 20:39 sound:mixer3 ->
> ../../../../../class/sound/mixer3
> lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:pcmC3D0c ->
> ../../../../../class/sound/pcmC3D0c
> lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:pcmC3D0p ->
> ../../../../../class/sound/pcmC3D0p
> lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:pcmC3D2c ->
> ../../../../../class/sound/pcmC3D2c
> lrwxrwxrwx 1 root root    0 Feb 13 20:43 sound:pcmC3D2p ->
> ../../../../../class/sound/pcmC3D2p
> -r--r--r-- 1 root root 4096 Feb 13 20:39 speed
> lrwxrwxrwx 1 root root    0 Feb 13 20:39 subsystem -> ../../../../../bus/usb
> --w------- 1 root root 4096 Feb 13 20:39 uevent
> lrwxrwxrwx 1 root root    0 Feb 13 20:39 usb_device:usbdev1.6 ->
> ../../../../../class/usb_device/usbdev1.6
> lrwxrwxrwx 1 root root    0 Feb 13 20:39 usb_endpoint:usbdev1.6_ep00 ->
> ../../../../../class/usb_endpoint/usbdev1.6_ep00
> -r--r--r-- 1 root root 4096 Feb 13 20:39 version
> 
> # cat /sys/bus/usb/devices/1-1/{idVendor,idProduct}
> 1604
> 8005
> 
> 
> Cheers.
> -- 
> rncbc aka Rui Nuno Capela
> rncbc@rncbc.org
> 

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-14 12:59                   ` Takashi Iwai
@ 2007-02-14 14:30                     ` Rui Nuno Capela
  2007-02-14 14:36                       ` Takashi Iwai
  0 siblings, 1 reply; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-14 14:30 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: Karsten Wiese, alsa-devel


> At Tue, 13 Feb 2007 21:01:35 +0000,
> Rui Nuno Capela wrote:
>>
>> Karsten Wiese wrote:
>> >> How about using snd_pcm_hw_params_get_channels_max() ?
>> >> At least on capture the US224 should give 2 and the US428 should give
>> 4
>> >> as the maximum number of channels.
>> >>
>> >> It would be handful for me if the attached test program could be ran
>> >> against a US428, just for the records ;)
>> >>
>> >> On my US224 it gives:
>> >>
>> >> $ snd_hwdep_info hw:3
>> >> ---hwdep---
>> >> snd_hwdep_info_get_id   (hw:3) = 'USX2Y Loader'
>> >> snd_hwdep_info_get_name (hw:3) = '/proc/bus/usb/001/004'
>> >> ---pcm (capture)---
>> >> snd_pcm_hw_params_get_channels_min(hw:3) = 2
>> >> snd_pcm_hw_params_get_channels_max(hw:3) = 2
>> >> ---pcm (playback)---
>> >> snd_pcm_hw_params_get_channels_min(hw:3) = 2
>> >> snd_pcm_hw_params_get_channels_max(hw:3) = 2
>> >>
>> >> Karsten?
>> >
>> >  ./a.out hw:1
>> > ---hwdep---
>> > snd_hwdep_info_get_id   (hw:1) = 'USX2Y Loader'
>> > snd_hwdep_info_get_name (hw:1) = '/proc/bus/usb/004/007'
>> > ---pcm (capture)---
>> > snd_pcm_hw_params_get_channels_min(hw:1) = 2
>> > snd_pcm_hw_params_get_channels_max(hw:1) = 2
>> > ---pcm (playback)---
>> > snd_pcm_hw_params_get_channels_min(hw:1) = 2
>> > snd_pcm_hw_params_get_channels_max(hw:1) = 2
>> >
>> > The 428's 4 capture channels are only visible to the raw-usb jack
>> thing.
>> > and this is only there for module param nrpacks=1.....
>> >
>> > What do you see in your /sys/bus/usb/devices/... ?
>> > (Not that I knew how to deduce the sysfs file from the hwdep->name)
>> >
>>
>> We're in trouble... there must be another way. What about the shm
>> accessed from us428control? Is there supposed to be some watermark or
>> something? Maybe even the number of fader-channels, who knoes? I'm
>> afraid only you Karsten can grok that ;)
>
> The easiest way would be to add a new hwdep ioctl in usx2y driver to
> return the USB ids, etc.  Also, hardcoding the path /proc/xxx is wrong
> in the current driver code.  It has to be fixed, too.
> You can still add an option to us248control to specify the device type
> for making it work with the old driver.
>
> Another way is to use libusb and look for the device with the given
> location.  The merit of this is that you need no change in the kernel
> although the resultant code might be slightly more complicated.
>
> BTW, the new systems have usually /dev/bus/usb instead of
> /proc/bus/usb.  But such path is really system-dependent, and
> shouldn't be embedded in the driver code.
>

Hmmm... I'm coming up with some workaround... yes, I guess the easiest
solution is about adding a new command line option to us428control,
stating which model we're into, either us428 or us224; us428 would be the
default.

This way, for it to work out-of-the-box, and for the US224 at least, one
should just change the respective udev rule, where I think the switch is
made based on the actual product-id on power-up.

What you think?
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-14 14:30                     ` Rui Nuno Capela
@ 2007-02-14 14:36                       ` Takashi Iwai
  2007-02-14 14:57                         ` Rui Nuno Capela
  0 siblings, 1 reply; 54+ messages in thread
From: Takashi Iwai @ 2007-02-14 14:36 UTC (permalink / raw)
  To: Rui Nuno Capela; +Cc: Karsten Wiese, alsa-devel

At Wed, 14 Feb 2007 14:30:17 -0000 (WET),
Rui Nuno Capela wrote:
> 
> 
> > At Tue, 13 Feb 2007 21:01:35 +0000,
> > Rui Nuno Capela wrote:
> >>
> >> Karsten Wiese wrote:
> >> >> How about using snd_pcm_hw_params_get_channels_max() ?
> >> >> At least on capture the US224 should give 2 and the US428 should give
> >> 4
> >> >> as the maximum number of channels.
> >> >>
> >> >> It would be handful for me if the attached test program could be ran
> >> >> against a US428, just for the records ;)
> >> >>
> >> >> On my US224 it gives:
> >> >>
> >> >> $ snd_hwdep_info hw:3
> >> >> ---hwdep---
> >> >> snd_hwdep_info_get_id   (hw:3) = 'USX2Y Loader'
> >> >> snd_hwdep_info_get_name (hw:3) = '/proc/bus/usb/001/004'
> >> >> ---pcm (capture)---
> >> >> snd_pcm_hw_params_get_channels_min(hw:3) = 2
> >> >> snd_pcm_hw_params_get_channels_max(hw:3) = 2
> >> >> ---pcm (playback)---
> >> >> snd_pcm_hw_params_get_channels_min(hw:3) = 2
> >> >> snd_pcm_hw_params_get_channels_max(hw:3) = 2
> >> >>
> >> >> Karsten?
> >> >
> >> >  ./a.out hw:1
> >> > ---hwdep---
> >> > snd_hwdep_info_get_id   (hw:1) = 'USX2Y Loader'
> >> > snd_hwdep_info_get_name (hw:1) = '/proc/bus/usb/004/007'
> >> > ---pcm (capture)---
> >> > snd_pcm_hw_params_get_channels_min(hw:1) = 2
> >> > snd_pcm_hw_params_get_channels_max(hw:1) = 2
> >> > ---pcm (playback)---
> >> > snd_pcm_hw_params_get_channels_min(hw:1) = 2
> >> > snd_pcm_hw_params_get_channels_max(hw:1) = 2
> >> >
> >> > The 428's 4 capture channels are only visible to the raw-usb jack
> >> thing.
> >> > and this is only there for module param nrpacks=1.....
> >> >
> >> > What do you see in your /sys/bus/usb/devices/... ?
> >> > (Not that I knew how to deduce the sysfs file from the hwdep->name)
> >> >
> >>
> >> We're in trouble... there must be another way. What about the shm
> >> accessed from us428control? Is there supposed to be some watermark or
> >> something? Maybe even the number of fader-channels, who knoes? I'm
> >> afraid only you Karsten can grok that ;)
> >
> > The easiest way would be to add a new hwdep ioctl in usx2y driver to
> > return the USB ids, etc.  Also, hardcoding the path /proc/xxx is wrong
> > in the current driver code.  It has to be fixed, too.
> > You can still add an option to us248control to specify the device type
> > for making it work with the old driver.
> >
> > Another way is to use libusb and look for the device with the given
> > location.  The merit of this is that you need no change in the kernel
> > although the resultant code might be slightly more complicated.
> >
> > BTW, the new systems have usually /dev/bus/usb instead of
> > /proc/bus/usb.  But such path is really system-dependent, and
> > shouldn't be embedded in the driver code.
> >
> 
> Hmmm... I'm coming up with some workaround... yes, I guess the easiest
> solution is about adding a new command line option to us428control,
> stating which model we're into, either us428 or us224; us428 would be the
> default.
> 
> This way, for it to work out-of-the-box, and for the US224 at least, one
> should just change the respective udev rule, where I think the switch is
> made based on the actual product-id on power-up.
> 
> What you think?

This is another way I thought of, too.  How compatible between these
two models?  If running with a wrong option doesn't bring fatal errors
like segfault, it'd be surely a good workaround.  Of course, some
consistency check in us428control would be nice to have.


Takashi

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-14 14:36                       ` Takashi Iwai
@ 2007-02-14 14:57                         ` Rui Nuno Capela
  2007-02-14 15:01                           ` Takashi Iwai
  0 siblings, 1 reply; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-14 14:57 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: Karsten Wiese, alsa-devel


> At Wed, 14 Feb 2007 14:30:17 -0000 (WET),
> Rui Nuno Capela wrote:
>>
>> Hmmm... I'm coming up with some workaround... yes, I guess the easiest
>> solution is about adding a new command line option to us428control,
>> stating which model we're into, either us428 or us224; us428 would be
>> the
>> default.
>>
>> This way, for it to work out-of-the-box, and for the US224 at least, one
>> should just change the respective udev rule, where I think the switch is
>> made based on the actual product-id on power-up.
>>
>> What you think?
>
> This is another way I thought of, too.  How compatible between these
> two models?  If running with a wrong option doesn't bring fatal errors
> like segfault, it'd be surely a good workaround.  Of course, some
> consistency check in us428control would be nice to have.
>

AFAICS running the wrong option would only lead to wrong functionality,
specially regarding fader-channel bank layer switching to DAW track
logical mapping. It would be a terrible mess between the logical mapping
between the US-224/428 control surface channels assignment and the actual
tracks on the DAW (e.g. Ardour), and LEDs and what not won't be consistent
of course, but for all else, no, it should not segfault ;)

Cheers.
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-14 14:57                         ` Rui Nuno Capela
@ 2007-02-14 15:01                           ` Takashi Iwai
  2007-02-14 15:08                             ` Rui Nuno Capela
  0 siblings, 1 reply; 54+ messages in thread
From: Takashi Iwai @ 2007-02-14 15:01 UTC (permalink / raw)
  To: Rui Nuno Capela; +Cc: Karsten Wiese, alsa-devel

At Wed, 14 Feb 2007 14:57:24 -0000 (WET),
Rui Nuno Capela wrote:
> 
> 
> > At Wed, 14 Feb 2007 14:30:17 -0000 (WET),
> > Rui Nuno Capela wrote:
> >>
> >> Hmmm... I'm coming up with some workaround... yes, I guess the easiest
> >> solution is about adding a new command line option to us428control,
> >> stating which model we're into, either us428 or us224; us428 would be
> >> the
> >> default.
> >>
> >> This way, for it to work out-of-the-box, and for the US224 at least, one
> >> should just change the respective udev rule, where I think the switch is
> >> made based on the actual product-id on power-up.
> >>
> >> What you think?
> >
> > This is another way I thought of, too.  How compatible between these
> > two models?  If running with a wrong option doesn't bring fatal errors
> > like segfault, it'd be surely a good workaround.  Of course, some
> > consistency check in us428control would be nice to have.
> >
> 
> AFAICS running the wrong option would only lead to wrong functionality,
> specially regarding fader-channel bank layer switching to DAW track
> logical mapping. It would be a terrible mess between the logical mapping
> between the US-224/428 control surface channels assignment and the actual
> tracks on the DAW (e.g. Ardour), and LEDs and what not won't be consistent
> of course, but for all else, no, it should not segfault ;)

OK, then let's go to this way at first.  We can add any possible
better workarounds if found later.


Takashi

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: Q: How to detect which USx2y is connected?
  2007-02-14 15:01                           ` Takashi Iwai
@ 2007-02-14 15:08                             ` Rui Nuno Capela
  0 siblings, 0 replies; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-14 15:08 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: Karsten Wiese, alsa-devel


> At Wed, 14 Feb 2007 14:57:24 -0000 (WET),
> Rui Nuno Capela wrote:
>>
>>
>> > At Wed, 14 Feb 2007 14:30:17 -0000 (WET),
>> > Rui Nuno Capela wrote:
>> >>
>> >> Hmmm... I'm coming up with some workaround... yes, I guess the
>> >> easiest solution is about adding a new command line option to
>> >> us428control, stating which model we're into, either us428 or
>> >> us224; us428 would be the default.
>> >>
>> >> This way, for it to work out-of-the-box, and for the US224 at
>> >> least, one should just change the respective udev rule, where
>> >> I think the switch is made based on the actual product-id on
>> >> power-up.
>> >>
>> >> What you think?
>> >
>> > This is another way I thought of, too.  How compatible between
>> > these two models?  If running with a wrong option doesn't bring
>> > fatal errors like segfault, it'd be surely a good workaround.
>> > Of course, some consistency check in us428control would be nice
>> > to have.
>> >
>>
>> AFAICS running the wrong option would only lead to wrong functionality,
>> specially regarding fader-channel bank layer switching to DAW track
>> logical mapping. It would be a terrible mess between the logical mapping
>> between the US-224/428 control surface channels assignment and the
>> actual tracks on the DAW (e.g. Ardour), and LEDs and what not won't
>> be consistent of course, but for all else, no, it should not segfault ;)
>
> OK, then let's go to this way at first.  We can add any possible
> better workarounds if found later.
>

OK. I'll come up with this later on.

Thanks.
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH] us428control 0.4.5
  2007-02-10 15:37     ` Rui Nuno Capela
  2007-02-13 16:07       ` Q: How to detect which USx2y is connected? Rui Nuno Capela
@ 2007-02-14 22:43       ` Rui Nuno Capela
  2007-02-14 23:23         ` Takashi Iwai
  2007-02-16 17:13       ` [PATCH] us428control 0.4.6 Rui Nuno Capela
  2 siblings, 1 reply; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-14 22:43 UTC (permalink / raw)
  To: alsa-devel; +Cc: Takashi Iwai, Karsten Wiese, Karsten Wiese

[-- Attachment #1: Type: text/plain, Size: 2989 bytes --]

Hi,

This makes it. Here goes my latest tentative (but not necessarily the
last) for a new us428control incarnation, the Tascam US-428/224 control
utility, as for inclusion in the alsa-tools subtree.

Patch to alsa-tools/us428control is attached and a standalone tarball is
also provided through a personal url [1].

Notice of changes:

- A new command line option indicates which interface model is actually
present (-m us428|us224|mixxx) -- nb. the mixxx mode is actually
orthogonal to the us428 and us224 ones, which are in turn both mutually
exclusive, so that more than one -m option can be specified in the same
command line, for compatibility sake; default to us428 mode, of course.

- New BANK switching allows for mapping to a maximum of 32 (!) logical
channel-tracks. This introduces effective BANK L/R button functionality.
Under the default us428 mode it now offers a total of 4 switchable banks
(or layers) for the available 8 fader-channels; while in the new us224
mode, one can switch across 8 banks of 4 fader-channels each. Each
fader-channel maps sequentially (0-31) to a logical track in your DAW,
when connected in a MMC closed-loop. This only applies when not in INPUT
MONITOR mode.

- SELECT, REC, MUTE and SOLO state LEDs/buttons/channel functionality
are now split into INPUT MONITOR and BANK modes, so that each bank
(layer) has its own state. INPUT MONITOR mode gets its own independent
state, which is the only that affects the audio interface channel signal
volume (via respective faders) through the internal hardware mixer --
nb. this special mode deals exclusively to channel/faders 0 and 1 (A/B)
and eventually to 2 and 3 (C/D) which are only available on the US-428
and made accessible through modprobe'ing snd-usb-usx2y with nrpacks=1
and thus made usable via the special hwdep "rawusb" interface mode (ie.
hw:N,2).

- The new track-channel mapping gets effectively signaled through
correspondent but rather experimental MMC MASKED WRITE sub-commands for
RECORD, MUTE and SOLO arming. It is important to note that this late
SOLO sub-command is just some MMC implementation mockup of mine, as I
believe there's no support whatsoever for just that from the official
MIDI MMC RP-013 document (which I don't even have access to date:)
However, I've been prototyping around with this, to my own amusement and
home-brew audio/MIDI sequencer, qtractor [2].

- NULL fader switch LED is now switchable on/off, but not actually of
any usefulness at this time ;)

I have tried to maintain all previous functionality as it were. Of
course I only tested this new stuff over my own US-224, for which it
surely needs the '-m us224' command-line option. This is also proposedto
be specified in a correspondent udev rule, for all this to work
correctly OOTB for the US-224 at least. US-428 owners don't need to
bother ;)

[1] http://www.rncbc.org/usx2y/us428control-0.4.5-5.tar.gz
[2] http://qtractor.sourceforge.net

Cheers.
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org

[-- Attachment #2: us428control-0.4.5-5.patch --]
[-- Type: text/x-patch, Size: 24373 bytes --]

diff -dupr us428control-0.4.4-0/configure.in us428control-0.4.5-5/configure.in
--- us428control-0.4.4-0/configure.in	2006-12-07 14:27:24.000000000 +0000
+++ us428control-0.4.5-5/configure.in	2007-02-09 18:01:59.000000000 +0000
@@ -1,5 +1,5 @@
 AC_INIT(us428control.cc)
-AM_INIT_AUTOMAKE(us428control, 0.4.4)
+AM_INIT_AUTOMAKE(us428control, 0.4.5)
 AC_PROG_CXX
 AC_PROG_INSTALL
 AC_HEADER_STDC
diff -dupr us428control-0.4.4-0/Cus428Midi.cc us428control-0.4.5-5/Cus428Midi.cc
--- us428control-0.4.4-0/Cus428Midi.cc	2006-12-07 14:27:24.000000000 +0000
+++ us428control-0.4.5-5/Cus428Midi.cc	2007-02-13 18:39:14.000000000 +0000
@@ -2,6 +2,7 @@
 /*
  *
  * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
+ * Copyright (c) 2004-2007 by Rui Nuno Capela <rncbc@rncbc.org>
  *
  *   This program is free software; you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License as published by
@@ -140,6 +141,11 @@ void Cus428Midi::ProcessMidiEvents()
 						fprintf(stderr, "LOCATE.\n");
 					OneState->LocateWheel(&data[7]);
 					break;
+				case MMC_CMD_MASKED_WRITE:
+					if (verbose > 1)
+						fprintf(stderr, "MASKED WRITE.\n");
+					OneState->MaskedWrite(&data[6]);
+					break;
 				case MMC_CMD_MMC_RESET:
 					if (verbose > 1)
 						fprintf(stderr, "MMC RESET.\n");
diff -dupr us428control-0.4.4-0/Cus428Midi.h us428control-0.4.5-5/Cus428Midi.h
--- us428control-0.4.4-0/Cus428Midi.h	2006-12-07 14:27:24.000000000 +0000
+++ us428control-0.4.5-5/Cus428Midi.h	2007-02-14 18:20:57.000000000 +0000
@@ -2,6 +2,7 @@
 /*
  *
  * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
+ * Copyright (c) 2004-2007 by Rui Nuno Capela <rncbc@rncbc.org>
  *
  *   This program is free software; you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License as published by
@@ -61,6 +62,11 @@
 #define MMC_CMD_WAIT                    0x7c
 #define MMC_CMD_RESUME                  0x7f
 
+// Available MMC Masked Write sub-commands (information fields).
+#define MMC_CIF_TRACK_RECORD            0x4f
+#define MMC_CIF_TRACK_MUTE              0x62
+#define MMC_CIF_TRACK_SOLO              0x66 // Custom-implementation ;)
+
 
 class Cus428Midi {
 public:
diff -dupr us428control-0.4.4-0/Cus428State.cc us428control-0.4.5-5/Cus428State.cc
--- us428control-0.4.4-0/Cus428State.cc	2006-12-07 14:27:24.000000000 +0000
+++ us428control-0.4.5-5/Cus428State.cc	2007-02-14 18:18:53.000000000 +0000
@@ -3,6 +3,7 @@
  * Controller for Tascam US-X2Y
  *
  * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
+ * Copyright (c) 2004-2007 by Rui Nuno Capela <rncbc@rncbc.org>
  *
  *   This program is free software; you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License as published by
@@ -84,9 +85,9 @@ void Cus428State::SliderChangedTo(int S,
 		V.SetTo(S, New);
 		if (S == eFaderM || !LightIs(eL_Mute0 + S))
 			SendVolume(V);
-	}
-	else
+	} else {
 		UserSliderChangedTo(S, New);
+	}
 }
 
 void Cus428State::UserKnobChangedTo(eKnobs K, bool V)
@@ -132,12 +133,12 @@ void Cus428State::UserKnobChangedTo(eKno
 		break;
 	case eK_SET:
 		if (verbose > 1)
-			printf("Knob SET now %i", V);
+			printf("Knob SET now %i\n", V);
 		bSetLocate = V;
 		break;
 	case eK_LOCATE_L:
 		if (verbose > 1)
-			printf("Knob LOCATE_L now %i", V);
+			printf("Knob LOCATE_L now %i\n", V);
 		if (V) {
 			if (bSetLocate)
 				aWheel_L = aWheel;
@@ -149,7 +150,7 @@ void Cus428State::UserKnobChangedTo(eKno
 		break;
 	case eK_LOCATE_R:
 		if (verbose > 1)
-			printf("Knob LOCATE_R now %i", V);
+			printf("Knob LOCATE_R now %i\n", V);
 		if (V) {
 			if (bSetLocate)
 				aWheel_R = aWheel;
@@ -159,6 +160,118 @@ void Cus428State::UserKnobChangedTo(eKno
 			}
 		}
 		break;
+	case eK_REC:
+		if (verbose > 1)
+			printf("Knob REC now %i\n", V);
+		bSetRecord = V;
+		break;
+	case eK_SOLO:
+		if (verbose > 1)
+			printf("Knob SOLO now %i", V);
+		if (V) {
+			bool bSolo = ! LightIs(eL_Solo);
+			if (StateInputMonitor()) {
+				if (bSolo) {
+					MuteInputMonitor = Light[2].Value;
+					Light[2].Value = SoloInputMonitor;
+				} else {
+					SoloInputMonitor = Light[2].Value;
+					Light[2].Value = MuteInputMonitor;
+				}
+			} else {
+				if (bSolo) {
+					Mute[aBank] = Light[2].Value;
+					Light[2].Value = Solo[aBank];
+				} else {
+					Solo[aBank] = Light[2].Value;
+					Light[2].Value = Mute[aBank];
+				}
+			}
+			LightSet(eL_Solo, bSolo);
+			LightSend();
+		}
+		if (verbose > 1)
+			printf(" Light is %i\n", LightIs(eL_Solo));
+		break;
+	case eK_NULL:
+		if (verbose > 1)
+			printf("Knob NULL now %i", V);
+		if (V) {
+			bool bNull = ! LightIs(eL_Null);
+			LightSet(eL_Null, bNull);
+			LightSend();
+		}
+		if (verbose > 1)
+			printf(" Light is %i\n", LightIs(eL_Null));
+		break;
+	case eK_BANK_L:
+		if (verbose > 1)
+			printf("Knob BANK_L now %i", V);
+		if (V) {
+			if (aBank > 0) {
+				bool bInputMonitor = StateInputMonitor();
+				bool bSolo = LightIs(eL_Solo);
+				if (!bInputMonitor) {
+					Select[aBank] = Light[0].Value;
+					Rec[aBank] = Light[1].Value;
+					if (bSolo) {
+						Solo[aBank] = Light[2].Value;
+					} else {
+						Mute[aBank] = Light[2].Value;
+					}
+				}
+				aBank--;
+				if (!bInputMonitor) {
+					Light[0].Value = Select[aBank];
+					Light[1].Value = Rec[aBank];
+					if (bSolo) {
+						Light[2].Value = Solo[aBank];
+					} else {
+						Light[2].Value = Mute[aBank];
+					}
+				}
+			}
+			LightSet(eL_BankL, (aBank == 0));
+			LightSet(eL_BankR, (aBank == cBanks - 1));
+			LightSend();
+		}
+		if (verbose > 1)
+			printf(" Light is %i\n", LightIs(eL_BankL));
+		break;
+	case eK_BANK_R:
+		if (verbose > 1)
+			printf("Knob BANK_R now %i", V);
+		if (V) {
+			if (aBank < 3) {
+				bool bInputMonitor = StateInputMonitor();
+				bool bSolo = LightIs(eL_Solo);
+				if (!bInputMonitor) {
+					Select[aBank] = Light[0].Value;
+					Rec[aBank] = Light[1].Value;
+					if (bSolo) {
+						Solo[aBank] = Light[2].Value;
+					} else {
+						Mute[aBank] = Light[2].Value;
+					}
+				}
+				aBank++;
+				if (!bInputMonitor) {
+					Light[0].Value = Select[aBank];
+					Light[1].Value = Rec[aBank];
+					if (bSolo) {
+						Light[2].Value = Solo[aBank];
+					} else {
+						Light[2].Value = Mute[aBank];
+					}
+				}
+			}
+			LightSet(eL_BankL, (aBank == 0));
+			LightSet(eL_BankR, (aBank == cBanks - 1));
+			LightSend();
+		}
+		if (verbose > 1)
+			printf(" Light is %i\n", LightIs(eL_BankR));
+		break;
 	default:
 		if (verbose > 1)
 			printf("Knob %i now %i\n", K, V);
@@ -169,12 +282,21 @@ void Cus428State::UserKnobChangedTo(eKno
 
 void Cus428State::KnobChangedTo(eKnobs K, bool V)
 {
-	switch (K & ~(StateInputMonitor() ? 3 : -1)) {
+//	switch (K & ~(StateInputMonitor() ? 3 : -1)) {
+	switch (K & ~3) {
 	case eK_Select0:
 		if (V) {
 			int S = eL_Select0 + (K & 7);
 			Light[eL_Select0 / 8].Value = 0;
 			LightSet(S, !LightIs(S));
+			if (bSetRecord) {
+				int R = eL_Rec0 + (K & 7);
+				LightSet(R, !LightIs(R));
+				if (!StateInputMonitor()) {
+					SendMaskedWrite(MMC_CIF_TRACK_RECORD,
+						Y * aBank + (K & 7), LightIs(R));
+				}
+			}
 			LightSend();
 		}
 		break;
@@ -184,10 +306,27 @@ void Cus428State::KnobChangedTo(eKnobs K
 			LightSet(M, !LightIs(M));
 			LightSend();
 			if (StateInputMonitor()) {
-				usX2Y_volume V = Volume[M - eL_Mute0];
-				if (LightIs(M))
-					V.LH = V.LL = V.RL = V.RH = 0;
-				SendVolume(V);
+				if (LightIs(eL_Solo)) {
+					for (int i = 0; i < 8; ++i) {
+						usX2Y_volume V = Volume[i];
+						if (!LightIs(eL_Mute0 + i) || (MuteInputMonitor & (1 << i)))
+							V.LH = V.LL = V.RL = V.RH = 0;
+						SendVolume(V);
+					}
+				} else {
+					usX2Y_volume V = Volume[M - eL_Mute0];
+					if (LightIs(M))
+						V.LH = V.LL = V.RL = V.RH = 0;
+					SendVolume(V);
+				}
+			} else {
+				if (LightIs(eL_Solo)) {
+					SendMaskedWrite(MMC_CIF_TRACK_SOLO,
+						Y * aBank + (K & 7), LightIs(M));
+				} else {
+					SendMaskedWrite(MMC_CIF_TRACK_MUTE,
+						Y * aBank + (K & 7), LightIs(M));
+				}
 			}
 		}
 		break;
@@ -196,16 +335,33 @@ void Cus428State::KnobChangedTo(eKnobs K
 			if (verbose > 1)
 				printf("Knob InputMonitor now %i", V);
 			if (V) {
-				if (StateInputMonitor()) {
-					SelectInputMonitor = Light[0].Value;
-					MuteInputMonitor = Light[2].Value;
+				bool bInputMonitor = ! StateInputMonitor();
+				if (bInputMonitor) {
+					Select[aBank] = Light[0].Value;
+					Rec[aBank] = Light[1].Value;
+					Light[0].Value = SelectInputMonitor;
+					Light[1].Value = RecInputMonitor;
+					if (LightIs(eL_Solo)) {
+						Solo[aBank] = Light[2].Value;
+						Light[2].Value = SoloInputMonitor;
+					} else {
+						Mute[aBank] = Light[2].Value;
+						Light[2].Value = MuteInputMonitor;
+					}
 				} else {
-					Select = Light[0].Value;
-					Mute = Light[2].Value;
+					SelectInputMonitor = Light[0].Value;
+					RecInputMonitor = Light[1].Value;
+					Light[0].Value = Select[aBank];
+					Light[1].Value = Rec[aBank];
+					if (LightIs(eL_Solo)) {
+						SoloInputMonitor = Light[2].Value;
+						Light[2].Value = Solo[aBank];
+					} else {
+						MuteInputMonitor = Light[2].Value;
+						Light[2].Value = Mute[aBank];
+					}
 				}
-				LightSet(eL_InputMonitor, ! StateInputMonitor());
-				Light[0].Value = StateInputMonitor() ? SelectInputMonitor : Select;
-				Light[2].Value = StateInputMonitor() ? MuteInputMonitor : Mute;
+				LightSet(eL_InputMonitor, bInputMonitor);
 				LightSend();
 			}
 			if (verbose > 1)
@@ -232,8 +388,8 @@ void Cus428State::UserWheelChangedTo(E_I
 		Param = 0x4A;
 		break;
 	case eWheel:
-	        Param = 0x60;
-	        // Update the absolute wheel position.
+		Param = 0x60;
+		// Update the absolute wheel position.
 		WheelDelta((int) ((unsigned char *) us428_ctls)[W]);
 		break;
 	}
@@ -242,21 +398,18 @@ void Cus428State::UserWheelChangedTo(E_I
 
 void Cus428State::WheelChangedTo(E_In84 W, char Diff)
 {
-	if (W == eWheelPan && StateInputMonitor() && Light[0].Value)
-		{
-			int index = 0;
-
-			while( index < 4 && (1 << index) !=  Light[0].Value)
-				index++;
-
-			if (index >= 4)
-				return;
-
-			Volume[index].PanTo(Diff, us428_ctls->Knob(eK_SET));
-			if (!LightIs(eL_Mute0 + index))
-				SendVolume(Volume[index]);
+	if (W == eWheelPan && StateInputMonitor() && Light[0].Value) {
+		int index = 0;
+		while( index < 4 && (1 << index) !=  Light[0].Value)
+			index++;
+		if (index >= 4)
 			return;
-		}
+		Volume[index].PanTo(Diff, us428_ctls->Knob(eK_SET));
+		if (!LightIs(eL_Mute0 + index))
+			SendVolume(Volume[index]);
+		return;
+	}
+
 	UserWheelChangedTo(W, Diff);
 }
 
@@ -265,9 +418,9 @@ void Cus428State::WheelChangedTo(E_In84 
 void Cus428State::LocateWheel ( unsigned char *tc )
 {
 	aWheel  = (60 * 60 * 30) * (int) tc[0]		// hh - hours    [0..23]
-		+ (     60 * 30) * (int) tc[1]		// mm - minutes  [0..59]
-		+ (          30) * (int) tc[2]		// ss - seconds  [0..59]
-		+                  (int) tc[3];		// ff - frames   [0..29]
+			+ (     60 * 30) * (int) tc[1]		// mm - minutes  [0..59]
+			+ (          30) * (int) tc[2]		// ss - seconds  [0..59]
+			+                  (int) tc[3];		// ff - frames   [0..29]
 }
 
 
@@ -426,6 +579,7 @@ void Cus428State::TransportSet ( unsigne
 	TransportSend();
 }
 
+
 // Update transport status lights.
 void Cus428State::TransportSend()
 {
@@ -447,6 +601,7 @@ void Cus428State::TransportSend()
 	LightSend();
 }
 
+
 // Reset MMC state.
 void Cus428State::MmcReset()
 {
@@ -454,13 +609,101 @@ void Cus428State::MmcReset()
 	aWheel = aWheel_L = aWheel_R = 0;
 	aWheelSpeed = 0;
 	bSetLocate = false;
+	bSetRecord = false;
 	uTransport = 0;
 
 	TransportSend();
 	LocateSend();
 }
 
-Cus428StateMixxx::Cus428StateMixxx(struct us428ctls_sharedmem* Pus428ctls_sharedmem):Cus428State(Pus428ctls_sharedmem)
+
+// Process MMC maked-write sub-command.
+void Cus428State::MaskedWrite ( unsigned char *data )
+{
+	// data[0] - sub-command / information field.
+	// data[1] - target track bitmap byte address.
+	// data[2] - bitmap changed mask.
+	// data[3] - bitmap changed value.
+
+	int track = (data[1] > 0 ? (data[1] * 7) : 0) - 5;
+	for (int i = 0; i < 7; ++i) {
+		int mask = (1 << i);
+		if (data[2] & mask) {
+			// Only touch tracks that have the "mask" bit set.
+			int enable = (data[3] & mask);
+			int bank = (track / Y);
+			int N = (track % Y);
+			switch (data[0]) {
+			case MMC_CIF_TRACK_RECORD:
+				if (verbose > 1)
+					fprintf(stderr, "TRACK RECORD(%d, %d).\n", track, enable);
+				if (!StateInputMonitor() && bank >= 0 && bank < cBanks) {
+					if (bank == aBank) {
+						LightSet(eL_Rec0 + N, enable);
+						LightSend();
+					} else if (enable) {
+						Rec[bank] |=  (1 << N);
+					} else {
+						Rec[bank] &= ~(1 << N);
+					}
+				}
+				break;
+			case MMC_CIF_TRACK_MUTE:
+				if (verbose > 1)
+					fprintf(stderr, "TRACK MUTE(%d, %d).\n", track, enable);
+				if (!StateInputMonitor() && bank >= 0 && bank < cBanks) {
+					if (bank == aBank && !LightIs(eL_Solo)) {
+						LightSet(eL_Mute0 + N, enable);
+						LightSend();
+					} else if (enable) {
+						Mute[bank] |=  (1 << N);
+					} else {
+						Mute[bank] &= ~(1 << N);
+					}
+				}
+				break;
+			case MMC_CIF_TRACK_SOLO:
+				if (verbose > 1)
+					fprintf(stderr, "TRACK SOLO(%d, %d).\n", track, enable);
+				if (!StateInputMonitor() && bank >= 0 && bank < cBanks) {
+					if (bank == aBank && LightIs(eL_Solo)) {
+						LightSet(eL_Mute0 + N, enable);
+						LightSend();
+					} else if (enable) {
+						Solo[bank] |=  (1 << N);
+					} else {
+						Solo[bank] &= ~(1 << N);
+					}
+				}
+				break;
+			default:
+				break;
+			}
+		}
+		track++;
+	}
+}
+
+
+// Send own MMC masked-write subcommand.
+void Cus428State::SendMaskedWrite ( unsigned char scmd, int track, bool V )
+{
+	unsigned char data[4];
+	int mask = (1 << (track < 2 ? track + 5 : (track - 2) % 7));
+
+	data[0] = scmd;
+	data[1] = (unsigned char) (track < 2 ? 0 : 1 + (track - 2) / 7);
+	data[2] = (unsigned char) mask;
+	data[3] = (unsigned char) (V ? mask : 0);
+
+	Midi.SendMmcCommand(MMC_CMD_MASKED_WRITE, &data[0], sizeof(data));
+}
+
+
+
+Cus428StateMixxx::Cus428StateMixxx(
+	struct us428ctls_sharedmem* Pus428ctls_sharedmem, int y)
+	: Cus428State(Pus428ctls_sharedmem, y)
 {
 	focus = 0;
 	eq = 0;
@@ -476,26 +719,26 @@ void Cus428StateMixxx::UserKnobChangedTo
 	switch (K) {
 	case eK_BANK_L:
 		if (verbose > 1)
-			printf("Knob BANK_L now %i", V);
+			printf("Knob BANK_L now %i\n", V);
 		if (V) LightSet(eL_BankL, !LightIs(eL_BankL));
 		LightSend();
 		Midi.SendMidiNote(0, 51, V ? 127 : 0);
 		break;
 	case eK_BANK_R:
 		if (verbose > 1)
-			printf("Knob BANK_R now %i", V);
+			printf("Knob BANK_R now %i\n", V);
 		if (V) LightSet(eL_BankR, !LightIs(eL_BankR));
 		LightSend();
 		Midi.SendMidiNote(1, 51, V ? 127 : 0);
 		break;
 	case eK_REW:
 		if (verbose > 1)
-			printf("Knob REW now %i", V);
+			printf("Knob REW now %i\n", V);
 		Midi.SendMidiNote(focus, 60, V ? 127 : 0);
 		break;
 	case eK_FFWD:
 		if (verbose > 1)
-			printf("Knob FFWD now %i", V);
+			printf("Knob FFWD now %i\n", V);
 		Midi.SendMidiNote(focus, 61, V ? 127 : 0);
 		break;
 	case eK_STOP:
@@ -505,17 +748,17 @@ void Cus428StateMixxx::UserKnobChangedTo
 		break;
 	case eK_PLAY:
 		if (verbose > 1)
-			printf("Knob PLAY now %i", V);
+			printf("Knob PLAY now %i\n", V);
 		Midi.SendMidiNote(focus, 63, V ? 127 : 0);
 		break;
 	case eK_RECORD:
 		if (verbose > 1)
-			printf("Knob RECORD now %i", V);
+			printf("Knob RECORD now %i\n", V);
 		Midi.SendMidiNote(focus, 64, V ? 127 : 0);
 		break;
 	case eK_LOW:
 		if (verbose > 1)
-			printf("Knob LOW now %i", V);
+			printf("Knob LOW now %i\n", V);
 		if (V)
 			{
 				eq = 0;
@@ -528,7 +771,7 @@ void Cus428StateMixxx::UserKnobChangedTo
 		break;
 	case eK_LOWMID:
 		if (verbose > 1)
-			printf("Knob LOWMID now %i", V);
+			printf("Knob LOWMID now %i\n", V);
 		if (V)
 			{
 				eq = 1;
@@ -541,7 +784,7 @@ void Cus428StateMixxx::UserKnobChangedTo
 		break;
 	case eK_HIMID:
 		if (verbose > 1)
-			printf("Knob HIMID now %i", V);
+			printf("Knob HIMID now %i\n", V);
 		if (V)
 			{
 				eq = 2;
@@ -554,7 +797,7 @@ void Cus428StateMixxx::UserKnobChangedTo
 		break;
 	case eK_HIGH:
 		if (verbose > 1)
-			printf("Knob HIGH now %i", V);
+			printf("Knob HIGH now %i\n", V);
 		if (V)
 			{
 				eq = 3;
@@ -567,19 +810,19 @@ void Cus428StateMixxx::UserKnobChangedTo
 		break;
 	case eK_SET:
 		if (verbose > 1)
-			printf("Knob SET now %i", V);
+			printf("Knob SET now %i\n", V);
 		Midi.SendMidiNote(focus, 65, V ? 127 : 0);
 		break;
 	case eK_LOCATE_L:
 		if (verbose > 1)
-			printf("Knob LOCATE_L now %i", V);
+			printf("Knob LOCATE_L now %i\n", V);
 		if (V) {
 			focus = 0;
 		}
 		break;
 	case eK_LOCATE_R:
 		if (verbose > 1)
-			printf("Knob LOCATE_R now %i", V);
+			printf("Knob LOCATE_R now %i\n", V);
 		if (V) {
 			focus = 1;
 		}
diff -dupr us428control-0.4.4-0/Cus428State.h us428control-0.4.5-5/Cus428State.h
--- us428control-0.4.4-0/Cus428State.h	2006-12-07 14:27:24.000000000 +0000
+++ us428control-0.4.5-5/Cus428State.h	2007-02-14 18:15:55.000000000 +0000
@@ -3,6 +3,7 @@
  * Controller for Tascam US-X2Y
  *
  * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
+ * Copyright (c) 2004-2007 by Rui Nuno Capela <rncbc@rncbc.org>
  *
  *   This program is free software; you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License as published by
@@ -24,29 +25,50 @@
 
 #include "Cus428_ctls.h"
 
-class Cus428State: public us428_lights{
+class Cus428State: public us428_lights
+{
 public:
-	Cus428State(struct us428ctls_sharedmem* Pus428ctls_sharedmem)
-		:us428ctls_sharedmem(Pus428ctls_sharedmem)
+
+	// Constructor.
+	Cus428State(struct us428ctls_sharedmem* Pus428ctls_sharedmem, int y = 8)
+		:us428ctls_sharedmem(Pus428ctls_sharedmem),Y(y)
+		,us428_ctls(0)
 		,MuteInputMonitor(0)
-		,Mute(0)
+		,SoloInputMonitor(0)
+		,RecInputMonitor(0)
 		,SelectInputMonitor(0)
-		,Select(0)
-		,us428_ctls(0)
+		,aBank(0)
+		,cBanks(32 / y)
 		,W0(0)
 		,aWheel(0)
 		,aWheel_L(0)
 		,aWheel_R(0)
 		,bSetLocate(false)
+		,bSetRecord(false)
 		,uTransport(0)
 		,aWheelSpeed(0)
 	{
+		Mute = new unsigned char [cBanks];
+		Solo = new unsigned char [cBanks];
+		Rec = new unsigned char [cBanks];
+		Select = new unsigned char [cBanks];
+		for (int i = 0; i < cBanks; ++i)
+			Mute[i] = Solo[i] = Rec[i] = Select[i] = 0;
 		init_us428_lights();
 		for (int v = 0; v < 5; ++v) {
 			Volume[v].init(v);
 		}
 	}
-	enum eKnobs{
+
+	// Destructor.
+	virtual ~Cus428State() {
+		delete Select;
+		delete Rec;
+		delete Solo;
+		delete Mute;
+	}
+
+	enum eKnobs {
 		eK_RECORD =	72,
 		eK_PLAY,
 		eK_STOP,
@@ -84,6 +106,7 @@ public:
 		eK_F2,
 		eK_F3,
 	};
+
 	void InitDevice(void);
 
 	void KnobChangedTo(eKnobs K, bool V);
@@ -108,9 +131,13 @@ public:
 	void TransportToggle(unsigned char T);
 	void TransportSet(unsigned char T, bool V);
 	void TransportSend();
+	// Process masked-write sub-command.
+	void MaskedWrite(unsigned char *data);
 	// Reset internal MMC state.
 	void MmcReset();
+
 protected:
+
 	void SendVolume(usX2Y_volume &V);
 	struct us428ctls_sharedmem* us428ctls_sharedmem;
 	bool StateInputMonitor() {
@@ -124,13 +151,19 @@ protected:
 	void WheelShuttle(int dW);
 	// Get the curent wheel timecode.
 	void LocateTimecode(unsigned char *tc);
+	// Send own MMC masked-write subcommand.
+	void SendMaskedWrite(unsigned char scmd, int track, bool V);
 
 	usX2Y_volume_t	Volume[5];
-	char		MuteInputMonitor,
-		Mute,
-		SelectInputMonitor,
-		Select;
 	Cus428_ctls	*us428_ctls;
+	// To hold channel light-mode states.
+	unsigned char
+		MuteInputMonitor,	*Mute,
+		SoloInputMonitor,	*Solo,
+		RecInputMonitor,	*Rec,
+		SelectInputMonitor,	*Select;
+	// The current selected bank, maximum number of bank/layers.
+	int aBank, cBanks;
 	// Differential wheel tracking.
 	int W0;
 	// Some way to convert wheel (absolute) position into hh:mm:ss:ff:fr
@@ -140,16 +173,20 @@ protected:
 	int aWheel_R;
 	// SET knob state.
 	bool bSetLocate;
+	// REC knob state.
+	bool bSetRecord;
 	// Last/current transport state.
 	unsigned char uTransport;
 	// Shuttle wheel absolute speed.
 	int aWheelSpeed;
+	// The official number of faders (channels per bank)
+	int Y;
 };
 
 
 class Cus428StateMixxx: public Cus428State{
 public:
-	Cus428StateMixxx(struct us428ctls_sharedmem* Pus428ctls_sharedmem);
+	Cus428StateMixxx(struct us428ctls_sharedmem* Pus428ctls_sharedmem, int y);
 	void UserKnobChangedTo(eKnobs K, bool V);
 	void UserSliderChangedTo(int S, unsigned char New);
 	void UserWheelChangedTo(E_In84 W, char Diff);
diff -dupr us428control-0.4.4-0/us428control.cc us428control-0.4.5-5/us428control.cc
--- us428control-0.4.4-0/us428control.cc	2006-12-07 14:27:24.000000000 +0000
+++ us428control-0.4.5-5/us428control.cc	2007-02-14 18:38:07.000000000 +0000
@@ -3,6 +3,7 @@
  * Controller for Tascam US-X2Y
  *
  * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
+ * Copyright (c) 2004-2007 by Rui Nuno Capela <rncbc@rncbc.org>
  *
  *   This program is free software; you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License as published by
@@ -63,7 +64,7 @@ static void usage(void)
 	printf("Tascam US-428 Control\n");
 	printf("version %s\n", VERSION);
 	printf("usage: "PROGNAME" [-v verbosity_level 0..2] [-c card] [-D device] [-u usb-device] [-m mode]\n");
-	printf("mode is one of (native, mixxx)\n");
+	printf("mode is one of (us224, us428, mixxx)\n");
 }
 /*
  * check the name id of the given hwdep handle
@@ -85,7 +86,7 @@ static int check_hwinfo(snd_hwdep_t *hw,
 	return 0; /* ok */
 }
 
-int US428Control(const char* DevName, int mode)
+int US428Control(const char* DevName, int mode, int y)
 {
 	snd_hwdep_t		*hw;
 	int			err;
@@ -95,7 +96,8 @@ int US428Control(const char* DevName, in
 	int npfd, pollrc;
 
 	if ((err = snd_hwdep_open(&hw, DevName, O_RDWR)) < 0) {
-		error("cannot open hwdep %s\n", DevName);
+		if (verbose > 1)
+			error("cannot open hwdep %s\n", DevName);
 		return err;
 	}
 
@@ -105,6 +107,9 @@ int US428Control(const char* DevName, in
 		return -ENODEV;
 	}
 
+	if (verbose > 0)
+		fprintf(stderr, PROGNAME ": US-X2Y-compatible card found on hwdep %s\n", DevName);
+
 	Midi.CreatePorts();
 
 	npfd = snd_seq_poll_descriptors_count(Midi.Seq, POLLIN) + 1;
@@ -118,11 +123,12 @@ int US428Control(const char* DevName, in
 		snd_hwdep_close(hw);
 		return -ENOMEM;
 	}
+
 	us428ctls_sharedmem->CtlSnapShotRed = us428ctls_sharedmem->CtlSnapShotLast;
 	if (mode == 1)
-		OneState = new Cus428StateMixxx(us428ctls_sharedmem);
+		OneState = new Cus428StateMixxx(us428ctls_sharedmem, y);
 	else
-		OneState = new Cus428State(us428ctls_sharedmem);
+		OneState = new Cus428State(us428ctls_sharedmem, y);
 
 	OneState->InitDevice();
 
@@ -131,7 +137,7 @@ int US428Control(const char* DevName, in
 			if (verbose > 1 || pfds[0].revents & (POLLERR|POLLHUP))
 				printf("poll returned 0x%X\n", pfds[0].revents);
 			if (pfds[0].revents & (POLLERR|POLLHUP))
-				return -ENXIO;
+				return 0; /* -ENXIO; */
 			int Last = us428ctls_sharedmem->CtlSnapShotLast;
 			if (verbose > 1)
 				printf("Last is %i\n", Last);
@@ -158,6 +164,7 @@ int US428Control(const char* DevName, in
 int main (int argc, char *argv[])
 {
 	int c;
+	int y = 8;
 	int mode = 0;
 	int card = -1;
 	char	*device_name = NULL,
@@ -179,6 +186,12 @@ int main (int argc, char *argv[])
 			verbose = atoi(optarg);
 			break;
 		case 'm':
+			if (!strcmp(optarg, "us224"))
+				y = 4;
+			else
+			if (!strcmp(optarg, "us428"))
+				y = 8;
+			else
 			if (!strcmp(optarg, "mixxx"))
 				mode = 1;
 			break;
@@ -201,24 +214,28 @@ int main (int argc, char *argv[])
 		}
 	}
 	if (device_name) {
-		return US428Control(device_name, mode) != 0;
+		return US428Control(device_name, mode, y) != 0;
 	}
 	if (card >= 0) {
 		sprintf(name, "hw:%d", card);
-		return US428Control(name, mode) != 0;
+		return US428Control(name, mode, y) != 0;
 	}
 
 	/* probe the all cards */
 	for (c = 0; c < SND_CARDS; c++) {
 		//	verbose--;
 		sprintf(name, "hw:%d", c);
-		if (!US428Control(name, mode))
+		if (US428Control(name, mode, y) == 0) {
 			card = c;
+			break;
+		}
 	}
+
 	if (card < 0) {
 		fprintf(stderr, PROGNAME ": no US-X2Y-compatible cards found\n");
 		return 1;
 	}
+
 	return 0;
 }
 

[-- Attachment #3: Type: text/plain, Size: 345 bytes --]

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

[-- Attachment #4: Type: text/plain, Size: 161 bytes --]

_______________________________________________
Alsa-devel mailing list
Alsa-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH] us428control 0.4.5
  2007-02-14 22:43       ` [PATCH] us428control 0.4.5 Rui Nuno Capela
@ 2007-02-14 23:23         ` Takashi Iwai
  0 siblings, 0 replies; 54+ messages in thread
From: Takashi Iwai @ 2007-02-14 23:23 UTC (permalink / raw)
  To: Rui Nuno Capela; +Cc: Karsten Wiese, Karsten Wiese, alsa-devel

At Wed, 14 Feb 2007 22:43:27 +0000,
Rui Nuno Capela wrote:
> 
> Hi,
> 
> This makes it. Here goes my latest tentative (but not necessarily the
> last) for a new us428control incarnation, the Tascam US-428/224 control
> utility, as for inclusion in the alsa-tools subtree.

Great.  Now merged to ALSA HG tree.
Thanks.


Takashi

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH] us428control 0.4.6
  2007-02-10 15:37     ` Rui Nuno Capela
  2007-02-13 16:07       ` Q: How to detect which USx2y is connected? Rui Nuno Capela
  2007-02-14 22:43       ` [PATCH] us428control 0.4.5 Rui Nuno Capela
@ 2007-02-16 17:13       ` Rui Nuno Capela
  2007-02-16 17:46         ` Takashi Iwai
  2 siblings, 1 reply; 54+ messages in thread
From: Rui Nuno Capela @ 2007-02-16 17:13 UTC (permalink / raw)
  To: alsa-devel; +Cc: Takashi Iwai, Karsten Wiese, Karsten Wiese

[-- Attachment #1: Type: text/plain, Size: 495 bytes --]

Hi again,

After some more fun playing with my US-224, properly fitted to the new
command-line `us428control -m us224`, I'll take this chance and submit
this minor maintenance patch, yet bumping us428control version to 0.4.6
already.

Applies to alsa-tools/us428control, on top of that last one and already
applied to alsa-tools hg tree. Standalone tarball is also provided [1].

[1] http://www.rncbc.org/usx2y/us428control-0.4.6-2.tar.gz

Cheers.
-- 
rncbc aka Rui Nuno Capela
rncbc@rncbc.org


[-- Attachment #2: us428control-0.4.6-2.patch --]
[-- Type: text/x-patch, Size: 4426 bytes --]

diff -dupr us428control-0.4.5-5/configure us428control-0.4.6-2/configure
--- us428control-0.4.5-5/configure	2007-02-09 18:19:26.000000000 +0000
+++ us428control-0.4.6-2/configure	2007-02-16 16:26:35.000000000 +0000
@@ -1994,7 +1994,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE=us428control
- VERSION=0.4.5
+ VERSION=0.4.6
 
 
 cat >>confdefs.h <<_ACEOF
diff -dupr us428control-0.4.5-5/configure.in us428control-0.4.6-2/configure.in
--- us428control-0.4.5-5/configure.in	2007-02-09 18:01:59.000000000 +0000
+++ us428control-0.4.6-2/configure.in	2007-02-16 16:26:11.000000000 +0000
@@ -1,5 +1,5 @@
 AC_INIT(us428control.cc)
-AM_INIT_AUTOMAKE(us428control, 0.4.5)
+AM_INIT_AUTOMAKE(us428control, 0.4.6)
 AC_PROG_CXX
 AC_PROG_INSTALL
 AC_HEADER_STDC
diff -dupr us428control-0.4.5-5/Cus428State.cc us428control-0.4.6-2/Cus428State.cc
--- us428control-0.4.5-5/Cus428State.cc	2007-02-14 18:18:53.000000000 +0000
+++ us428control-0.4.6-2/Cus428State.cc	2007-02-16 16:26:11.000000000 +0000
@@ -207,68 +207,14 @@ void Cus428State::UserKnobChangedTo(eKno
 	case eK_BANK_L:
 		if (verbose > 1)
 			printf("Knob BANK_L now %i", V);
-		if (V) {
-			if (aBank > 0) {
-				bool bInputMonitor = StateInputMonitor();
-				bool bSolo = LightIs(eL_Solo);
-				if (!bInputMonitor) {
-					Select[aBank] = Light[0].Value;
-					Rec[aBank] = Light[1].Value;
-					if (bSolo) {
-						Solo[aBank] = Light[2].Value;
-					} else {
-						Mute[aBank] = Light[2].Value;
-					}
-				}
-				aBank--;
-				if (!bInputMonitor) {
-					Light[0].Value = Select[aBank];
-					Light[1].Value = Rec[aBank];
-					if (bSolo) {
-						Light[2].Value = Solo[aBank];
-					} else {
-						Light[2].Value = Mute[aBank];
-					}
-				}
-			}
-			LightSet(eL_BankL, (aBank == 0));
-			LightSet(eL_BankR, (aBank == cBanks - 1));
-			LightSend();
-		}
+		if (V) BankSet(aBank - 1);
 		if (verbose > 1)
 			printf(" Light is %i\n", LightIs(eL_BankL));
 		break;
 	case eK_BANK_R:
 		if (verbose > 1)
 			printf("Knob BANK_R now %i", V);
-		if (V) {
-			if (aBank < 3) {
-				bool bInputMonitor = StateInputMonitor();
-				bool bSolo = LightIs(eL_Solo);
-				if (!bInputMonitor) {
-					Select[aBank] = Light[0].Value;
-					Rec[aBank] = Light[1].Value;
-					if (bSolo) {
-						Solo[aBank] = Light[2].Value;
-					} else {
-						Mute[aBank] = Light[2].Value;
-					}
-				}
-				aBank++;
-				if (!bInputMonitor) {
-					Light[0].Value = Select[aBank];
-					Light[1].Value = Rec[aBank];
-					if (bSolo) {
-						Light[2].Value = Solo[aBank];
-					} else {
-						Light[2].Value = Mute[aBank];
-					}
-				}
-			}
-			LightSet(eL_BankL, (aBank == 0));
-			LightSet(eL_BankR, (aBank == cBanks - 1));
-			LightSend();
-		}
+		if (V) BankSet(aBank + 1);
 		if (verbose > 1)
 			printf(" Light is %i\n", LightIs(eL_BankR));
 		break;
@@ -602,10 +548,48 @@ void Cus428State::TransportSend()
 }
 
 
+// Set new bank layer state.
+void Cus428State::BankSet( int B )
+{
+	if (B >= 0 && B < cBanks) {
+		if (!StateInputMonitor()) {
+			bool bSolo = LightIs(eL_Solo);
+			Select[aBank] = Light[0].Value;
+			Rec[aBank] = Light[1].Value;
+			if (bSolo) {
+				Solo[aBank] = Light[2].Value;
+			} else {
+				Mute[aBank] = Light[2].Value;
+			}
+			Light[0].Value = Select[B];
+			Light[1].Value = Rec[B];
+			if (bSolo) {
+				Light[2].Value = Solo[B];
+			} else {
+				Light[2].Value = Mute[B];
+			}
+		}
+		aBank = B;
+	}
+
+	BankSend();
+}
+
+
+// Update bank status lights.
+void Cus428State::BankSend()
+{
+	LightSet(eL_BankL, (aBank == 0));
+	LightSet(eL_BankR, (aBank == cBanks - 1));
+	LightSend();
+}
+
+
 // Reset MMC state.
 void Cus428State::MmcReset()
 {
 	W0 = 0;
+	aBank = 0;
 	aWheel = aWheel_L = aWheel_R = 0;
 	aWheelSpeed = 0;
 	bSetLocate = false;
@@ -614,6 +598,7 @@ void Cus428State::MmcReset()
 
 	TransportSend();
 	LocateSend();
+	BankSend();
 }
 
 
diff -dupr us428control-0.4.5-5/Cus428State.h us428control-0.4.6-2/Cus428State.h
--- us428control-0.4.5-5/Cus428State.h	2007-02-14 18:15:55.000000000 +0000
+++ us428control-0.4.6-2/Cus428State.h	2007-02-16 16:26:11.000000000 +0000
@@ -131,6 +131,9 @@ public:
 	void TransportToggle(unsigned char T);
 	void TransportSet(unsigned char T, bool V);
 	void TransportSend();
+	// Set bank layer state.
+	void BankSet(int B);
+	void BankSend();
 	// Process masked-write sub-command.
 	void MaskedWrite(unsigned char *data);
 	// Reset internal MMC state.
Only in us428control-0.4.6-2: .deps

[-- Attachment #3: Type: text/plain, Size: 345 bytes --]

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

[-- Attachment #4: Type: text/plain, Size: 161 bytes --]

_______________________________________________
Alsa-devel mailing list
Alsa-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH] us428control 0.4.6
  2007-02-16 17:13       ` [PATCH] us428control 0.4.6 Rui Nuno Capela
@ 2007-02-16 17:46         ` Takashi Iwai
  0 siblings, 0 replies; 54+ messages in thread
From: Takashi Iwai @ 2007-02-16 17:46 UTC (permalink / raw)
  To: Rui Nuno Capela; +Cc: Karsten Wiese, Karsten Wiese, alsa-devel

At Fri, 16 Feb 2007 17:13:53 +0000,
Rui Nuno Capela wrote:
> 
> Hi again,
> 
> After some more fun playing with my US-224, properly fitted to the new
> command-line `us428control -m us224`, I'll take this chance and submit
> this minor maintenance patch, yet bumping us428control version to 0.4.6
> already.
> 
> Applies to alsa-tools/us428control, on top of that last one and already
> applied to alsa-tools hg tree. Standalone tarball is also provided [1].

Applied to HG tree.  Thanks.


Takashi

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
                   ` (11 preceding siblings ...)
  2007-02-06 19:38 ` Chuck Harding
@ 2007-02-27 17:39 ` K.R. Foley
  2007-02-28  8:11   ` Ingo Molnar
  2007-04-26 13:57 ` v2.6.21-rt1 Ingo Molnar
  13 siblings, 1 reply; 54+ messages in thread
From: K.R. Foley @ 2007-02-27 17:39 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

Ingo Molnar wrote:
> i have released the v2.6.20-rt1 kernel, which can be downloaded from the 
> usual place:
> 

I have a couple of questions regarding priorities of the softirqs, IRQ
handlers, etc.

With some exceptions, back in 2.6.18 and prior patches the IRQ threads
were prioritized between 50 and 25 and the most of the softirqs were
prioritized at 1? In newer patches it looks like they are all
prioritized at 50?

I was just curious what went into making these choices? I am just trying
to better understand these decisions.

Thanks,

-- 
   kr

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-27 17:39 ` K.R. Foley
@ 2007-02-28  8:11   ` Ingo Molnar
  2007-02-28 10:16     ` K.R. Foley
  0 siblings, 1 reply; 54+ messages in thread
From: Ingo Molnar @ 2007-02-28  8:11 UTC (permalink / raw)
  To: K.R. Foley; +Cc: linux-kernel, linux-rt-users


* K.R. Foley <kr@cybsft.com> wrote:

> Ingo Molnar wrote:
> > i have released the v2.6.20-rt1 kernel, which can be downloaded from the 
> > usual place:
> > 
> 
> I have a couple of questions regarding priorities of the softirqs, IRQ 
> handlers, etc.
> 
> With some exceptions, back in 2.6.18 and prior patches the IRQ threads 
> were prioritized between 50 and 25 and the most of the softirqs were 
> prioritized at 1? In newer patches it looks like they are all 
> prioritized at 50?
> 
> I was just curious what went into making these choices? I am just 
> trying to better understand these decisions.

The basically random order-of-request_irq() prioritization was causing 
problems (it worked for some but didnt work for others), so i got rid of 
trying to auto-guess some priority order. Also, now that we've got 
tools/scripts like set_kthread_prio and rtprio it seemed more consistent 
to just not attempt to prioritize interrupts and softirqs at all, but to 
keep them all 'in the middle' of the RT priority range.

	Ingo

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.20-rt1, yum/rpm
  2007-02-28  8:11   ` Ingo Molnar
@ 2007-02-28 10:16     ` K.R. Foley
  0 siblings, 0 replies; 54+ messages in thread
From: K.R. Foley @ 2007-02-28 10:16 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

Ingo Molnar wrote:
> * K.R. Foley <kr@cybsft.com> wrote:
> 
>> Ingo Molnar wrote:
>>> i have released the v2.6.20-rt1 kernel, which can be downloaded from the 
>>> usual place:
>>>
>> I have a couple of questions regarding priorities of the softirqs, IRQ 
>> handlers, etc.
>>
>> With some exceptions, back in 2.6.18 and prior patches the IRQ threads 
>> were prioritized between 50 and 25 and the most of the softirqs were 
>> prioritized at 1? In newer patches it looks like they are all 
>> prioritized at 50?
>>
>> I was just curious what went into making these choices? I am just 
>> trying to better understand these decisions.
> 
> The basically random order-of-request_irq() prioritization was causing 
> problems (it worked for some but didnt work for others), so i got rid of 
> trying to auto-guess some priority order. Also, now that we've got 
> tools/scripts like set_kthread_prio and rtprio it seemed more consistent 
> to just not attempt to prioritize interrupts and softirqs at all, but to 
> keep them all 'in the middle' of the RT priority range.
> 
> 	Ingo
> 

Thanks.

-- 
	kr

^ permalink raw reply	[flat|nested] 54+ messages in thread

* v2.6.21-rt1
  2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
                   ` (12 preceding siblings ...)
  2007-02-27 17:39 ` K.R. Foley
@ 2007-04-26 13:57 ` Ingo Molnar
  2007-04-26 20:53   ` v2.6.21-rt1 Free Ekanayaka
                     ` (2 more replies)
  13 siblings, 3 replies; 54+ messages in thread
From: Ingo Molnar @ 2007-04-26 13:57 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-rt-users


i have released the v2.6.20-rt1 kernel, which can be downloaded from the 
usual place:

    http://redhat.com/~mingo/realtime-preempt/
 
more info about the -rt patchset can be found in the RT wiki:
 
    http://rt.wiki.kernel.org

This is a fixes-only release.

to build a 2.6.21-rt1 tree, the following patches should be applied:

  http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2
  http://redhat.com/~mingo/realtime-preempt/patch-2.6.21-rt1

	Ingo

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.21-rt1
  2007-04-26 13:57 ` v2.6.21-rt1 Ingo Molnar
@ 2007-04-26 20:53   ` Free Ekanayaka
  2007-05-03 19:16   ` v2.6.21-rt1 - bug in asm-mips/atomic.h Tim Bird
  2007-05-17 18:46   ` v2.6.21-rt1 emin ak
  2 siblings, 0 replies; 54+ messages in thread
From: Free Ekanayaka @ 2007-04-26 20:53 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

Hi,

|--==> Ingo Molnar writes:

  IM> i have released the v2.6.20-rt1 kernel, which can be downloaded from the 
  IM> usual place:

  IM>     http://redhat.com/~mingo/realtime-preempt/
 
  IM> more info about the -rt patchset can be found in the RT wiki:
 
  IM>     http://rt.wiki.kernel.org

  IM> This is a fixes-only release.

  IM> to build a 2.6.21-rt1 tree, the following patches should be applied:

  IM>   http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2
  IM>   http://redhat.com/~mingo/realtime-preempt/patch-2.6.21-rt1

I've tested the patch on a Pavillon zv5000 laptop (amd64) and
apparently the kernel still hangs when one of the script in the
initramfs [0] tries to run udevsettle.

Booting with noapic doesn't seem to help, and differently from the
2.6.21-rc6-rt0 release [1] this time the kernel won't boot even with
qemu.

Here's the config I used:

http://people.64studio.com/~free/config-2.6.21-rt1

Ciao,

Free

[0] http://people.64studio.com/~free/udev
[1] http://www.mail-archive.com/linux-rt-users@vger.kernel.org/msg00332.html

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.21-rt1 - bug in asm-mips/atomic.h
  2007-04-26 13:57 ` v2.6.21-rt1 Ingo Molnar
  2007-04-26 20:53   ` v2.6.21-rt1 Free Ekanayaka
@ 2007-05-03 19:16   ` Tim Bird
  2007-05-03 19:35     ` v2.6.21-rt1 - mips compile bugs Tim Bird
  2007-05-17 18:46   ` v2.6.21-rt1 emin ak
  2 siblings, 1 reply; 54+ messages in thread
From: Tim Bird @ 2007-05-03 19:16 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

Ingo Molnar wrote:
> i have released the v2.6.20-rt1 kernel...
Ingo,

There appears to be a bug in the patch for include/asm-mips/atomic.h
In the hunk for line 554, it has 2 #endifs.
I think it should only have one.

A portion of the patch reads:

Index: new-linux/include/asm-mips/atomic.h
===================================================================
--- new-linux.orig/include/asm-mips/atomic.h	2007-04-25 20:08:32.000000000 -0700
+++ new-linux/include/asm-mips/atomic.h	2007-04-26 16:15:14.000000000 -0700
@@ -545,7 +554,9 @@
 		: "=&r" (result), "=&r" (temp), "=m" (v->counter)
 		: "Ir" (i), "m" (v->counter)
 		: "memory");
-	} else {
+	}
+#if !defined(CONFIG_NO_SPINLOCK) && !defined(CONFIG_PREEMPT_RT)
+	else {
 		unsigned long flags;

 		raw_local_irq_save(flags);
@@ -554,6 +565,8 @@
 		v->counter = result;
 		raw_local_irq_restore(flags);
 	}
+#endif
+#endif

 	smp_mb();


When I applied the patch to 2.6.21 and tried to compile for MIPS I got:
  CHK     include/linux/utsrelease.h
  CC      arch/mips/kernel/asm-offsets.s
In file included from /home/tbird/work/alp-3.0/alp-linux/include/linux/rt_lock.h:14,
                 from /home/tbird/work/alp-3.0/alp-linux/include/linux/spinlock.h:116,
                 from /home/tbird/work/alp-3.0/alp-linux/include/linux/capability.h:45,
                 from /home/tbird/work/alp-3.0/alp-linux/include/linux/sched.h:47,
                 from /home/tbird/work/alp-3.0/alp-linux/arch/mips/kernel/asm-offsets.c:14:
include2/asm/atomic.h:571: error: expected '(' before 'volatile'
include2/asm/atomic.h:573: error: expected identifier or '(' before 'return'
include2/asm/atomic.h:574: error: expected identifier or '(' before '}' token
include2/asm/atomic.h:576: error: expected declaration specifiers or '...' before 'atomic64_t'
include2/asm/atomic.h: In function 'atomic64_sub_return':
include2/asm/atomic.h:593: error: 'v' undeclared (first use in this function)
include2/asm/atomic.h:593: error: (Each undeclared identifier is reported only once
include2/asm/atomic.h:593: error: for each function it appears in.)
include2/asm/atomic.h:585: error: invalid lvalue in asm output 2
include2/asm/atomic.h:585: error: memory input 4 is not directly addressable
include2/asm/atomic.h:599: error: invalid lvalue in asm output 2
include2/asm/atomic.h:599: error: memory input 4 is not directly addressable
include2/asm/atomic.h: At top level:
include2/asm/atomic.h:638: error: expected declaration specifiers or '...' before 'atomic64_t'
include2/asm/atomic.h: In function 'atomic64_sub_if_positive':
include2/asm/atomic.h:659: error: 'v' undeclared (first use in this function)
include2/asm/atomic.h:647: error: invalid lvalue in asm output 2
include2/asm/atomic.h:647: error: memory input 4 is not directly addressable
include2/asm/atomic.h:665: error: invalid lvalue in asm output 2
include2/asm/atomic.h:665: error: memory input 4 is not directly addressable
In file included from /home/tbird/work/alp-3.0/alp-linux/include/linux/rt_lock.h:14,
                 from /home/tbird/work/alp-3.0/alp-linux/include/linux/spinlock.h:116,
                 from /home/tbird/work/alp-3.0/alp-linux/include/linux/capability.h:45,
                 from /home/tbird/work/alp-3.0/alp-linux/include/linux/sched.h:47,
                 from /home/tbird/work/alp-3.0/alp-linux/arch/mips/kernel/asm-offsets.c:14:
include2/asm/atomic.h:779:2: error: #endif without #if

After removing the second #endif in the second hunk above, things compiled better.
 -- Tim

=============================
Tim Bird
Architecture Group Chair, CE Linux Forum
Senior Staff Engineer, Sony Electronics
=============================


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.21-rt1 - mips compile bugs
  2007-05-03 19:16   ` v2.6.21-rt1 - bug in asm-mips/atomic.h Tim Bird
@ 2007-05-03 19:35     ` Tim Bird
  0 siblings, 0 replies; 54+ messages in thread
From: Tim Bird @ 2007-05-03 19:35 UTC (permalink / raw)
  To: Tim Bird; +Cc: Ingo Molnar, linux-kernel, linux-rt-users

Ingo Molnar wrote:
> i have released the v2.6.20-rt1 kernel...

There was also a problem with the patch for arch/mips/kernel/entry.S
Some kind of cruft was in the patch.

Below is a patch which fixes both issues.  It at least allows compilation.
I haven't turned anything on, or looked at runtime yet.

Index: alp-linux/arch/mips/kernel/entry.S
===================================================================
--- alp-linux.orig/arch/mips/kernel/entry.S	2007-05-03 12:28:38.000000000 -0700
+++ alp-linux/arch/mips/kernel/entry.S	2007-05-03 12:21:47.000000000 -0700
@@ -21,8 +21,6 @@
 #endif

 #ifndef CONFIG_PREEMPT
-<<<<<<< delete 	local_irq_disable
-	raw_local_irq_disable
 #define resume_kernel	restore_all
 #else
 #define __ret_from_irq	ret_from_exception
@@ -32,7 +30,7 @@
 	.align	5
 #ifndef CONFIG_PREEMPT
 FEXPORT(ret_from_exception)
-	local_irq_disable			# preempt stop
+	raw_local_irq_disable			# preempt stop
 	b	__ret_from_irq
 #endif
 FEXPORT(ret_from_irq)
Index: alp-linux/include/asm-mips/atomic.h
===================================================================
--- alp-linux.orig/include/asm-mips/atomic.h	2007-05-03 12:28:38.000000000 -0700
+++ alp-linux/include/asm-mips/atomic.h	2007-05-03 11:56:58.000000000 -0700
@@ -566,7 +566,6 @@
 		raw_local_irq_restore(flags);
 	}
 #endif
-#endif

 	smp_mb();


=============================
Tim Bird
Architecture Group Chair, CE Linux Forum
Senior Staff Engineer, Sony Electronics
=============================


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: v2.6.21-rt1
  2007-04-26 13:57 ` v2.6.21-rt1 Ingo Molnar
  2007-04-26 20:53   ` v2.6.21-rt1 Free Ekanayaka
  2007-05-03 19:16   ` v2.6.21-rt1 - bug in asm-mips/atomic.h Tim Bird
@ 2007-05-17 18:46   ` emin ak
  2 siblings, 0 replies; 54+ messages in thread
From: emin ak @ 2007-05-17 18:46 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-kernel, linux-rt-users

[-- Attachment #1: Type: text/plain, Size: 5822 bytes --]

Hi,
This patch is failed for ppc arch (actually for mpc8540ads). too
because of compilition errors. Here is the output log and I have also
attached .config.
Any comments?

make uImage
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf -s arch/ppc/Kconfig
  CHK     include/linux/version.h
  CHK     include/linux/utsrelease.h
  UPD     include/linux/utsrelease.h
  CC      arch/ppc/kernel/asm-offsets.s
In file included from arch/ppc/include/asm/hw_irq.h:110,
                 from include/asm/system.h:10,
                 from include/linux/list.h:9,
                 from include/linux/signal.h:8,
                 from arch/ppc/kernel/asm-offsets.c:11:
include/linux/irqflags.h:83:1: warning: "raw_local_irq_save" redefined
In file included from include/asm/system.h:10,
                 from include/linux/list.h:9,
                 from include/linux/signal.h:8,
                 from arch/ppc/kernel/asm-offsets.c:11:
arch/ppc/include/asm/hw_irq.h:103:1: warning: this is the location of
the previous definition
In file included from arch/ppc/include/asm/hw_irq.h:110,
                 from include/asm/system.h:10,
                 from include/linux/list.h:9,
                 from include/linux/signal.h:8,
                 from arch/ppc/kernel/asm-offsets.c:11:
include/linux/irqflags.h:88:1: warning: "raw_local_irq_restore" redefined
In file included from include/asm/system.h:10,
                 from include/linux/list.h:9,
                 from include/linux/signal.h:8,
                 from arch/ppc/kernel/asm-offsets.c:11:
arch/ppc/include/asm/hw_irq.h:59:1: warning: this is the location of
the previous definition
In file included from include/linux/time.h:7,
                 from include/linux/timex.h:57,
                 from include/linux/sched.h:51,
                 from arch/ppc/kernel/asm-offsets.c:12:
include/linux/seqlock.h: In function '__read_seqretry':
include/linux/seqlock.h:139: warning: implicit declaration of function
'local_irq_save'
include/linux/seqlock.h:140: warning: implicit declaration of function
'local_irq_restore'
  GEN     include/asm-ppc/asm-offsets.h
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  MKELF   scripts/mod/elfconfig.h
  HOSTCC  scripts/mod/file2alias.o
  HOSTCC  scripts/mod/modpost.o
  HOSTCC  scripts/mod/sumversion.o
  HOSTLD  scripts/mod/modpost
  CC      init/main.o
In file included from include/asm/system.h:10,
                 from include/linux/spinlock.h:95,
                 from include/linux/module.h:9,
                 from init/main.c:13:
arch/ppc/include/asm/hw_irq.h:59:1: warning: "raw_local_irq_restore" redefined
In file included from include/linux/spinlock.h:93,
                 from include/linux/module.h:9,
                 from init/main.c:13:
include/linux/irqflags.h:88:1: warning: this is the location of the
previous definition
In file included from include/asm/system.h:10,
                 from include/linux/spinlock.h:95,
                 from include/linux/module.h:9,
                 from init/main.c:13:
arch/ppc/include/asm/hw_irq.h:65:46: error: macro
"raw_local_irq_disable" passed 1 arguments, but takes just 0
In file included from include/asm/system.h:10,
                 from include/linux/spinlock.h:95,
                 from include/linux/module.h:9,
                 from init/main.c:13:
arch/ppc/include/asm/hw_irq.h:66: error: syntax error before '{' token
arch/ppc/include/asm/hw_irq.h:77:45: error: macro
"raw_local_irq_enable" passed 1 arguments, but takes just 0
arch/ppc/include/asm/hw_irq.h:78: error: syntax error before '{' token
arch/ppc/include/asm/hw_irq.h:103:1: warning: "raw_local_irq_save" redefined
In file included from include/linux/spinlock.h:93,
                 from include/linux/module.h:9,
                 from init/main.c:13:
include/linux/irqflags.h:83:1: warning: this is the location of the
previous definition
In file included from include/linux/time.h:7,
                 from include/linux/stat.h:57,
                 from include/linux/module.h:11,
                 from init/main.c:13:
include/linux/seqlock.h: In function '__read_seqretry':
include/linux/seqlock.h:139: warning: implicit declaration of function
'local_irq_save'
include/linux/seqlock.h:140: warning: implicit declaration of function
'local_irq_restore'
In file included from include/linux/rtc.h:102,
                 from include/linux/efi.h:19,
                 from init/main.c:43:
include/linux/interrupt.h: In function 'cli':
include/linux/interrupt.h:210: warning: implicit declaration of
function 'local_irq_disable'
include/linux/interrupt.h: In function 'sti':
include/linux/interrupt.h:214: warning: implicit declaration of
function 'local_irq_enable'
include/linux/interrupt.h: In function 'save_flags':
include/linux/interrupt.h:218: warning: implicit declaration of
function 'local_save_flags'
init/main.c: In function 'start_kernel':
init/main.c:572: warning: implicit declaration of function 'irqs_disabled'
make[1]: *** [init/main.o] Error 1
make: *** [init] Error 2





2007/4/26, Ingo Molnar <mingo@elte.hu>:
>
> i have released the v2.6.20-rt1 kernel, which can be downloaded from the
> usual place:
>
>    http://redhat.com/~mingo/realtime-preempt/
>
> more info about the -rt patchset can be found in the RT wiki:
>
>    http://rt.wiki.kernel.org
>
> This is a fixes-only release.
>
> to build a 2.6.21-rt1 tree, the following patches should be applied:
>
>  http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2
>  http://redhat.com/~mingo/realtime-preempt/patch-2.6.21-rt1
>
>        Ingo
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>

[-- Attachment #2: .config --]
[-- Type: text/plain, Size: 18780 bytes --]

#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.21-rt1
# Thu May 17 16:40:32 2007
#
CONFIG_MMU=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_ARCH_HAS_ILOG2_U32=y
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_PPC=y
CONFIG_PPC32=y
CONFIG_GENERIC_NVRAM=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_GENERIC_BUG=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"

#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32

#
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
CONFIG_SYSCTL_SYSCALL=y
# CONFIG_KALLSYMS is not set
# CONFIG_HOTPLUG is not set
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
# CONFIG_EPOLL is not set
CONFIG_SHMEM=y
CONFIG_SLAB=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set

#
# Loadable module support
#
# CONFIG_MODULES is not set

#
# Block layer
#
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_LSF is not set

#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"

#
# Processor
#
# CONFIG_6xx is not set
# CONFIG_40x is not set
# CONFIG_44x is not set
# CONFIG_8xx is not set
# CONFIG_E200 is not set
CONFIG_E500=y
# CONFIG_PPC_DCR_NATIVE is not set
CONFIG_BOOKE=y
CONFIG_FSL_BOOKE=y
# CONFIG_PHYS_64BIT is not set
CONFIG_SPE=y
CONFIG_MATH_EMULATION=y
# CONFIG_KEXEC is not set
# CONFIG_CPU_FREQ is not set
# CONFIG_WANT_EARLY_SERIAL is not set
CONFIG_PPC_GEN550=y
CONFIG_85xx=y
CONFIG_PPC_INDIRECT_PCI_BE=y

#
# Freescale 85xx options
#
CONFIG_MPC8540_ADS=y
# CONFIG_MPC8548_CDS is not set
# CONFIG_MPC8555_CDS is not set
# CONFIG_MPC8560_ADS is not set
# CONFIG_SBC8560 is not set
# CONFIG_STX_GP3 is not set
# CONFIG_TQM8540 is not set
# CONFIG_TQM8541 is not set
# CONFIG_TQM8555 is not set
# CONFIG_TQM8560 is not set
CONFIG_MPC8540=y

#
# Platform options
#
# CONFIG_HIGHMEM is not set
CONFIG_ARCH_POPULATES_NODE_MAP=y
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT_DESKTOP is not set
CONFIG_PREEMPT_RT=y
CONFIG_PREEMPT=y
CONFIG_PREEMPT_SOFTIRQS=y
CONFIG_PREEMPT_HARDIRQS=y
CONFIG_PREEMPT_BKL=y
# CONFIG_CLASSIC_RCU is not set
CONFIG_PREEMPT_RCU=y
CONFIG_RCU_TRACE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_ASM_SEMAPHORES=y
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_RESOURCES_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_CMDLINE_BOOL is not set
# CONFIG_PM is not set
CONFIG_SECCOMP=y
CONFIG_ISA_DMA_API=y

#
# Bus options
#
CONFIG_ZONE_DMA=y
CONFIG_PPC_I8259=y
CONFIG_PPC_INDIRECT_PCI=y
CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y

#
# PCCARD (PCMCIA/CardBus) support
#
# CONFIG_RAPIDIO is not set

#
# Advanced setup
#
# CONFIG_ADVANCED_OPTIONS is not set

#
# Default settings for advanced configuration options are used
#
CONFIG_HIGHMEM_START=0xfe000000
CONFIG_LOWMEM_SIZE=0x30000000
CONFIG_KERNEL_START=0xc0000000
CONFIG_TASK_SIZE=0x80000000
CONFIG_BOOT_LOAD=0x00800000

#
# Networking
#
CONFIG_NET=y

#
# Networking options
#
# CONFIG_NETDEBUG is not set
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_XFRM_MODE_TRANSPORT=y
CONFIG_INET_XFRM_MODE_TUNNEL=y
CONFIG_INET_XFRM_MODE_BEET=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETFILTER is not set

#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set

#
# SCTP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_SCTP is not set

#
# TIPC Configuration (EXPERIMENTAL)
#
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set

#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set

#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_IEEE80211 is not set

#
# Device Drivers
#

#
# Generic Driver Options
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_SYS_HYPERVISOR is not set

#
# Connector - unified userspace <-> kernelspace linker
#
# CONFIG_CONNECTOR is not set

#
# Memory Technology Devices (MTD)
#
# CONFIG_MTD is not set

#
# Parallel port support
#
# CONFIG_PARPORT is not set

#
# Plug and Play support
#
# CONFIG_PNPACPI is not set

#
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_SX8 is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=32768
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set

#
# Misc devices
#
# CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set

#
# ATA/ATAPI/MFM/RLL support
#
# CONFIG_IDE is not set

#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
# CONFIG_SCSI_NETLINK is not set

#
# Serial ATA (prod) and Parallel ATA (experimental) drivers
#
# CONFIG_ATA is not set

#
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set

#
# Fusion MPT device support
#
# CONFIG_FUSION is not set

#
# IEEE 1394 (FireWire) support
#
# CONFIG_IEEE1394 is not set

#
# I2O device support
#
# CONFIG_I2O is not set

#
# Macintosh device drivers
#
# CONFIG_MAC_EMUMOUSEBTN is not set
# CONFIG_WINDFARM is not set

#
# Network device support
#
CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set

#
# ARCnet devices
#
# CONFIG_ARCNET is not set

#
# PHY device support
#
CONFIG_PHYLIB=y

#
# MII PHY device drivers
#
# CONFIG_MARVELL_PHY is not set
# CONFIG_DAVICOM_PHY is not set
# CONFIG_QSEMI_PHY is not set
# CONFIG_LXT_PHY is not set
# CONFIG_CICADA_PHY is not set
# CONFIG_VITESSE_PHY is not set
# CONFIG_SMSC_PHY is not set
# CONFIG_BROADCOM_PHY is not set
# CONFIG_FIXED_PHY is not set

#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
# CONFIG_NET_VENDOR_3COM is not set

#
# Tulip family network device support
#
# CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set
# CONFIG_NET_PCI is not set

#
# Ethernet (1000 Mbit)
#
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_E1000 is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
# CONFIG_SK98LIN is not set
# CONFIG_TIGON3 is not set
# CONFIG_BNX2 is not set
CONFIG_GIANFAR=y
CONFIG_GFAR_NAPI=y
# CONFIG_QLA3XXX is not set
# CONFIG_ATL1 is not set

#
# Ethernet (10000 Mbit)
#
# CONFIG_CHELSIO_T1 is not set
# CONFIG_CHELSIO_T3 is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set
# CONFIG_MYRI10GE is not set
# CONFIG_NETXEN_NIC is not set

#
# Token Ring devices
#
# CONFIG_TR is not set

#
# Wireless LAN (non-hamradio)
#
# CONFIG_NET_RADIO is not set

#
# Wan interfaces
#
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set

#
# ISDN subsystem
#
# CONFIG_ISDN is not set

#
# Telephony Support
#
# CONFIG_PHONE is not set

#
# Input device support
#
CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not set

#
# Userland interfaces
#
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set

#
# Input Device Drivers
#
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set

#
# Hardware I/O ports
#
# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set

#
# Character devices
#
# CONFIG_VT is not set
# CONFIG_SERIAL_NONSTANDARD is not set

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
# CONFIG_SERIAL_8250_EXTENDED is not set

#
# Non-8250 serial port support
#
# CONFIG_SERIAL_UARTLITE is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256

#
# IPMI
#
# CONFIG_IPMI_HANDLER is not set

#
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
CONFIG_HW_RANDOM=y
# CONFIG_NVRAM is not set
CONFIG_GEN_RTC=y
# CONFIG_GEN_RTC_X is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_AGP is not set
# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set

#
# TPM devices
#
# CONFIG_TCG_TPM is not set
CONFIG_RMEM=y
CONFIG_ALLOC_RTSJ_MEM=y

#
# I2C support
#
CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y

#
# I2C Algorithms
#
# CONFIG_I2C_ALGOBIT is not set
# CONFIG_I2C_ALGOPCF is not set
# CONFIG_I2C_ALGOPCA is not set

#
# I2C Hardware Bus support
#
# CONFIG_I2C_ALI1535 is not set
# CONFIG_I2C_ALI1563 is not set
# CONFIG_I2C_ALI15X3 is not set
# CONFIG_I2C_AMD756 is not set
# CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set
# CONFIG_I2C_PIIX4 is not set
CONFIG_I2C_MPC=y
# CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_PROSAVAGE is not set
# CONFIG_I2C_SAVAGE4 is not set
# CONFIG_I2C_SIS5595 is not set
# CONFIG_I2C_SIS630 is not set
# CONFIG_I2C_SIS96X is not set
# CONFIG_I2C_VIA is not set
# CONFIG_I2C_VIAPRO is not set
# CONFIG_I2C_VOODOO3 is not set
# CONFIG_I2C_PCA_ISA is not set

#
# Miscellaneous I2C Chip support
#
# CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_M41T00 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set

#
# SPI support
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set

#
# Dallas's 1-wire bus
#
# CONFIG_W1 is not set

#
# Hardware Monitoring support
#
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_ABITUGURU is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1029 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ASB100 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_F71805F is not set
# CONFIG_SENSORS_FSCHER is not set
# CONFIG_SENSORS_FSCPOS is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_PC87427 is not set
# CONFIG_SENSORS_SIS5595 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47M192 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_VIA686A is not set
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_VT8231 is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83791D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set

#
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set

#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set

#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set

#
# Graphics support
#
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
# CONFIG_FB is not set
# CONFIG_FB_IBM_GXT4500 is not set

#
# Sound
#
# CONFIG_SOUND is not set

#
# HID Devices
#
CONFIG_HID=y
# CONFIG_HID_DEBUG is not set

#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
# CONFIG_USB is not set

#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#

#
# USB Gadget Support
#
# CONFIG_USB_GADGET is not set

#
# MMC/SD Card support
#
# CONFIG_MMC is not set

#
# LED devices
#
# CONFIG_NEW_LEDS is not set

#
# LED drivers
#

#
# LED Triggers
#

#
# InfiniBand support
#
# CONFIG_INFINIBAND is not set

#
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
#

#
# Real Time Clock
#
# CONFIG_RTC_CLASS is not set

#
# DMA Engine support
#
CONFIG_DMA_ENGINE=y

#
# DMA Clients
#
CONFIG_NET_DMA=y

#
# DMA Devices
#
CONFIG_INTEL_IOATDMA=y

#
# Auxiliary Display support
#

#
# Virtualization
#

#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
# CONFIG_EXT4DEV_FS is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set

#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set

#
# DOS/FAT/NT Filesystems
#
# CONFIG_MSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_NTFS_FS is not set

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set

#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set

#
# Network File Systems
#
CONFIG_NFS_FS=y
# CONFIG_NFS_V3 is not set
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not set
# CONFIG_MAC_PARTITION is not set
# CONFIG_MSDOS_PARTITION is not set
# CONFIG_LDM_PARTITION is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
# CONFIG_EFI_PARTITION is not set

#
# Native Language Support
#
# CONFIG_NLS is not set

#
# Distributed Lock Manager
#
# CONFIG_DLM is not set

#
# Library routines
#
CONFIG_BITREVERSE=y
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_PLIST=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
# CONFIG_PROFILING is not set

#
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_UNUSED_SYMBOLS is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
# CONFIG_DEBUG_KERNEL is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_FUNCTION_TRACE is not set
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_UNWIND_INFO is not set
# CONFIG_SERIAL_TEXT_DEBUG is not set

#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set

#
# Cryptographic options
#
# CONFIG_CRYPTO is not set

^ permalink raw reply	[flat|nested] 54+ messages in thread

end of thread, other threads:[~2007-05-17 18:46 UTC | newest]

Thread overview: 54+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-05  6:56 v2.6.20-rt1, yum/rpm Ingo Molnar
2007-02-05  9:18 ` Serge Belyshev
2007-02-05  9:02   ` Ingo Molnar
2007-02-05 10:36 ` Sunil Naidu
2007-02-05 10:42   ` Peter Zijlstra
2007-02-05 10:22     ` Ingo Molnar
2007-02-05 11:15     ` Sunil Naidu
2007-02-05 12:59 ` Michal Piotrowski
2007-02-05 13:47   ` Ingo Molnar
2007-02-05 21:29     ` Michal Piotrowski
2007-02-05 14:25 ` Karsten Wiese
2007-02-05 21:46   ` USX2Y 2.6.20-rt2 Oops on disconnect Rui Nuno Capela
2007-02-05 22:27     ` Karsten Wiese
2007-02-06 11:53       ` Takashi Iwai
2007-02-07  0:54       ` USX2Y 2.6.20-rt2 Oops on disconnect [SOLVED] Rui Nuno Capela
2007-02-07 10:26         ` Takashi Iwai
2007-02-10  1:29   ` us428control 0.4.5 [RFC] Rui Nuno Capela
2007-02-10 15:37     ` Rui Nuno Capela
2007-02-13 16:07       ` Q: How to detect which USx2y is connected? Rui Nuno Capela
2007-02-13 17:36         ` Karsten Wiese
2007-02-13 17:47           ` Karsten Wiese
2007-02-13 17:48           ` Takashi Iwai
2007-02-13 18:08             ` Rui Nuno Capela
2007-02-13 18:13               ` Rui Nuno Capela
2007-02-13 19:03               ` Karsten Wiese
2007-02-13 21:01                 ` Rui Nuno Capela
2007-02-14 12:59                   ` Takashi Iwai
2007-02-14 14:30                     ` Rui Nuno Capela
2007-02-14 14:36                       ` Takashi Iwai
2007-02-14 14:57                         ` Rui Nuno Capela
2007-02-14 15:01                           ` Takashi Iwai
2007-02-14 15:08                             ` Rui Nuno Capela
2007-02-14 22:43       ` [PATCH] us428control 0.4.5 Rui Nuno Capela
2007-02-14 23:23         ` Takashi Iwai
2007-02-16 17:13       ` [PATCH] us428control 0.4.6 Rui Nuno Capela
2007-02-16 17:46         ` Takashi Iwai
2007-02-05 15:17 ` v2.6.20-rt1, yum/rpm Parag Warudkar
2007-02-05 21:50 ` Michal Piotrowski
2007-02-06  0:11 ` Michal Piotrowski
2007-02-06  1:14 ` Daniel Walker
2007-02-06 10:05 ` Pre-packaged version Alessio Igor Bogani
2007-02-06 10:10 ` v2.6.20-rt1, yum/rpm Arjan van de Ven
2007-02-07 12:32   ` Ingo Molnar
2007-02-06 10:30 ` Sunil Naidu
2007-02-06 19:38 ` Chuck Harding
2007-02-06 20:08   ` K.R. Foley
2007-02-27 17:39 ` K.R. Foley
2007-02-28  8:11   ` Ingo Molnar
2007-02-28 10:16     ` K.R. Foley
2007-04-26 13:57 ` v2.6.21-rt1 Ingo Molnar
2007-04-26 20:53   ` v2.6.21-rt1 Free Ekanayaka
2007-05-03 19:16   ` v2.6.21-rt1 - bug in asm-mips/atomic.h Tim Bird
2007-05-03 19:35     ` v2.6.21-rt1 - mips compile bugs Tim Bird
2007-05-17 18:46   ` v2.6.21-rt1 emin ak

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.