lkml.org 
[lkml]   [2006]   [Dec]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: moxa serial driver testing
    From
    Date
    > Jiri Slaby <jirislaby@gmail.com> writes:
    >
    > > Could you test the patch below, if something changes?
    >
    > Just tested with low_latency commented out. Still oopses:
    >
    > BUG: unable to handle kernel NULL pointer dereference at virtual address 00000008
    > printing eip:
    > f8f1730f
    > *pde = 00000000
    > Oops: 0000 [#1]
    > SMP
    > Modules linked in: nvidia agpgart ipv6 nfs lockd nfs_acl sunrpc dm_mod sr_mod sbp2 ieee1394 ide_generic ide_disk e1000 snd_hda_intel snd_hda_codec snd_pcm_oss snd_mixer_oss snd_pcm snd_timer i2c_i801 tsdev psmouse snd soundcore snd_page_alloc i2c_core serio_raw parport_pc parport mxser_new evdev floppy pcspkr rtc ext3 jbd mbcache usb_storage usbhid ide_cd cdrom sd_mod uhci_hcd piix usbcore skge ata_piix libata scsi_mod generic ide_core thermal processor fan
    > CPU: 0
    > EIP: 0060:[<f8f1730f>] Tainted: P VLI
    > EFLAGS: 00010046 (2.6.18-3-686 #1)
    > EIP is at mxser_receive_chars+0x21b/0x249 [mxser_new]

    Yes, port->tty still somewhere becomes NULL -- does this patch help?

    ---

    diff -Nrup mxser_newa/mxser_new.c mxser_newb/mxser_new.c
    --- mxser_newa/mxser_new.c 2006-12-26 18:22:30.000000000 +0100
    +++ mxser_newb/mxser_new.c 2006-12-27 14:26:22.000000000 +0100
    @@ -2051,13 +2051,16 @@ static void mxser_wait_until_sent(struct
    void mxser_hangup(struct tty_struct *tty)
    {
    struct mxser_port *info = tty->driver_data;
    + unsigned long flags;

    mxser_flush_buffer(tty);
    mxser_shutdown(info);
    + spin_lock_irqsave(&info->slock, flags);
    info->event = 0;
    info->count = 0;
    info->flags &= ~ASYNC_NORMAL_ACTIVE;
    info->tty = NULL;
    + spin_unlock_irqrestore(&info->slock, flags);
    wake_up_interruptible(&info->open_wait);
    }

    @@ -2263,8 +2266,6 @@ static irqreturn_t mxser_interrupt(int i
    if (bits & irqbits)
    continue;
    port = &brd->ports[i];
    - if (!(port->flags & ASYNC_INITIALIZED))
    - continue;

    int_cnt = 0;
    spin_lock(&port->slock);
    @@ -2274,7 +2275,9 @@ static irqreturn_t mxser_interrupt(int i
    break;
    iir &= MOXA_MUST_IIR_MASK;
    if (!port->tty ||
    - (port->flags & ASYNC_CLOSING)) {
    + (port->flags & ASYNC_CLOSING) ||
    + !(port->flags &
    + ASYNC_INITIALIZED)) {
    status = inb(port->ioaddr + UART_LSR);
    outb(0x27, port->ioaddr + UART_FCR);
    inb(port->ioaddr + UART_MSR);
    -
    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/
    \
     
     \ /
      Last update: 2006-12-27 14:39    [W:0.021 / U:21.756 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site