Linux-Development-Sys Digest #450, Volume #8     Mon, 29 Jan 01 12:13:16 EST

Contents:
  Re: Why max 8 SCSI LUNS/device (Josef Moellers)
  Re: Forcing a Core Dump (Chain-Wu Lee)
  Re: Communication between kernel module and user space program (Arne Driescher)
  Re: Newbie to kernel module programming (Arne Driescher)
  Re: PCI bus access (Arne Driescher)
  Re: VFS messages ("Peter T. Breuer")
  Re: Newbie to kernel module programming
  Re: getche() (George Houpis)
  Kernel's HARD reset (David Vidal Rodriguez)
  Re: how to trace Xlib calls? (Mike McDonald)

----------------------------------------------------------------------------

From: Josef Moellers <[EMAIL PROTECTED]>
Subject: Re: Why max 8 SCSI LUNS/device
Date: Mon, 29 Jan 2001 14:03:21 +0100

Bill Anderson wrote:
> =

> Is there any (good) reason why the kernel still limits (apparently even=

> in 2.4) the maximum number of LUNS/SCSI device to 8?
> =

> If not, how difficult would it be to modify that?

boot: linux max_scsi_luns=3D128

Works for us,
-- =

Josef M=F6llers (Pinguinpfleger bei FSC)
        If failure had no penalty success would not be a prize
                                                -- T.  Pratchett

------------------------------

From: [EMAIL PROTECTED] (Chain-Wu Lee)
Subject: Re: Forcing a Core Dump
Date: Mon, 29 Jan 2001 15:10:52 GMT

If you really wants it core dump, use some variable divided by 0.

-Chain-Wu

On Sun, 07 Jan 2001 18:54:20 GMT, Paul Pluzhnikov <[EMAIL PROTECTED]> wrote:
>"Marc Schneider" <[EMAIL PROTECTED]> wrote in message
>news:[EMAIL PROTECTED]...
>> I have a bug which is difficult to debug. I am getting intermitted
>> Segmentation Fault in my program. If I run the program in a debugger, it
>> doesn't segfault. I would like to force my program to dump core for all
>> segfaults. Is there an easy way to do this?
>>
>
>Your program most likely *already* dumps core *every* time
>it encounteres a segmentation fault (that is the default).
>It does not, however, encounter the condition that causes segfault, when run
>under debugger.
>
>Make sure you run the program in the same environment and with the same
>arguments when you run it under debugger.
>
>If segfault still does not occur, you have several options:
>
>- do post-mortem analysis:
>
>  gdb exename core
>  (gdb) where
>
>- utilize one of the memory-checking tools:
>  mpatrol, efence, Insure++
>
>
>


-- 
--
Chain-Wu Lee,  �����^

------------------------------

From: Arne Driescher <[EMAIL PROTECTED]>
Subject: Re: Communication between kernel module and user space program
Date: Mon, 29 Jan 2001 16:29:27 +0100

Kasper Dupont wrote:
> 
> knightG wrote:
> >
> > Hello, we've been trying to establish somekind of connection between kernel
> > and USP(user space programm).
> > We've decided to use a character device.
> > The problem is that USP has to read from characted device all the time,
> > which is stupid.We've tried using SELECT however it doesn't seem to have any
> > effect because select seems to check if he MAY read the data not checking
> > the changes.
> >
> > Does anyone has experience with our program ? Are there any other solutions
> > for it ?
> >
> > Thank you in advance,
> > Gregor Doltar
> 
> I think your struct file_operations must contain
> a poll methode for select to work. I don't know
> the details about how it works.
> 
> Some example code can be found in
> linux/drivers/char/random.c look for the
> differences between random_fops and urandom_fops.
> 
> --
> Kasper Dupont
Actually, it is probably the easiest call to add to any driver
that has some kind of waitq in it.

/* Implementation of standard poll system call */
#define __NO_VERSION__ /* don't define kernel_verion in module.h */
#include <linux/module.h>
#include "main.h"          // for dev
#include "vfs_poll.h"      // prototype for driver_poll (for your
file_struct)
 
/* Standard poll methode */
unsigned int
driver_poll(struct file *file, poll_table *poll_wait_table)
{
        unsigned int mask=0;         // 0 means no data available
        unsigned int device_index  =
MINOR(file->f_dentry->d_inode->i_rdev);
 
        /*
           Queue the current process in the wait queue.
           We go to sleep here and will awake on next signal or irq.
        */
        poll_wait(file, &(dev[device_index].driver_waitq),
poll_wait_table);
 
        /* Either a signal or a irq arrived. The irq-handler sends
           a wakeup.
        */

        // This is for my ring buffer: head!=tail means we have data
        if(dev[device_index].head != dev[device_index].tail) {
                // Normal data are readable
                mask |= POLLIN | POLLRDNORM;
        }
 
        return mask;
 
}                                                   

So, check your driver code for the poll function and if you cannot
find it add it yourself.


-Arne

------------------------------

From: Arne Driescher <[EMAIL PROTECTED]>
Subject: Re: Newbie to kernel module programming
Date: Mon, 29 Jan 2001 16:33:58 +0100

Let's guess:
You haven't forgot -D__KERNEL__ -DMODULE -O2 
in the gcc-command line by chance?

Just a guess :-)

-Arne

------------------------------

From: Arne Driescher <[EMAIL PROTECTED]>
Crossposted-To: 
comp.os.linux.development.apps,comp.os.linux.hardware,comp.os.linux.misc
Subject: Re: PCI bus access
Date: Mon, 29 Jan 2001 16:38:23 +0100

David Florez wrote:
> 
> Hi All,
> Does anybody know if there is a way of mapping
> the physical PCI bus addresses into user memory
> space (being user root if needed)?
> 
> I need to write an application that will be
> accessing the PCI bus VERY often. The only thing
> I can think of is adding a module to the kernel
> (device driver) that maps the PCI bus to kernel
> linear space ( by calling ioremap() ) and
> therefore the user app would have to issue a
> system call to request a PCI bus data transaction
> to the device driver. The idea would be finding a
> way of getting rid of these overkilling system
> calls.
The trick is called mmap. This means you have to write
a device driver (module) that implements the mmap system call.
Basically it works like:
1) The user uses address=mmap(FileHandle,some parameter ..) to 
   get an address where the mem is mapped.
2) The request is routed to your driver and used to setup
    some memory mapping. 

Good luck,

Arne

------------------------------

From: "Peter T. Breuer" <[EMAIL PROTECTED]>
Subject: Re: VFS messages
Date: Mon, 29 Jan 2001 17:11:39 +0100

Johnny Choque <[EMAIL PROTECTED]> wrote:
> I am obtaining many messages in /var/log/messages and /var/log/debug
> like the following one:

> KERNEL: VFS: Disk change detected on device ide0(3,64)

> and I don't want that those messages appear, How I can make that?

Mmm. Tough one. Remove hdb? (or at least fix it).

Is it a cdrom? Perhaps you shouldn't keep changing the cdrom!

If you don't like the message (which is presumably a correct message)
you can always comment it out of the source. 

Peter

------------------------------

From: [EMAIL PROTECTED] ()
Subject: Re: Newbie to kernel module programming
Date: Mon, 29 Jan 2001 16:31:05 -0000

In article <5Q7d6.17022$[EMAIL PROTECTED]>,
Rich C. <[EMAIL PROTECTED]> wrote:

>I followed all the examples exactly, and tried to compile them.  For some
>reason, I get errors when I try to compile the lines:
>
>#if CONFIG_MODVERSIONS==1
>#define MODVERSIONS
>#include <linux/modversions.h>
>#endif

It would help a lot if you'd actually post the errors.  Saying "I get errors"
makes anyone trying to help have to guess.

--
http://www.spinics.net/linux

------------------------------

From: George Houpis <[EMAIL PROTECTED]>
Subject: Re: getche()
Date: Mon, 29 Jan 2001 10:32:22 -0600

This is a multi-part message in MIME format.
==============913CB45DBE9FF88BC0D43246
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Well Filipe, here is some code that you can use/modify for your use.  It does
use the termios functions.  Terminal attributes dictate by default use unlimited
timer, no character maximum.  You need to change it to unlimited time but
one character buffer (so that when the buffer is full, it returns and does not
block.)  Attached code is derived from the late Richard Stevens who wrote
the book "Advanced Programming in the Unix Environment."  This is a decent
beginner book around $50-$60.

To use these functions, try
    tty_cbreak( STDIN_FILENO);
or
    tty_raw( STDIN_FILENO);
where STDIN_FILENO is the file descriptor for standard input (stdin maps to
this file descriptor) which defaults to 0.  1 is stdout, and 2 is stderr.

I recommend that you read the code and understand the terminal attribute
setting functions: tcsetattr

Enjoy

George Houpis




root wrote:

> I just wanted a funtion that could get input without need to press enter. I don't
> need to change the echo.
> How can i change the terminal setup from c/c++. Writting to some files?
> BTW what are terminal modes. I am really a newbie. Please use basic words.
>
> Thanks for your help.
>
> George Houpis wrote:
>
> > Try getchar().  If you need it without blocking or without echoing, then you
> > have more work to do, i.e. you need to setup terminal modes.
> >
> > getchar() need #include <stdio.h>, Linux does not use conio.h, that is unique
> > to DOS...
> >
> > Welcome to the better programming environment.
> >
> > George
> >
> > Filipe Maia wrote:
> >
> > > Is there a equivelant linux function for the windows getche from conio.h?
> > > I am newbie in programming and i am having some difficulties in porting code
> > > from win to linux.
> > > Can someone help me?

==============913CB45DBE9FF88BC0D43246
Content-Type: text/plain; charset=us-ascii;
 name="tty.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="tty.c"

/* -*- mode: C; mode: fold -*- 
 * File: tty.c
 * 
 * Purpose: The module will allow establishment of CBREAK mode for the 
 *          terminal which is necessary to process in non-blocking mode.
 *
 *
 */

#include <termios.h>
#include <unistd.h>
#include <stdio.h>

#include "tty.h"

/* GLOBALS */
static struct termios   save_termios;
static int              ttysavefd = -1;
static enum { RESET, RAW, CBREAK, NOWAIT}       ttystate = RESET;

int tty_nowait( int fd) /*{{{*/
{
   /* This function will place the terminal into cbreak mode. */
   struct termios buf;
 
   if( (ttystate == CBREAK) || (ttystate == RAW) || (ttystate == NOWAIT))
     return( 0);
   
   if( tcgetattr( fd, &save_termios) < 0)
     {
        /*err_msg( "Unable to get terminal information.");*/
        fprintf( stderr, "Warning: tty: tty_nowait: Unable to get terminal 
information.\n");
        return( -1);
     }
   
   buf = save_termios; /* Structure copy. */
   
   buf.c_lflag &= ~(ECHO | ICANON); /* Echo off, canonical mode off. */
   
   /* One bytes at a time, no timer. */
   buf.c_cc[VMIN] = 0; 
   buf.c_cc[VTIME] = 0;

   if( tcsetattr( fd, TCSAFLUSH, &buf) < 0)
     {
        /*err_msg( "Unable to set terminal information.");*/
        fprintf( stderr, "Warning: tty: tty_nowait: Unable to set terminal 
information.\n");
        return( -1);
     }
   
   /* Save information. */
   ttystate = NOWAIT;
   ttysavefd = fd;
   return( 0);
}
/*}}}*/

int tty_cbreak( int fd) /*{{{*/
{
   /* This function will place the terminal into cbreak mode. */
   struct termios buf;
 
   if( (ttystate == CBREAK) || (ttystate == RAW) || (ttystate == NOWAIT))
     return( 0);
   
   if( tcgetattr( fd, &save_termios) < 0)
     {
        /* err_msg( "Unable to get terminal information."); */
        fprintf( stderr, "Warning: tty: tty_cbreak: Unable to get terminal 
information.\n");
        return( -1);
     }
   
   buf = save_termios; /* Structure copy. */
   
   buf.c_lflag &= ~(ECHO | ICANON); /* Echo off, canonical mode off. */
   
   /* One bytes at a time, no timer. */
   buf.c_cc[VMIN] = 1; 
   buf.c_cc[VTIME] = 0;
   
   if( tcsetattr( fd, TCSAFLUSH, &buf) < 0)
     {
        /*err_msg( "Unable to set terminal information."); */
        fprintf( stderr, "Warning: tty: tty_cbreak: Unable to set terminal 
information.\n");
        return( -1);
     }
   
   /* Save information. */
   ttystate = CBREAK;
   ttysavefd = fd;
   return( 0);
}
/*}}}*/

int tty_raw( int fd) /*{{{*/
{
   /* This function will place the terminal into raw mode. */
   struct termios buf;
 
   if( (ttystate == CBREAK) || (ttystate == RAW) || (ttystate == NOWAIT))
     return( 0);
   
   if( tcgetattr( fd, &save_termios) < 0)
     {
        /*err_msg( "Unable to get terminal information.");*/
        fprintf( stderr, "Warning: tty: tty_raw: Unable to get terminal 
information.\n");
        return( -1);
     }
   
   buf = save_termios; /* Structure copy. */

   /* Turn off echo, cononical mode, extended input processing, and signal chars. */
   buf.c_lflag &= ~(ECHO | ICANON | IEXTEN |  ISIG);
   
   /* Turn off SIGINT on BREAK, CR-to-NL, input parity check, 
    * stripping 8th bit on input, output flow control. */
   buf.c_iflag &= ~(BRKINT | ICRNL |INPCK | ISTRIP | IXON);
   
   /* Clear size bits, parity checking off. */
   buf.c_cflag &= ~(CSIZE | PARENB);
   
   /* Set 8 bits per character. */
   buf.c_cflag |= CS8;
   
   /* Output processing off. */
   buf.c_oflag &= ~(OPOST);
   
   /* 1 byte at a time, no timer. */
   buf.c_cc[VMIN] = 1;
   buf.c_cc[VTIME] = 0;
   
   if( tcsetattr( fd, TCSAFLUSH, &buf) < 0)
     {
        /* err_msg( "Unable to set terminal information."); */
        fprintf( stderr, "Warning: tty: tty_raw: Unable to set terminal 
information.\n");
        return( -1);
     }

   /* Save information. */
   ttystate = RAW;
   ttysavefd = fd;
   return( 0);
}
/*}}}*/

int tty_reset( int fd) /*{{{*/
{
   /* This function will restore the input. */
   if( (ttystate != CBREAK) && (ttystate != RAW) && (ttystate != NOWAIT))
     return( 0); /* No need. */
   
   if( fd != ttysavefd)
     {
        /*err_msg( "This terminal is not saved.");*/
        fprintf( stderr, "Warning: tty: tty_reset: This terminal is not saved.\n");
        return( -1);
     }
   
   if( tcsetattr( fd, TCSAFLUSH, &save_termios) < 0)
     {
        /*err_msg( "Unable to reset terminal information.");*/
        fprintf( stderr, "Warning: tty: tty_reset: Unable to reset terminal 
information.\n");
        return( -1);
     }
   
   ttystate = RESET;
   return( 0);
}
/*}}}*/
   
void tty_atexit( void) /*{{{*/
{
   /* This function can be set up by atexit( tty_atexit) */
   if( ttysavefd >= 0)
     tty_reset( ttysavefd);
} /*}}}*/

int tty_getchar( void) /*{{{*/
{
   /* Returns the key pressed on the Sun keyboard. 
    * This function will return -1 for unknown, or if the terminal is not set to 
cbreak. 
    * NOTE: THIS FUNCTION RETURNS MORE VALUES THAN ARE DEFINED IN THE HEADER FILE.
    *       THIS IS INTENTIONAL, OTHERWISE THE LIST WOULD BE HUGE!
    */
   int key;
   int value;
   int metaflag = 0;
   
   /* If not in cbreak mode, then this command should be invalid. */
   if( ttystate != CBREAK)
     return( KEY_UNKNOWN);
   
   /* Get the current character. */
   switch( (key = getchar()))
     {
      case 0x1b: /* Escape. */
        if( (key = getchar()) == 0x1b) metaflag = META_FLAG;
        switch( key)
          {
           case 0x5b: /* Arrow keys. */
             switch( (key = getchar()))
               {
                case '1': /* Function key. */
                case '2': /* Function key. */
                case '3': /* Function key. */
                  value = ((key - '0') * 10);
                  if( ((key = getchar()) < '0') && (key > '9')) /* If not a digit, 
then this is the insert key. */
                    return( KEY_INSERT | (((key = getchar()) == 0x24 || key == 
0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag);
                  value += (key - '0');
                  key = getchar(); 
                  if( (value >= 11) && (value <= 21)) return( (KEY_F_BASE + (value - 
10)) | ((key == '^')?CTL_FLAG:0) | metaflag);
                  else if( (value >= 23) && (value <= 34)) return( (KEY_F_BASE + 
(value - 22)) | SHIFT_FLAG | ((key == '^')?CTL_FLAG:0) | metaflag);
                  else return( KEY_UNKNOWN);
                  break;
                case 'A': return( KEY_UP | metaflag); break; /* Up. */
                case 'B': return( KEY_DOWN | metaflag); break; /* Down. */
                case 'C': return( KEY_RIGHT | metaflag); break; /* Right. */
                case 'D': return( KEY_LEFT | metaflag); break; /* Left. */
                case 'a': return( KEY_SHIFT_UP | metaflag); break; /* Shift-Up. */
                case 'b': return( KEY_SHIFT_DOWN | metaflag); break; /* Shift-Down. */
                case 'c': return( KEY_SHIFT_RIGHT | metaflag); break; /* Shift-Right. 
*/
                case 'd': return( KEY_SHIFT_LEFT | metaflag); break; /* Shift-Left. */ 
           
                /* case 0x32: return( KEY_INSERT | (((key = getchar()) == 0x24 || key 
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; 
*/
                case 0x35: return( KEY_PAGE_UP | (((key = getchar()) == 0x24 || key == 
0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; /* 
Page Up. */
                case 0x34: /* Keypad. */
                  switch( getchar())
                    {
                     case 0x31: return( KEY_HOME | (((key = getchar()) == 0x24 || key 
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; 
/* Page Home. */
                     case 0x32: return( KEY_UP | (((key = getchar()) == 0x24 || key == 
0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; /* 
Up. */
                     case 0x33: return( KEY_PAGE_UP | (((key = getchar()) == 0x24 || 
key == 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); 
break; /* Page Up. */
                     case 0x34: return( KEY_LEFT | (((key = getchar()) == 0x24 || key 
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; 
/* Left. */
                     case 0x35: return( KEY_CENTER | (((key = getchar()) == 0x24 || 
key == 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); 
break; /* Page Up. */
                     case 0x36: return( KEY_RIGHT | (((key = getchar()) == 0x24 || key 
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; 
/* Right. */
                     case 0x37: return( KEY_END | (((key = getchar()) == 0x24 || key 
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; 
/* Page End. */
                     case 0x38: return( KEY_DOWN | (((key = getchar()) == 0x24 || key 
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; 
/* Down. */
                     case 0x39: return( KEY_PAGE_DOWN | (((key = getchar()) == 0x24 || 
key == 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); 
break; /* Page Down. */
                     default: return( KEY_UNKNOWN);     /* Unknown! */
                    }
                case 0x36: return( KEY_PAGE_DOWN | (((key = getchar()) == 0x24 || key 
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; 
/* Page Down. */
                case 0x37: return( KEY_HOME | (((key = getchar()) == 0x24 || key == 
0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; /* 
Page Home. */
                case 0x38: return( KEY_END | (((key = getchar()) == 0x24 || key == 
0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; /* 
Page End. */
                default: return( KEY_UNKNOWN); /* Undefined in this code. */
               }
             break;
           case 0x4f: /* Ctrl-arrow. */
             switch( getchar())
               {
                case 'a': return( KEY_UP | CTL_FLAG | metaflag); break; /* Ctl-Up. */
                case 'b': return( KEY_DOWN | CTL_FLAG | metaflag); break; /* Ctl-Down. 
*/
                case 'c': return( KEY_RIGHT | CTL_FLAG | metaflag); break; /* 
Ctl-Right. */
                case 'd': return( KEY_LEFT | CTL_FLAG | metaflag); break; /* Ctl-Left. 
*/
                default: return( KEY_UNKNOWN); /* Undefined in this code. */
               }
             break;
           default: /* Return META+key */
             return( META_FLAG | key);
          }
        break;
      default: /* Normal key. */
        return( key);
     }
   
   /* Should never reach here. */
   return( KEY_UNKNOWN);
}


/*}}}*/

==============913CB45DBE9FF88BC0D43246
Content-Type: text/plain; charset=us-ascii;
 name="tty.h"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="tty.h"

#ifndef TTY_H
#define TTY_H
/* File: tty.h
 * 
 * Purpose: The module will allow establishment of CBREAK mode for the 
 *          terminal which is necessary to process in non-blocking mode.
 *
 *
 */

/* FUNCTIONS PROTOTYPES. */
int tty_nowait( int fd);
int tty_cbreak( int fd);
int tty_raw( int fd);
int tty_reset( int fd);
void tty_atexit( void);
int tty_getchar( void);

/* DEFINES. */
#define KEY_UNKNOWN     -1
#define META_FLAG       0x4000
#define CTL_FLAG        0x2000
#define SHIFT_FLAG      0x1000  /* ONLY OF FUNCTION KEYS. */
#define KEY_UP          257
#define KEY_DOWN        258
#define KEY_RIGHT       259
#define KEY_LEFT        260
#define KEY_SHIFT_UP    (SHIFT_FLAG | KEY_UP)
#define KEY_SHIFT_DOWN  (SHIFT_FLAG | KEY_DOWN)
#define KEY_SHIFT_RIGHT (SHIFT_FLAG | KEY_RIGHT)
#define KEY_SHIFT_LEFT  (SHIFT_FLAG | KEY_LEFT)
#define KEY_BACKSPACE   8 /* BACKSPACE IS SHIFT+BACKSPACE! */
#define KEY_DELETE      261
#define KEY_INSERT      262
#define KEY_CENTER      263
#define KEY_PAGE_UP     264
#define KEY_PAGE_DOWN   265
#define KEY_HOME        266
#define KEY_END         267
#define KEY_F_BASE      300
#define KEY_F1          301
#define KEY_F2          302
#define KEY_F3          303
#define KEY_F4          304
#define KEY_F5          305
/* CODE 306 intenionally left out. */
#define KEY_F6          307
#define KEY_F7          308
#define KEY_F8          309
#define KEY_F9          310
#define KEY_F10         311
#define META_1          (META_FLAG | '1')
#define META_2          (META_FLAG | '2')
#define META_3          (META_FLAG | '3')
#define META_4          (META_FLAG | '4')
#define META_5          (META_FLAG | '5')
#define META_6          (META_FLAG | '6')
#define META_7          (META_FLAG | '7')
#define META_8          (META_FLAG | '8')
#define META_9          (META_FLAG | '9')
#define META_0          (META_FLAG | '0')
#define META_a          (META_FLAG | 'a')
#define META_b          (META_FLAG | 'b')
#define META_c          (META_FLAG | 'c')
#define META_d          (META_FLAG | 'd')
#define META_e          (META_FLAG | 'e')
#define META_f          (META_FLAG | 'f')
#define META_g          (META_FLAG | 'g')
#define META_h          (META_FLAG | 'h')
#define META_i          (META_FLAG | 'i')
#define META_j          (META_FLAG | 'j')
#define META_k          (META_FLAG | 'k')
#define META_l          (META_FLAG | 'l')
#define META_m          (META_FLAG | 'm')
#define META_n          (META_FLAG | 'n')
#define META_o          (META_FLAG | 'o')
#define META_p          (META_FLAG | 'p')
#define META_q          (META_FLAG | 'q')
#define META_r          (META_FLAG | 'r')
#define META_s          (META_FLAG | 's')
#define META_t          (META_FLAG | 't')
#define META_u          (META_FLAG | 'u')
#define META_v          (META_FLAG | 'v')
#define META_w          (META_FLAG | 'w')
#define META_x          (META_FLAG | 'x')
#define META_y          (META_FLAG | 'y')
#define META_z          (META_FLAG | 'z')
#define META_A          (META_FLAG | 'A')
#define META_B          (META_FLAG | 'B')
#define META_C          (META_FLAG | 'C')
#define META_D          (META_FLAG | 'D')
#define META_E          (META_FLAG | 'E')
#define META_F          (META_FLAG | 'F')
#define META_G          (META_FLAG | 'G')
#define META_H          (META_FLAG | 'H')
#define META_I          (META_FLAG | 'I')
#define META_J          (META_FLAG | 'J')
#define META_K          (META_FLAG | 'K')
#define META_L          (META_FLAG | 'L')
#define META_M          (META_FLAG | 'M')
#define META_N          (META_FLAG | 'N')
#define META_O          (META_FLAG | 'O')
#define META_P          (META_FLAG | 'P')
#define META_Q          (META_FLAG | 'Q')
#define META_R          (META_FLAG | 'R')
#define META_S          (META_FLAG | 'S')
#define META_T          (META_FLAG | 'T')
#define META_U          (META_FLAG | 'U')
#define META_V          (META_FLAG | 'V')
#define META_W          (META_FLAG | 'W')
#define META_X          (META_FLAG | 'X')
#define META_Y          (META_FLAG | 'Y')
#define META_Z          (META_FLAG | 'Z')


#endif

==============913CB45DBE9FF88BC0D43246==


------------------------------

From: David Vidal Rodriguez <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.misc
Subject: Kernel's HARD reset
Date: Mon, 29 Jan 2001 18:00:35 +0100

Hi there!

I have a (veeeery old) Pentium90 (AMI-Bios), and I've been using Linux
for relatively long time now (3 years). My problem is the following:

If I power on the machine, I can see the IRQ assignments being done to
PCI devices, also after having rebooted using any Microsoft OS, because
they all do a warm reboot, ie, no memory test is done. But now I've
noticed that the Linux kernel makes some kind of cold reboot that makes
the BIOS get confused: no assigments are done, concretely sth like "PCI
slot 1 using IRQ: none" appears.

I haven't taken care about this till some days ago, when I bought a
USB PCI card. It works perfectly when it has an IRQ assigned for it, but
after rebooting with Linux, neither Windows 2000 will boot (a Blue
Screen of Death comes out with a STOP: IRQ_NOT_LESS_OR_EQUAL) nor Linux
2.4 will detect the USB device, for nothing is to be seen in
/proc/interrupts, /proc/devices or /proc/bus. Only the reset switch will
help after rebooting the machine with the "Penguin" :-P.

So what's the problem? I don't expect an explanation from the BIOS' side
(if any) but from the kernel's, in other words: can I do something on
the kernel for it to perform a warm reboot, just as all Win* will do?

Thanks in advance,
--
  ------------------------------------------------------------------------
 David Vidal R. ([EMAIL PROTECTED])


------------------------------

Reply-To: [EMAIL PROTECTED]
From: [EMAIL PROTECTED] (Mike McDonald)
Subject: Re: how to trace Xlib calls?
Date: Mon, 29 Jan 2001 17:05:45 GMT

In article <953dbs$cjl$[EMAIL PROTECTED]>,
        [EMAIL PROTECTED] writes:
> Hello,
> 
> 
> I would like to trace which Xlib calls are performed from Java Virtual
> Machine. I need to trace these calls at X server side because this
> application is Java based and no one tracing tool (for example 'ltrace' or
> 'sniffit') can deep to 2nd calls, performed from called Java libs. As I
> understand, I need to compile Xlib from sources with corresponded printf(s),
> but I don't want to spend time in playing with Xlib sources.
> 
> Does anybody know how could I solve this problem? Which tools should I use to
> catch Xlib calls at X server side or perhaps there is such a flag in existing
> X server environment? Any other suggestions?

  What you want is called an X proxy server. They accept X connections and the
X protocol packets, do something with them, and then forward them onto a real
X server. The do something with them part could be to print them out! There's
two that came with my RH6.2 system so it shouldn't be too hard to find the
soucres of one and hack it to do the printing. (There might already be one on
x.org that does it.)

  Mike McDonald
  [EMAIL PROTECTED]

------------------------------


** FOR YOUR REFERENCE **

The service address, to which questions about the list itself and requests
to be added to or deleted from it should be directed, is:

    Internet: [EMAIL PROTECTED]

You can send mail to the entire list by posting to the
comp.os.linux.development.system newsgroup.

Linux may be obtained via one of these FTP sites:
    ftp.funet.fi                                pub/Linux
    tsx-11.mit.edu                              pub/linux
    sunsite.unc.edu                             pub/Linux

End of Linux-Development-System Digest
******************************

Reply via email to