The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* LTT benchmarks and patch update
From: Karim Yaghmour @ 2002-10-27 16:46 UTC (permalink / raw)
  To: linux-kernel, LTT-Dev


First, here's the latest LTT patch:
http://opersys.com/ftp/pub/LTT/ExtraPatches/patch-ltt-linux-2.5.44-vanilla-021026-2.2.bz2

We've run the latest LTT through a series of stress tests.  The tests
demonstrate that LTT has negligible impact when compiled out or with the
daemon off (and compiled in).  Even under the most stressful LMbench tests
we show minimal system impact.

We ran 2 sets of tests:
1- Measuring the overall execution time of 3 tasks: a complete 2.5 kernel
build, a bzip2 on a 2.5 kernel tar archive, and the total time to run
LMbench.
2- A complete LMbench run.

Each of these was run in 4 different configurations (Configuration B
was only run on test set #2 since the micro-benchmarks already show
no difference with vanilla):
A- A vanilla 2.5.44 kernel
B- A patched 2.5.44 kernel with tracing off
C- A patched 2.5.44 kernel with tracing on, daemon off
D- A patched 2.5.44 kernel with tracing on, daemon running

All tests were run using the lockless scheme with TSC timestamping.

When the LTT patch is applied to the kernel the results point to the fact
that when tracing is disabled there is no impact on the kernel performance.
Some numbers even seem to imply that the LTT patch speeds up the kernel by
fractions of a percent reinforcing our belief that the differences being
measured are in the noise.

Even when tracing is built-in, the difference is minimal, if at all
measurable. Test set #1 shows the decrease in performance to be equal
or below 0.5%, while test set #2 shows almost no difference for most
operations, including null syscalls.

As expected, nevertheless, there is a cost to having the trace daemon
running, tracing all kernel events and logging events to disk. Even then,
however, the impact on the real-life workloads (test set #1) is around
2.0%, which is quite low given the quantity of data being collected.
Some micro-benchmarks show relatively large impact. Because the large
majority of applications behave much closer to test set #1 than test set
#2, however, we believe the results are acceptable.

Here's a summary of test set #1:
----------------------------------------------------------------
| Kernel    |  Compile  | Compress  | LMbench SMP | LMbench UP |
----------------------------------------------------------------
| A (secs)  |     638   |    200    |     867     |   272.05   |
----------------------------------------------------------------
| C (secs)  |     640   |    201    |     871     |   270.87   |
| delta (%) |     0.3%  |    0.5%   |     0.5%    |    -0.15%  |
----------------------------------------------------------------
| D (secs)  |     651   |    204    |     872     |   275.08   |
| delta (%) |     2.0%  |    2.0%   |     0.5%    |     1.11%  |
----------------------------------------------------------------
[Compile and Compress columns are an average of 10 runs on SMP system;
LMbench SMP column is on one run only; LMbench UP is 5 runs without
disk tests.]

Test set #2 was run both on UP and SMP system.

The UP run of test set #2 was run 10 times and the results below are an
average of these runs (Average obtained using the tools available from:
http://home.earthlink.net/~rwhron/kernel/lmbench_comparison.html). This
is a complete LMbench test, including disk tests (not the same test run
as the LMbench UP measurements on 5 runs for test set #1 above).
#######################################################################
                 L M B E N C H  2 . 0   S U M M A R Y
                 ------------------------------------

Processor, Processes - times in microseconds - smaller is better
----------------------------------------------------------------
           null     null                       open    signal   signal    fork    execve  /bin/sh
kernel     call      I/O     stat    fstat    close   install   handle  process  process  process
-------  -------  -------  -------  -------  -------  -------  -------  -------  -------  -------
  A        0.346  0.50314    4.193    0.730    5.186    0.843    3.201    292.3   1014.7   4985.2
  B        0.346  0.50274    4.441    0.730    5.449    0.843    3.180    288.1   1002.0   5024.6
  C        0.352  0.56244    4.241    0.735    5.432    0.849    3.156    301.0   1038.3   5134.7
  D        0.963   1.5442    6.282    1.367    9.079    1.662    8.903    345.2   2472.6   6622.2

File select - times in microseconds - smaller is better
-------------------------------------------------------
          select   select   select   select   select   select   select   select
kernel     10 fd   100 fd   250 fd   500 fd   10 tcp  100 tcp  250 tcp  500 tcp
-------  -------  -------  -------  -------  -------  -------  -------  -------
  A        1.992    8.518   19.693   37.959    3.557  33.3852  51.2701  113.087
  B        1.979    8.522   19.684   37.944    2.708  15.7315  37.7146  73.9382
  C        2.594   14.305   34.586   67.002    3.265  22.8394  50.5247  100.358
  D        6.015   39.079   94.875  232.318    8.283  85.7979   111.75   285.22

Context switching with 0K - times in microseconds - smaller is better
---------------------------------------------------------------------
          2proc/0k   4proc/0k   8proc/0k  16proc/0k  32proc/0k  64proc/0k  96proc/0k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A          2.413      2.348      2.508      2.745      3.430      4.707      5.860
  B          2.681      2.455      2.559      2.904      3.600      4.912      6.034
  C          3.048      2.852      2.954      3.176      3.865      5.285      6.558
  D          3.572      3.434      3.691      3.895      4.999      6.881      8.229

Context switching with 4K - times in microseconds - smaller is better
---------------------------------------------------------------------
          2proc/4k   4proc/4k   8proc/4k  16proc/4k  32proc/4k  64proc/4k  96proc/4k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A          2.624      4.423      4.458      5.413      8.061     12.465     15.230
  B          2.549      3.932      4.001      5.690      9.042     12.923     15.309
  C          3.185      4.882      5.174      6.220      8.887     13.114     15.681
  D          4.244      5.326      5.310      6.713      9.837     15.242     18.726

Context switching with 8K - times in microseconds - smaller is better
---------------------------------------------------------------------
          2proc/8k   4proc/8k   8proc/8k  16proc/8k  32proc/8k  64proc/8k  96proc/8k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A          2.947      5.219      5.536      8.439     13.366     21.788     25.691
  B          2.904      5.689      6.158      8.515     14.220     22.450     28.341
  C          3.655      5.809      6.368      9.488     15.176     22.614     26.432
  D          4.908      6.618      6.813      9.620     15.692     23.165     26.995

Context switching with 16K - times in microseconds - smaller is better
----------------------------------------------------------------------
         2proc/16k  4proc/16k  8proc/16k  16prc/16k  32prc/16k  64prc/16k  96prc/16k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A          3.696      8.210     12.007     19.677     32.724     43.699     46.730
  B          3.614      8.830     12.493     20.421     32.938     43.577     46.612
  C          4.006      8.649     11.366     20.512     34.509     44.386     47.505
  D          5.297      9.768     12.313     19.213     35.063     46.570     49.722

Context switching with 32K - times in microseconds - smaller is better
----------------------------------------------------------------------
         2proc/32k  4proc/32k  8proc/32k  16prc/32k  32prc/32k  64prc/32k  96prc/32k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A          5.137     15.498     28.268     54.907     77.701     88.583     84.718
  B          6.458     17.387     27.123     52.752     76.295     84.247     84.857
  C          6.404     17.144     32.665     54.851     76.668     84.841     85.616
  D          6.979     15.674     25.008     53.044     79.204     87.115     87.739

Context switching with 64K - times in microseconds - smaller is better
----------------------------------------------------------------------
         2proc/64k  4proc/64k  8proc/64k  16prc/64k  32prc/64k  64prc/64k  96prc/64k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A         25.314     41.236     92.619    141.911    157.626    159.468    159.455
  B         31.503     47.503     96.400    141.198    157.873    159.476    159.537
  C         27.062     45.031     93.894    142.703    158.984    160.380    160.481
  D         27.648     36.102     81.103    147.793    162.497    163.387    163.377

File create/delete and VM system latencies in microseconds - smaller is better
----------------------------------------------------------------------------
           0K       0K       1K       1K       4K       4K      10K      10K     Mmap     Prot    Page
kernel   Create   Delete   Create   Delete   Create   Delete   Create   Delete   Latency  Fault   Fault
-------  -------  -------  -------  -------  -------  -------  -------  -------  -------  ------  ------
  A        59.18    19.39   100.00    35.14   102.86    36.10   169.11    42.11   1371.1   1.045    4.00
  B        59.47    20.97   100.92    36.18   102.06    35.84   168.89    42.61   1502.3   0.867    4.00
  C        59.17    20.04   101.04    33.85   102.10    33.76   169.36    41.13   1368.5   0.948    5.80
  D        67.19    23.82   112.33    40.62   115.90    41.30   187.37    50.20   1907.2   6.283    5.70

*Local* Communication latencies in microseconds - smaller is better
-------------------------------------------------------------------
kernel     Pipe   AF/Unix     UDP   RPC/UDP     TCP   RPC/TCP  TCPconn
-------  -------  -------  -------  -------  -------  -------  -------
  A        6.509   11.130  18.3123  45.6148  25.7486  63.1761  102.210
  B        6.443    9.948  17.0914  46.7833  25.7519  61.3685  102.340
  C        6.206   11.718  18.8520  47.5403  25.2025  67.8464  100.232
  D      484.605  168.968  116.732  1222.69  269.400  556.922  121.171

*Local* Communication bandwidths in MB/s - bigger is better
-----------------------------------------------------------
                                       File     Mmap    Bcopy    Bcopy   Memory   Memory
kernel     Pipe   AF/Unix    TCP     reread   reread   (libc)   (hand)     read    write
-------  -------  -------  -------  -------  -------  -------  -------  -------  -------
  A       323.57   221.12    95.28   203.32   386.49   191.25   190.68   411.29   293.50
  B       324.01   205.28   129.15   208.22   386.53   191.13   190.76   414.87   293.78
  C       324.79   200.83   111.97   206.33   385.56   191.11   190.70   414.64   293.52
  D       145.22   158.78    98.09   198.87   384.65   190.64   188.14   413.70   292.82

*Local* More Communication bandwidths in MB/s - bigger is better
----------------------------------------------------------------
            File     Mmap  Aligned  Partial  Partial  Partial  Partial  
OS          open     open    Bcopy    Bcopy     Mmap     Mmap     Mmap    Bzero
           close    close   (libc)   (hand)     read    write   rd/wrt     copy     HTTP
-------  -------  -------  -------  -------  -------  -------  -------  -------  -------
  A       206.83   293.34   189.77   230.56   674.92   330.34   312.93   293.96    8.969
  B       208.91   298.47   190.07   231.22   674.97   333.76   313.55   294.28    8.867
  C       207.15   295.53   189.75   230.87   674.32   332.87   313.11   293.99    8.890
  D       208.27   273.29   188.14   229.86   672.54   329.64   312.23   293.30    7.122

Memory latencies in nanoseconds - smaller is better
---------------------------------------------------
kernel    Mhz     L1 $     L2 $    Main mem
-------  -----  -------  -------  ---------
  A        800    3.783   44.180     172.92
  B        800    3.781   38.313     172.94
  C        800    3.788   48.874     173.18
  D        800    3.789   38.492     173.51
#######################################################################


Test set #2 was run 5 times on a 4x SMP system and the results below are
an average of the those runs (The same tools as earlier were used to
extract this data):
#######################################################################
                 L M B E N C H  2 . 0   S U M M A R Y
                 ------------------------------------

Processor, Processes - times in microseconds - smaller is better
----------------------------------------------------------------
           null     null                       open    signal   signal    fork    execve  /bin/sh
kernel     call      I/O     stat    fstat    close   install   handle  process  process  process
-------  -------  -------  -------  -------  -------  -------  -------  -------  -------  -------
  A       0.501  0.92795    5.270    1.216    6.773    1.293    4.494    233.0    716.8   2912.9
  B       0.501  0.93778    5.213    1.212    6.717    1.292    4.481    232.0    716.7   2901.2
  C       0.504  1.08863    4.982    1.206    6.970    1.293    4.442    242.8    747.9   3053.7
  D       1.916  3.12815    7.734    3.698   11.709    2.858    7.559    277.0    925.5   3959.3

File select - times in microseconds - smaller is better
-------------------------------------------------------
          select   select   select   select   select   select   select   select
kernel     10 fd   100 fd   250 fd   500 fd   10 tcp  100 tcp  250 tcp  500 tcp
-------  -------  -------  -------  -------  -------  -------  -------  -------
  A        4.411   27.406   66.021  130.107    5.246  35.1106  87.3160  168.771
  B        4.424   27.378   65.973  130.098    5.170  35.0629  85.2186  172.147
  C        5.754   42.016  100.761  196.230    6.670  50.1556  121.856  242.663
  D       13.142  102.394  249.196  500.868   14.271  113.352   283.88  546.154

Context switching with 0K - times in microseconds - smaller is better
---------------------------------------------------------------------
          2proc/0k   4proc/0k   8proc/0k  16proc/0k  32proc/0k  64proc/0k  96proc/0k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A          1.778      1.944      2.370      2.926      3.450      3.522      4.338
  B          1.724      1.910      2.028      2.614      3.010      3.412      4.748
  C          1.906      2.074      2.348      2.978      3.576      3.326      4.110
  D          6.046      5.448      6.466      5.654      5.800      5.488      5.280

Context switching with 4K - times in microseconds - smaller is better
---------------------------------------------------------------------
          2proc/4k   4proc/4k   8proc/4k  16proc/4k  32proc/4k  64proc/4k  96proc/4k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A          2.988      5.778      7.428      8.454      8.496      8.394      7.934
  B          6.818      6.644      7.614      8.698      8.548      8.598      7.906
  C          5.528      6.526      7.810      8.820      8.422      8.724      8.348
  D          8.064      8.208      8.606      9.034      8.774      8.482      8.906

Context switching with 8K - times in microseconds - smaller is better
---------------------------------------------------------------------
          2proc/8k   4proc/8k   8proc/8k  16proc/8k  32proc/8k  64proc/8k  96proc/8k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A          8.388      8.816      9.804      9.546      8.758      9.364     14.334
  B          8.402      8.098      8.990      9.326      8.204      9.286     14.350
  C          6.636      6.758      6.884      7.170      7.416     10.052     13.452
  D          8.462      8.994      9.986      9.284      9.380      9.726      9.978

Context switching with 16K - times in microseconds - smaller is better
----------------------------------------------------------------------
         2proc/16k  4proc/16k  8proc/16k  16prc/16k  32prc/16k  64prc/16k  96prc/16k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A          9.358      8.954      9.740     10.228     11.780     23.400     27.402
  B         11.792     11.962     12.350     11.138     11.658     26.948     36.402
  C         11.742     12.130     12.420     12.922     12.088     21.380     31.318
  D         12.266     12.572     12.712     12.906     12.720     13.940     20.930

Context switching with 32K - times in microseconds - smaller is better
----------------------------------------------------------------------
         2proc/32k  4proc/32k  8proc/32k  16prc/32k  32prc/32k  64prc/32k  96prc/32k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A         16.122     17.358     17.826     17.946     22.550     48.360     67.204
  B         18.504     17.958     17.784     17.574     20.966     49.100     71.354
  C         16.342     17.150     17.372     17.746     24.338     45.454     66.822
  D         19.286     18.684     18.322     18.990     24.352     51.198     68.866

Context switching with 64K - times in microseconds - smaller is better
----------------------------------------------------------------------
         2proc/64k  4proc/64k  8proc/64k  16prc/64k  32prc/64k  64prc/64k  96prc/64k
kernel   ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch  ctx swtch
-------  ---------  ---------  ---------  ---------  ---------  ---------  ---------
  A         27.460     31.226     29.184     31.742     50.472    135.096    176.156
  B         28.674     28.366     27.690     29.234     53.842    130.884    178.004
  C         28.816     28.060     28.566     29.886     51.270    141.374    178.096
  D         28.772     28.816     28.736     42.250     67.816    159.820    180.094

File create/delete and VM system latencies in microseconds - smaller is better
----------------------------------------------------------------------------
           0K       0K       1K       1K       4K       4K      10K      10K     Mmap     Prot    Page
kernel   Create   Delete   Create   Delete   Create   Delete   Create   Delete   Latency  Fault   Fault
------- -------  -------  -------  -------  -------  -------  -------  -------  -------  ------  ------
  A       88.76    33.00   162.68    58.29   187.13    58.17   268.37    70.43   4653.0   1.086    4.00
  B       90.26    32.96   164.18    58.25   166.26    58.42   262.70    70.80   4638.6   1.053    4.00
  C       91.75    31.96   164.47    57.70   168.66    58.05   261.68    71.00   5020.2   1.359    4.00
  D      101.59    35.90   154.57    63.19   155.20    63.26   244.55    77.66   6931.2   2.012    7.00

*Local* Communication latencies in microseconds - smaller is better
-------------------------------------------------------------------
kernel     Pipe   AF/Unix     UDP   RPC/UDP     TCP   RPC/TCP  TCPconn
-------  -------  -------  -------  -------  -------  -------  -------
  A        8.381   20.217   33.332  59.6795  41.2206  74.5685  117.646
  B        8.223   15.084  33.4689  55.7983  38.1489  71.8043  121.885
  C        9.135   16.638  39.5581  67.6097  47.3104  82.4835  118.360
  D       19.460   29.729  49.8840  465.325  61.6741  131.809  131.579


*Local* Communication bandwidths in MB/s - bigger is better
-----------------------------------------------------------
                                       File     Mmap    Bcopy    Bcopy   Memory   Memory
kernel     Pipe   AF/Unix    TCP     reread   reread   (libc)   (hand)     read    write
-------  -------  -------  -------  -------  -------  -------  -------  -------  -------
  A       509.65   504.18   172.52   290.36   330.88   193.43   157.06   330.87   201.57
  B       514.71   503.90   154.21   289.53   330.19   193.63   156.88   330.18   201.73
  C       474.63   496.20   144.88   289.44   330.55   194.23   158.10   330.58   200.94
  D       360.74   344.55   137.47   284.20   327.97   195.28   159.18   328.65   203.26

*Local* More Communication bandwidths in MB/s - bigger is better
----------------------------------------------------------------
            File     Mmap  Aligned  Partial  Partial  Partial  Partial  
OS          open     open    Bcopy    Bcopy     Mmap     Mmap     Mmap    Bzero
           close    close   (libc)   (hand)     read    write   rd/wrt     copy     HTTP
-------  -------  -------  -------  -------  -------  -------  -------  -------  -------
  A       292.56   269.89   192.90   167.37   785.96   202.14   202.73   350.89   10.298
  B       291.84   270.12   191.63   165.61   784.42   202.30   202.98   350.96   10.310
  C       291.89   265.37   192.08   165.79   785.20   201.56   202.06   350.30    9.952
  D       285.84   244.90   194.22   169.39   781.87   203.51   205.93   349.57    7.180

Memory latencies in nanoseconds - smaller is better
---------------------------------------------------
kernel    Mhz     L1 $     L2 $    Main mem
-------  -----  -------  -------  ---------
  A        700    4.301   12.907     182.16
  B        700    4.301   12.908     182.13
  C        700    4.303   12.915     182.30
  D        700    4.326   12.989     183.39
#######################################################################

Karim

^ permalink raw reply

* Re: kernel BUG at drivers/serial/core.c:1067 with 2.5.44
From: Russell King @ 2002-10-27 16:33 UTC (permalink / raw)
  To: Alex Romosan; +Cc: linux-kernel
In-Reply-To: <87elabdf1q.fsf@sycorax.lbl.gov>

On Sun, Oct 27, 2002 at 08:25:53AM -0800, Alex Romosan wrote:
> Oct 27 07:39:54 trinculo kernel: kernel BUG at drivers/serial/core.c:1067!

Someone called uart_set_termios without the BKL held, violating the locking
requirements.

Unfortunately:

1. You appear to be running a klogd that'll translate the addresses.
2. your ksymoops doesn't seem to know what modules are loaded.

This means we've lost the information telling us who called
uart_set_termios illegally.

-- 
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


^ permalink raw reply

* kernel BUG at drivers/serial/core.c:1067 with 2.5.44
From: Alex Romosan @ 2002-10-27 16:25 UTC (permalink / raw)
  To: linux-kernel

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

i get the following on a pentium iii 650 MHz sony vaio at boot time:

ksymoops 2.4.6 on i686 2.5.44.  Options used
     -V (default)
     -k /proc/ksyms (default)
     -l /proc/modules (default)
     -o /lib/modules/2.5.44/ (default)
     -m /boot/System.map-2.5.44 (default)
     -x

Warning: You did not tell me where to find symbol information.  I will
assume that the log matches the kernel and modules that are running
right now and I'll use the default options above for symbol resolution.
If the current kernel and/or modules do not match the log, you can get
more accurate output by telling me the kernel version and where to find
map, modules, ksyms etc.  ksymoops -h explains the options.

Oct 27 07:39:54 trinculo kernel: kernel BUG at drivers/serial/core.c:1067!
Oct 27 07:39:54 trinculo kernel: invalid operand: 0000
Oct 27 07:39:54 trinculo kernel: 3c574_cs irtty irda autofs4 microcode ppp_async uhci-hcd ohci-hcd usbcore nls_cp437 vfat snd-pcm-oss snd-mixer-oss snd-ymfpci snd-pcm snd-mpu401-uart snd-rawmidi snd-ac97-codec snd-opl3-lib snd-timer snd-hwdep snd-seq-device snd soundcore
Oct 27 07:39:54 trinculo kernel: CPU:    0
Oct 27 07:39:54 trinculo kernel: EIP:    0060:[uart_set_termios+41/356]    Not tainted
Oct 27 07:39:54 trinculo kernel: EFLAGS: 00010286
Oct 27 07:39:54 trinculo kernel: eax: cfd21900   ebx: cab74000   ecx: 000008bd   edx: c13b1ecc
Oct 27 07:39:54 trinculo kernel: esi: c13b1ef0   edi: 000008bd   ebp: cb71cd3c   esp: cab75e58
Oct 27 07:39:54 trinculo kernel: ds: 0068   es: 0068   ss: 0068
Oct 27 07:39:54 trinculo kernel: Stack: cb7cde00 c13b1ef0 cab75ea8 00000000 00000001 d11b05f8 ca932000 cab75e84
Oct 27 07:39:54 trinculo kernel:        ca932000 cb7cde00 ca814000 00000005 00000000 000008bd 00000000 7f1c030b
Oct 27 07:39:54 trinculo kernel:        01000415 1a131100 170f1200 2f000016 d11b1321 cb7cde00 00000000 ca814000
Oct 27 07:39:54 trinculo kernel: Call Trace: [<d11b05f8>]  [<d11b1321>]  [vsnprintf+987/1052]  [dev_open+76/164]  [dev_change_flags+81/260]  [dev_ifsioc+117/868]  [dev_ioctl+783/1064]  [<d11a1f49>]  [sock_ioctl+203/240]  [sys_ioctl+637/724]  [syscall_call+7/11]
Oct 27 07:39:54 trinculo kernel: Code: 0f 0b 2b 04 9e 56 27 c0 8d b4 26 00 00 00 00 8b 4c 24 1c 3b
Using defaults from ksymoops -t elf32-i386 -a i386


>>eax; cfd21900 <_end+261855052/282709676>
>>ebx; cab74000 <_end+176209484/282709676>
>>edx; c13b1ecc <_end+17079576/282709676>
>>esi; c13b1ef0 <_end+17079612/282709676>
>>ebp; cb71cd3c <_end+188435336/282709676>
>>esp; cab75e58 <_end+176217252/282709676>

Trace; d11b05f8 <.data.end+31521/????>
Trace; d11b1321 <END_OF_CODE+34890/????>

Code;  00000000 Before first symbol
00000000 <_EIP>:
Code;  00000000 Before first symbol
   0:   0f 0b                     ud2a   
Code;  00000002 Before first symbol
   2:   2b 04 9e                  sub    (%esi,%ebx,4),%eax
Code;  00000005 Before first symbol
   5:   56                        push   %esi
Code;  00000006 Before first symbol
   6:   27                        daa    
Code;  00000007 Before first symbol
   7:   c0 8d b4 26 00 00 00      rorb   $0x0,0x26b4(%ebp)
Code;  0000000e Before first symbol
   e:   00 8b 4c 24 1c 3b         add    %cl,0x3b1c244c(%ebx)


1 warning issued.  Results may not be reliable.

the funny thing is i've been running this kernel since it came out and
the oops didn't happen until today. i disabled irda in the bios and
now i can boot again. i am attaching my .config file.

--alex--


[-- Attachment #2: config-2.5.44 --]
[-- Type: text/plain, Size: 5918 bytes --]

CONFIG_X86=y
CONFIG_UID16=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_EXPERIMENTAL=y
CONFIG_NET=y
CONFIG_SYSVIPC=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_SYSCTL=y
CONFIG_MODULES=y
CONFIG_MODVERSIONS=y
CONFIG_KMOD=y
CONFIG_MPENTIUMIII=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_CMPXCHG=y
CONFIG_X86_XADD=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_X86_L1_CACHE_SHIFT=5
CONFIG_X86_TSC=y
CONFIG_X86_GOOD_APIC=y
CONFIG_X86_USE_PPRO_CHECKSUM=y
CONFIG_HUGETLB_PAGE=y
CONFIG_PREEMPT=y
CONFIG_X86_UP_APIC=y
CONFIG_X86_UP_IOAPIC=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_MCE=y
CONFIG_MICROCODE=m
CONFIG_X86_MSR=m
CONFIG_X86_CPUID=m
CONFIG_NOHIGHMEM=y
CONFIG_MTRR=y
CONFIG_HAVE_DEC_LOCK=y
CONFIG_PM=y
CONFIG_APM=y
CONFIG_APM_CPU_IDLE=y
CONFIG_APM_ALLOW_INTS=y
CONFIG_PCI=y
CONFIG_PCI_GOANY=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_NAMES=y
CONFIG_ISA=y
CONFIG_HOTPLUG=y
CONFIG_PCMCIA=y
CONFIG_CARDBUS=y
CONFIG_KCORE_ELF=y
CONFIG_BINFMT_AOUT=m
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m
CONFIG_PNP=y
CONFIG_PNP_NAMES=y
CONFIG_ISAPNP=y
CONFIG_PNPBIOS=y
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_LBD=y
CONFIG_IDE=y
CONFIG_BLK_DEV_IDE=y
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_BLK_DEV_IDECD=y
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_BLK_DEV_GENERIC=y
CONFIG_IDEPCI_SHARE_IRQ=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_BLK_DEV_IDEDMA=y
CONFIG_BLK_DEV_ADMA=y
CONFIG_BLK_DEV_PIIX=y
CONFIG_IDEDMA_AUTO=y
CONFIG_BLK_DEV_IDE_MODES=y
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_NETFILTER=y
CONFIG_FILTER=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_MROUTE=y
CONFIG_IP_PIMSM_V1=y
CONFIG_SYN_COOKIES=y
CONFIG_IP_NF_CONNTRACK=m
CONFIG_IP_NF_FTP=m
CONFIG_IP_NF_IRC=m
CONFIG_IP_NF_QUEUE=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_LIMIT=m
CONFIG_IP_NF_MATCH_MAC=m
CONFIG_IP_NF_MATCH_PKTTYPE=m
CONFIG_IP_NF_MATCH_MARK=m
CONFIG_IP_NF_MATCH_MULTIPORT=m
CONFIG_IP_NF_MATCH_TOS=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_DSCP=m
CONFIG_IP_NF_MATCH_AH_ESP=m
CONFIG_IP_NF_MATCH_LENGTH=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_MATCH_TCPMSS=m
CONFIG_IP_NF_MATCH_HELPER=m
CONFIG_IP_NF_MATCH_STATE=m
CONFIG_IP_NF_MATCH_CONNTRACK=m
CONFIG_IP_NF_MATCH_UNCLEAN=m
CONFIG_IP_NF_MATCH_OWNER=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_MIRROR=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_NAT_SNMP_BASIC=m
CONFIG_IP_NF_NAT_IRC=m
CONFIG_IP_NF_NAT_FTP=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_TOS=m
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_DSCP=m
CONFIG_IP_NF_TARGET_MARK=m
CONFIG_IP_NF_TARGET_LOG=m
CONFIG_IP_NF_TARGET_ULOG=m
CONFIG_IP_NF_TARGET_TCPMSS=m
CONFIG_IPV6_SCTP__=y
CONFIG_NETDEVICES=y
CONFIG_DUMMY=m
CONFIG_PPP=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
CONFIG_NET_PCMCIA=y
CONFIG_PCMCIA_3C574=m
CONFIG_IRDA=m
CONFIG_IRLAN=m
CONFIG_IRNET=m
CONFIG_IRCOMM=m
CONFIG_IRDA_ULTRA=y
CONFIG_IRDA_CACHE_LAST_LSAP=y
CONFIG_IRDA_FAST_RR=y
CONFIG_IRDA_DEBUG=y
CONFIG_IRTTY_SIR=m
CONFIG_IRPORT_SIR=m
CONFIG_NSC_FIR=m
CONFIG_WINBOND_FIR=m
CONFIG_TOSHIBA_FIR=m
CONFIG_SMC_IRCC_FIR=m
CONFIG_ALI_FIR=m
CONFIG_VLSI_FIR=m
CONFIG_INPUT=y
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=m
CONFIG_INPUT_EVDEV=y
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=m
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=y
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_WARRIOR=m
CONFIG_INPUT_MISC=y
CONFIG_INPUT_PCSPKR=m
CONFIG_INPUT_UINPUT=m
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
CONFIG_INTEL_RNG=m
CONFIG_RTC=y
CONFIG_SONYPI=y
CONFIG_AUTOFS4_FS=m
CONFIG_REISERFS_FS=y
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_CRAMFS=m
CONFIG_TMPFS=y
CONFIG_RAMFS=y
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_PROC_FS=y
CONFIG_DEVPTS_FS=y
CONFIG_ROMFS_FS=m
CONFIG_EXT2_FS=y
CONFIG_UDF_FS=m
CONFIG_NFS_FS=m
CONFIG_NFS_V3=y
CONFIG_NFSD=m
CONFIG_NFSD_V3=y
CONFIG_NFSD_TCP=y
CONFIG_SUNRPC=m
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=m
CONFIG_SMB_FS=m
CONFIG_SMB_NLS_DEFAULT=y
CONFIG_SMB_NLS_REMOTE="cp437"
CONFIG_ZISOFS_FS=y
CONFIG_MSDOS_PARTITION=y
CONFIG_SMB_NLS=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="cp437"
CONFIG_NLS_CODEPAGE_437=m
CONFIG_NLS_ISO8859_1=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_UTF8=m
CONFIG_VGA_CONSOLE=y
CONFIG_VIDEO_SELECT=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_FB_VESA=y
CONFIG_VIDEO_SELECT=y
CONFIG_FB_NEOMAGIC=y
CONFIG_FBCON_CFB24=y
CONFIG_FBCON_ACCEL=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_SOUND=m
CONFIG_SND=m
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_RTCTIMER=m
CONFIG_SND_DUMMY=m
CONFIG_SND_VIRMIDI=m
CONFIG_SND_MTPAV=m
CONFIG_SND_SERIAL_U16550=m
CONFIG_SND_MPU401=m
CONFIG_SND_YMFPCI=m
CONFIG_USB=m
CONFIG_USB_DEVICEFS=y
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_UHCI_HCD_ALT=m
CONFIG_USB_BLUETOOTH_TTY=m
CONFIG_USB_PRINTER=m
CONFIG_USB_HID=m
CONFIG_USB_HIDINPUT=y
CONFIG_HID_FF=y
CONFIG_HID_PID=y
CONFIG_LOGITECH_FF=y
CONFIG_USB_HIDDEV=y
CONFIG_USB_KBD=m
CONFIG_USB_MOUSE=m
CONFIG_USB_AIPTEK=m
CONFIG_USB_MDC800=m
CONFIG_USB_SCANNER=m
CONFIG_USB_RIO500=m
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_STACKOVERFLOW=y
CONFIG_DEBUG_SLAB=y
CONFIG_DEBUG_IOVIRT=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_X86_EXTRA_IRQS=y
CONFIG_X86_FIND_SMP_CONFIG=y
CONFIG_X86_MPPARSE=y
CONFIG_SECURITY_CAPABILITIES=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m
CONFIG_X86_BIOS_REBOOT=y

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


-- 
| I believe the moment is at hand when, by a paranoiac and active |
|  advance of the mind, it will be possible (simultaneously with  |
|  automatism and other passive states) to systematize confusion  |
|  and thus to help to discredit completely the world of reality. |

^ permalink raw reply

* typo in 2.4.19 free_area_init_core()?
From: Chen, Kenneth W @ 2002-10-27 16:01 UTC (permalink / raw)
  To: marcelo; +Cc: Linux Kernel Mailing List

Marcelo,

Is this a typo in function free_area_init_core()?  The information on realsize is more interesting than the size variable.



--- mm/page_alloc.c~	Sun Oct 27 00:46:10 2002
+++ mm/page_alloc.c	Sun Oct 27 00:46:35 2002
@@ -735,7 +735,7 @@
 		if (zholes_size)
 			realsize -= zholes_size[j];
 
-		printk("zone(%lu): %lu pages.\n", j, size);
+		printk("zone(%lu): %lu pages.\n", j, realsize);
 		zone->size = size;
 		zone->name = zone_names[j];
 		zone->lock = SPIN_LOCK_UNLOCKED;

^ permalink raw reply

* Re: [PATCH] unified SysV and Posix mqueues as FS
From: Alexander Viro @ 2002-10-27 15:53 UTC (permalink / raw)
  To: Peter Waechtler; +Cc: linux-kernel, jakub, torvalds
In-Reply-To: <3DBC075B.AF32C23@mac.com>



On Sun, 27 Oct 2002, Peter Waechtler wrote:

> I applied the patch from Jakub against 2.5.44
> There are still open issues but it's important to get this in before
> feature freeze.
> 
> While you can implement Posix mqueues in userland (Irix is doing this
> with fcntl(fd,F_SETLKW,) and shmem) a kernel implementation has some advantages:

*thud*

ioctls on _directories_, of all things?


^ permalink raw reply

* Re: [PATCH] unified SysV and Posix mqueues as FS
From: Jeff Garzik @ 2002-10-27 15:47 UTC (permalink / raw)
  To: Peter Waechtler; +Cc: linux-kernel, jakub, torvalds
In-Reply-To: <3DBC075B.AF32C23@mac.com>

Peter Waechtler wrote:

>I applied the patch from Jakub against 2.5.44
>There are still open issues but it's important to get this in before
>feature freeze.
>
>While you can implement Posix mqueues in userland (Irix is doing this
>with fcntl(fd,F_SETLKW,) and shmem) a kernel implementation has some advantages:
>
>a) no hassle with locks in case an app crashes
>b) guaranteed notification with signals (you can have two apps with
>	different uid that can acces the queue but aren't allowed to
>	send signals)
>c) surprisingly, seems a little faster - did not test with NPT
>
>
>Open issues are:
>
>- notification not tested
>- still linear search in queues
>- I would really enhance the sys_ipc for handling posix mqueue as well
>	(yes, perhaps it's more ugly - but it fits naturally, you can't
>	specify a priority with a read() - ending up with ioctl())
>- funny "locking" in ipc/util.c 
>- check the ipc ids
>
>  
>

I don't comment on the overall concept of the patch itself, it's not my 
area of expertise and it's too early in the morning to think about it ;-)

However, there are three issues to consider in the meantime:
* Documentation/CodingStyle problems.  You need to use standard 
one-tab-for-indentation formatting, just like the code around what you 
are adding/modifying.
* There is weird text translation in the patch (short example follows). 
 It may be better if you use mutt and vi to include your patch directly, 
without word wrapping, if attachments are getting mangled.

-		msq =3D msg_lock(msqid);
-		err =3D -EIDRM;
-		if(msq=3D=3DNULL)
-			goto out_free;
-		ss_del(&s);
-		=

* Linus probably won't see your email, he has threatened to flush his entire inbox when he returns from his trip ;-)

Regards,

	Jeff






^ permalink raw reply

* Re: The return of the return of crunch time (2.5 merge candidate list 1.6)
From: Andrew Pimlott @ 2002-10-27 15:20 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kernel
In-Reply-To: <20021027080125.A14145@wotan.suse.de>

On Sun, Oct 27, 2002 at 08:01:25AM +0100, Andi Kleen wrote:
> On Sat, Oct 26, 2002 at 03:09:06PM -0400, Andrew Pimlott wrote:
> > Would you mind spelling out the problem case?  It's ususally not a
> > big deal, because when a target and dependency have the same
> > timestamp, make considers the target to be newer.
> 
> I assume you mean 'older', not 'newer'?

No (but maybe I phrased it badly):

    % cat Makefile 
    foo: bar
            echo did it
    % touch foo bar
    % ls --full-time foo bar
    -rw-r--r--    1 pimlott  pimlott         0 Sun Oct 27 09:36:26 2002 bar
    -rw-r--r--    1 pimlott  pimlott         0 Sun Oct 27 09:36:26 2002 foo
    % make
    make: `foo' is up to date.

Ie, foo is considered newer.

> Any default action is wrong in some case when an rule can take less
> than a second,

I'm sure there is a case where this is true, but my imagination and
googling failed to provide one.  Even the messages to the GNU make
mailing list when Paul Eggert implemented nanosecond support didn't
include a specific rationale.

> there is no replacement for an accurate time stamp.

While I agree, I thought that a concrete example might help persuade
others.  (I think I've even run into instances where second
resolution was a real problem, I just can't recall them.)

> > I really feel strongly that you should not export resolution finer
> > that what the filesystem can store.  There is too much risk of
> > breakage (especially given the late date of submission), and if (as
> > you said) all common filesystems will be able to store sub-second
> > timestamps soon, this shouldn't be a significant drawback.  If this
> > requires a new hook into the filesystem, so be it.
> 
> You have to export in some unit and it is convenient to use the most
> finegrained available (ns). This matches what other Unixes like
> Solaris do too. The program can always chose to ignore the ns 
> (which will most do at least initially) part or even round more.
> 
> What happens currently in my patch is that the inode in memory stores jiffies
> resolution. As long as you don't run out of inode cache and need to
> flush/reload an inode you always have the best resolution.
> 
> When an inode is flushed on an old fs with only second resolution the 
> subsecond part is truncated. This has the drawback that an inode
> timestamp can jump backwards on reload as seen by user space.

Example problem case (assuming a fs that stores only seconds, and a
make that uses nanoseconds):

- I run the "save and build" command while editing foo.c at T = 0.1.
- foo.o is built at T = 0.2.
- I do some read-only operations on foo.c (eg, checkin), such that
  foo.o gets flushed but foo.c stays in memory.
- I build again.  foo.o is reloaded and has timestamp T = 0, and so
  gets spuriously rebuilt.

> Another way would be to round on flush, but that also has some problems :-
> for example you can get timestamps which are ahead of the current
> wall clock.

Only if the flush is less than a second after the write, right?
How likely is that in Linux?

I tend to prefer the proposal to set the nanosecond field to 10^9-1.
At least my scenario above doesn't happen.

Andrew

^ permalink raw reply

* [PATCH] unified SysV and Posix mqueues as FS
From: Peter Waechtler @ 2002-10-27 15:33 UTC (permalink / raw)
  To: linux-kernel, jakub, torvalds

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

I applied the patch from Jakub against 2.5.44
There are still open issues but it's important to get this in before
feature freeze.

While you can implement Posix mqueues in userland (Irix is doing this
with fcntl(fd,F_SETLKW,) and shmem) a kernel implementation has some advantages:

a) no hassle with locks in case an app crashes
b) guaranteed notification with signals (you can have two apps with
	different uid that can acces the queue but aren't allowed to
	send signals)
c) surprisingly, seems a little faster - did not test with NPT


Open issues are:

- notification not tested
- still linear search in queues
- I would really enhance the sys_ipc for handling posix mqueue as well
	(yes, perhaps it's more ugly - but it fits naturally, you can't
	specify a priority with a read() - ending up with ioctl())
- funny "locking" in ipc/util.c 
- check the ipc ids

[-- Attachment #2: posix-mqueue.txt --]
[-- Type: text/plain, Size: 43929 bytes --]

diff -Nur -X dontdiff vanilla-2.5.44/Documentation/ioctl-number.txt linux-2.5.44/Documentation/ioctl-number.txt
--- vanilla-2.5.44/Documentation/ioctl-number.txt	2002-04-20 18:22:08.000000000 +0200
+++ linux-2.5.44/Documentation/ioctl-number.txt	2002-10-27 15:33:23.000000000 +0100
@@ -186,6 +186,7 @@
 0xB0	all	RATIO devices		in development:
 					<mailto:vgo@ratio.de>
 0xB1	00-1F	PPPoX			<mailto:mostrows@styx.uwaterloo.ca>
+0xB2	00-1F	linux/mqueue.h
 0xCB	00-1F	CBM serial IEC bus	in development:
 					<mailto:michael.klein@puffin.lb.shuttle.de>
 
diff -Nur -X dontdiff vanilla-2.5.44/include/linux/mqueue.h linux-2.5.44/include/linux/mqueue.h
--- vanilla-2.5.44/include/linux/mqueue.h	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.5.44/include/linux/mqueue.h	2002-10-23 14:48:31.000000000 +0200
@@ -0,0 +1,37 @@
+#ifndef _LINUX_MQUEUE_H
+#define _LINUX_MQUEUE_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#include <asm/siginfo.h>
+
+struct mq_attr {
+	long	mq_flags;       /* O_NONBLOCK or 0 */
+	long	mq_maxmsg;      /* Maximum number of messages in the queue */
+	long	mq_msgsize;     /* Maximum size of one message in bytes */
+	long	mq_curmsgs;     /* Current number of messages in the queue */
+	long	__pad[2];
+};
+
+struct mq_open {
+	char            *mq_name;       /* pathname */
+	int             mq_oflag;       /* flags */
+	mode_t          mq_mode;        /* mode */
+	struct mq_attr  mq_attr;        /* attributes */
+};
+
+struct mq_sndrcv {
+	size_t          mq_len;         /* message length */
+	long            mq_type;        /* message type */
+	char            *mq_buf;        /* message buffer */
+};
+
+#define MQ_OPEN                _IOW(0xB2, 0, struct mq_open)
+#define MQ_GETATTR     _IOR(0xB2, 1, struct mq_attr)
+#define MQ_SEND                _IOW(0xB2, 2, struct mq_sndrcv)
+#define MQ_RECEIVE     _IOWR(0xB2, 3, struct mq_sndrcv)
+#define MQ_NOTIFY      _IOW(0xB2, 4, struct sigevent)
+
+#define MQ_DEFAULT_TYPE        0x7FFFFFFE
+
+#endif /* _LINUX_MQUEUE_H */
diff -Nur -X dontdiff vanilla-2.5.44/include/linux/msg.h linux-2.5.44/include/linux/msg.h
--- vanilla-2.5.44/include/linux/msg.h	2002-08-10 00:09:02.000000000 +0200
+++ linux-2.5.44/include/linux/msg.h	2002-10-25 20:06:47.000000000 +0200
@@ -2,6 +2,7 @@
 #define _LINUX_MSG_H
 
 #include <linux/ipc.h>
+#include <linux/signal.h>
 
 /* ipcs ctl commands */
 #define MSG_STAT 11
@@ -49,7 +50,7 @@
 	unsigned short  msgseg; 
 };
 
-#define MSGMNI    16   /* <= IPCMNI */     /* max # of msg queue identifiers */
+#define MSGMNI   128   /* <= IPCMNI */     /* max # of msg queue identifiers */
 #define MSGMAX  8192   /* <= INT_MAX */   /* max size of message (bytes) */
 #define MSGMNB 16384   /* <= INT_MAX */   /* default max size of a message queue */
 
@@ -63,33 +64,88 @@
 
 #ifdef __KERNEL__
 
+#define SEARCH_ANY		1
+#define SEARCH_EQUAL		2
+#define SEARCH_NOTEQUAL		3
+#define SEARCH_LESSEQUAL	4
+
+#define DATALEN_MSG	(PAGE_SIZE-sizeof(struct msg_msg))
+#define DATALEN_SEG	(PAGE_SIZE-sizeof(struct msg_msgseg))
+
+/* used  by sys_msgctl(,IPC_SET,) */
+struct msq_setbuf {
+	unsigned long	qbytes;
+	uid_t		uid;
+	gid_t		gid;
+	mode_t		mode;
+};
+
+/* one msg_receiver structure for each sleeping receiver */
+struct msg_receiver {
+	struct list_head r_list;
+	struct task_struct *r_tsk;
+
+	int r_mode;
+	long r_msgtype;
+	long r_maxsize;
+
+	struct msg_msg* volatile r_msg;
+};
+
+/* one msg_sender for each sleeping sender */
+struct msg_sender {
+	struct list_head list;
+	struct task_struct *tsk;
+};
+
+struct msg_msgseg {
+	struct msg_msgseg *next;
+	/* the next part of the message follows immediately */
+};
+
 /* one msg_msg structure for each message */
 struct msg_msg {
 	struct list_head m_list; 
 	long  m_type;          
 	int m_ts;           /* message text size */
-	struct msg_msgseg* next;
+	struct msg_msgseg *next;
 	/* the actual message follows immediately */
 };
 
-#define DATALEN_MSG	(PAGE_SIZE-sizeof(struct msg_msg))
-#define DATALEN_SEG	(PAGE_SIZE-sizeof(struct msg_msgseg))
+struct mq_link {
+	struct list_head link;
+	struct task_struct *tsk;
+	struct mq_attr *attr;
+};
 
 /* one msq_queue structure for each present queue on the system */
 struct msg_queue {
 	struct kern_ipc_perm q_perm;
-	time_t q_stime;			/* last msgsnd time */
-	time_t q_rtime;			/* last msgrcv time */
-	time_t q_ctime;			/* last change time */
-	unsigned long q_cbytes;		/* current number of bytes on queue */
-	unsigned long q_qnum;		/* number of messages in queue */
-	unsigned long q_qbytes;		/* max number of bytes on queue */
-	pid_t q_lspid;			/* pid of last msgsnd */
-	pid_t q_lrpid;			/* last receive pid */
+#define q_flags q_perm.mode
+	time_t q_stime;         /* last msgsnd time */
+	time_t q_rtime;         /* last msgrcv time */
+	time_t q_ctime;         /* last change time */
+	unsigned long q_cbytes;     /* current number of bytes on queue */
+	unsigned long q_qnum;       /* number of messages in queue */
+	unsigned long q_qbytes;     /* max number of bytes on queue */
+
+	unsigned int q_msgsize;     /* max number of bytes for one message */
+	unsigned int q_maxmsg;      /* max number of outstanding messages */
+
+	pid_t q_lspid;          /* pid of last msgsnd */
+	pid_t q_lrpid;          /* last receive pid */
+
+	int q_signo;            /* signal to be sent if empty queue with no waiting
+			                receivers should be sent */
+	pid_t q_pid;            /* to which pid */
+	sigval_t q_sigval;      /* which value to pass */
+	int id;
 
 	struct list_head q_messages;
 	struct list_head q_receivers;
 	struct list_head q_senders;
+	unsigned int q_namelen;
+	unsigned char q_name[0];
 };
 
 asmlinkage long sys_msgget (key_t key, int msgflg);
diff -Nur -X dontdiff vanilla-2.5.44/ipc/msg.c linux-2.5.44/ipc/msg.c
--- vanilla-2.5.44/ipc/msg.c	2002-10-13 23:03:57.000000000 +0200
+++ linux-2.5.44/ipc/msg.c	2002-10-27 15:42:12.000000000 +0100
@@ -13,15 +13,23 @@
  * mostly rewritten, threaded and wake-one semantics added
  * MSGMAX limit removed, sysctl's added
  * (c) 1999 Manfred Spraul <manfreds@colorfullife.com>
+ *
+ * make it a filesystem (based on Christoph Rohland's work on shmfs),
+ * (c) 2000 Jakub Jelinek <jakub@redhat.com>
+ * adapted and cleaned up for 2.5.44 by Peter Wächtler <pwaechtler@mac.com>
  */
 
 #include <linux/config.h>
 #include <linux/slab.h>
-#include <linux/msg.h>
 #include <linux/spinlock.h>
 #include <linux/init.h>
+#include <linux/fs.h>
 #include <linux/proc_fs.h>
 #include <linux/list.h>
+#include <linux/signal.h>
+#include <linux/mqueue.h>
+#include <linux/msg.h>
+#include <linux/namei.h>
 #include <linux/security.h>
 #include <asm/uaccess.h>
 #include "util.h"
@@ -30,34 +38,87 @@
 int msg_ctlmax = MSGMAX;
 int msg_ctlmnb = MSGMNB;
 int msg_ctlmni = MSGMNI;
+static int msg_mode;
+
+#define MSG_FS_MAGIC	822419456
+
+#define MSG_NAME_LEN NAME_MAX
+#define MSG_FMT ".IPC_%08x"
+#define MSG_FMT_LEN 13
+
+#define MSG_UNLK	0010000 /* filename is unlinked */
+#define MSG_SYSV	0020000 /* It is a SYSV message queue */
+
+static struct super_block * msg_sb;
+
+static struct super_block *msg_read_super(struct file_system_type *,int , char *, void *);
+static void msg_put_super(struct super_block *);
+static int msg_remount_fs(struct super_block *, int *, char *);
+static void msg_fill_inode(struct inode *);
+static int msg_statfs(struct super_block *, struct statfs *);
+static int msg_create(struct inode *,struct dentry *,int);
+static struct dentry *msg_lookup(struct inode *,struct dentry *);
+static int msg_unlink(struct inode *,struct dentry *);
+static int msg_setattr(struct dentry *dent, struct iattr *attr);
+static void msg_delete(struct inode *);
+static int msg_readdir(struct file *, void *, filldir_t);
+static int msg_remove_name(int id);
+static int msg_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
+static int msg_root_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
+static ssize_t msg_read(struct file *, char *, size_t, loff_t *);
+static ssize_t msg_write(struct file *, const char *, size_t, loff_t *);
+/* FIXME: Support poll on mq
+static unsigned int msg_poll(struct file *, poll_table *);
+ */
+static ssize_t msg_send (struct inode *, struct file *, const char *, size_t, long);
+static ssize_t msg_receive (struct inode *, struct file *, char *, size_t, long *);
+static int msg_flush (struct file *);
+static int msg_release (struct inode *, struct file *);
 
-/* one msg_receiver structure for each sleeping receiver */
-struct msg_receiver {
-	struct list_head r_list;
-	struct task_struct* r_tsk;
-
-	int r_mode;
-	long r_msgtype;
-	long r_maxsize;
+static void freeque (int id);
+static int newque (key_t key, const char *name, int namelen, struct mq_attr *attr, int msgflg);
 
-	struct msg_msg* volatile r_msg;
+static struct file_system_type msg_fs_type = {
+	.name		= "msgfs",
+	.get_sb		= msg_read_super,
+	.kill_sb	= kill_litter_super,
 };
 
-/* one msg_sender for each sleeping sender */
-struct msg_sender {
-	struct list_head list;
-	struct task_struct* tsk;
+static struct super_operations msg_sops = {
+	.read_inode=	msg_fill_inode,
+	.delete_inode=	msg_delete,
+	.put_super=	msg_put_super,
+	.statfs=		msg_statfs,
+	.remount_fs=	msg_remount_fs,
 };
 
-struct msg_msgseg {
-	struct msg_msgseg* next;
-	/* the next part of the message follows immediately */
+static struct file_operations msg_root_operations = {
+	.readdir=	msg_readdir,
+	.ioctl=		msg_root_ioctl,
 };
 
-#define SEARCH_ANY		1
-#define SEARCH_EQUAL		2
-#define SEARCH_NOTEQUAL		3
-#define SEARCH_LESSEQUAL	4
+static struct inode_operations msg_root_inode_operations = {
+	.create=		msg_create,
+	.lookup=		msg_lookup,
+	.unlink=		msg_unlink,
+};
+
+static struct file_operations msg_file_operations = {
+	.read=		msg_read,
+	.write=		msg_write,
+	.ioctl=		msg_ioctl,
+/* FIXME: Support poll on mq *
+	poll=		msg_poll,
+ */
+	.flush=		msg_flush,
+	.release=	msg_release,
+};
+
+static struct inode_operations msg_inode_operations = {
+	.setattr=	msg_setattr,
+};
+
+static LIST_HEAD(mq_open_links);
 
 static atomic_t msg_bytes = ATOMIC_INIT(0);
 static atomic_t msg_hdrs = ATOMIC_INIT(0);
@@ -67,33 +128,529 @@
 #define msg_lock(id)	((struct msg_queue*)ipc_lock(&msg_ids,id))
 #define msg_unlock(id)	ipc_unlock(&msg_ids,id)
 #define msg_rmid(id)	((struct msg_queue*)ipc_rmid(&msg_ids,id))
-#define msg_checkid(msq, msgid)	\
-	ipc_checkid(&msg_ids,&msq->q_perm,msgid)
-#define msg_buildid(id, seq) \
-	ipc_buildid(&msg_ids, id, seq)
+#define msg_get(id)   ((struct msg_queue*)ipc_get(&msg_ids,id))
+#define msg_buildid(id, seq) 	ipc_buildid(&msg_ids, id, seq)
 
-static void freeque (int id);
-static int newque (key_t key, int msgflg);
 #ifdef CONFIG_PROC_FS
 static int sysvipc_msg_read_proc(char *buffer, char **start, off_t offset, int length, int *eof, void *data);
 #endif
 
 void __init msg_init (void)
 {
+	struct vfsmount *res;
 	ipc_init_ids(&msg_ids,msg_ctlmni);
-
+	register_filesystem (&msg_fs_type);
+	res = kern_mount(&msg_fs_type);
+	if (IS_ERR(res)) {
+		unregister_filesystem(&msg_fs_type);
+		return;
+	}
 #ifdef CONFIG_PROC_FS
 	create_proc_read_entry("sysvipc/msg", 0, 0, sysvipc_msg_read_proc, NULL);
 #endif
 }
 
-static int newque (key_t key, int msgflg)
+static int msg_parse_options(char *options)
+{
+  int blocks = msg_ctlmnb * msg_ctlmni;
+  int inodes = msg_ctlmni;
+  umode_t mode = msg_mode;
+  char *this_char, *value;
+
+  this_char = NULL;
+  if ( options )
+      this_char = strsep(&options,",");
+  for ( ; this_char; this_char = strsep(&options,",")) {
+      if ((value = strchr(this_char,'=')) != NULL)
+          *value++ = 0;
+      if (!strcmp(this_char,"nr_blocks")) {
+          if (!value || !*value)
+              return 1;
+          blocks = simple_strtoul(value,&value,0);
+          if (*value)
+              return 1;
+      }
+      else if (!strcmp(this_char,"nr_inodes")) {
+          if (!value || !*value)
+              return 1;
+          inodes = simple_strtoul(value,&value,0);
+          if (*value)
+              return 1;
+      }
+      else if (!strcmp(this_char,"mode")) {
+          if (!value || !*value)
+              return 1;
+          mode = simple_strtoul(value,&value,8);
+          if (*value)
+              return 1;
+      }
+      else
+          return 1;
+  }
+/* FIXME *
+  msg_ctlmni = inodes;
+  msg_ctlmnb = inodes ? blocks / inodes : 0;
+ */
+  msg_mode   = mode;
+
+  return 0;
+}
+
+static int
+msg_fill_super (struct super_block *sb, void *data, int silent)
+{
+  struct inode * root_inode;
+
+/* FIXME *
+  msg_ctlmnb = MSGMNB;
+  msg_ctlmni = MSGMNI;
+ */
+  msg_mode   = S_IRWXUGO | S_ISVTX;
+  if (msg_parse_options (data)) {
+      printk(KERN_ERR "msg fs invalid option\n");
+      return -EINVAL;
+  }
+
+  sb->s_blocksize = PAGE_SIZE;
+  sb->s_blocksize_bits = PAGE_SHIFT;
+  sb->s_magic = MSG_FS_MAGIC;
+  sb->s_op = &msg_sops;
+  root_inode = iget (sb, SEQ_MULTIPLIER);
+  if (!root_inode)
+      return -ENOMEM;
+  root_inode->i_op = &msg_root_inode_operations;
+  root_inode->i_sb = sb;
+  root_inode->i_nlink = 2;
+  root_inode->i_mode = S_IFDIR | msg_mode;
+  sb->s_root = d_alloc_root(root_inode);
+  if (!sb->s_root)
+      goto out_no_root;
+  msg_sb = sb;
+  return 0;
+
+out_no_root:
+  printk(KERN_ERR "msg_fill_super: get root inode failed\n");
+  iput(root_inode);
+  return -ENOMEM;
+}
+
+static struct super_block *msg_read_super(struct file_system_type *fs_type,
+	       int flags, char *dev_name, void *data)
+{
+  return get_sb_single (fs_type, flags, data, msg_fill_super);
+}
+
+static int msg_remount_fs (struct super_block *sb, int *flags, char *data)
+{
+  if (msg_parse_options (data))
+      return -EINVAL;
+  return 0;
+}
+
+static inline int msg_checkid(struct msg_queue *msq, int id)
+{
+  if (!(msq->q_flags & MSG_SYSV))
+      return -EINVAL;
+  if (ipc_checkid(&msg_ids,&msq->q_perm,id))
+      return -EIDRM;
+  return 0;
+}
+
+static void msg_put_super(struct super_block *sb)
+{
+  int i;
+  struct msg_queue *msq;
+
+  down(&msg_ids.sem);
+  for(i = 0; i <= msg_ids.max_id; i++) {
+      if (!(msq = msg_lock (i)))
+          continue;
+      freeque(i);
+  }
+  dput (sb->s_root);
+  up(&msg_ids.sem);
+}
+
+static int msg_statfs(struct super_block *sb, struct statfs *buf)
+{
+  buf->f_type = MSG_FS_MAGIC;
+  buf->f_bsize = PAGE_SIZE;
+  buf->f_blocks = (msg_ctlmnb * msg_ctlmni) >> PAGE_SHIFT;
+  buf->f_bavail = buf->f_bfree = buf->f_blocks - (atomic_read(&msg_bytes) >> PAGE_SHIFT);
+  buf->f_files = msg_ctlmni;
+  buf->f_ffree = msg_ctlmni - atomic_read(&msg_hdrs);
+  buf->f_namelen = MSG_NAME_LEN;
+  return 0;
+}
+
+static void msg_fill_inode(struct inode * inode)
+{
+  int id;
+  struct msg_queue *msq;
+  id = inode->i_ino;
+  inode->i_op = NULL;
+  inode->i_mode = 0;
+
+  if (id < SEQ_MULTIPLIER) {
+      if (!(msq = msg_lock (id)))
+          return;
+      inode->i_mode = (msq->q_flags & S_IRWXUGO) | S_IFIFO;
+      inode->i_uid  = msq->q_perm.uid;
+      inode->i_gid  = msq->q_perm.gid;
+      inode->i_size = msq->q_cbytes;
+      inode->i_mtime = msq->q_stime;
+      inode->i_atime = msq->q_stime > msq->q_rtime ? msq->q_stime : msq->q_rtime;
+      inode->i_ctime = msq->q_ctime;
+      msg_unlock (id);
+      inode->i_op  = &msg_inode_operations;
+      inode->i_fop = &msg_file_operations;
+      return;
+  }
+  inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
+  inode->i_op    = &msg_root_inode_operations;
+  inode->i_fop   = &msg_root_operations;
+  inode->i_sb    = msg_sb;
+  inode->i_nlink = 2;
+  inode->i_mode  = S_IFDIR | msg_mode;
+  inode->i_uid   = inode->i_gid = 0;
+}
+
+static int msg_create (struct inode *dir, struct dentry *dent, int mode)
+{
+  int id, err;
+  struct inode *inode;
+  struct mq_attr attr, *p;
+  struct list_head *tmp;
+
+  attr.mq_maxmsg = 32;
+  attr.mq_msgsize = 64;
+  p = &attr;
+
+  down(&msg_ids.sem);
+  list_for_each(tmp, &mq_open_links) {
+      struct mq_link *l = list_entry(tmp, struct mq_link, link);
+      if (l->tsk == current) {
+          p = l->attr;
+          break;
+      }
+  }
+  err = id = newque (IPC_PRIVATE, dent->d_name.name, dent->d_name.len, p, mode);
+  if (err < 0)
+      goto out;
+
+  inode = iget (msg_sb, id % SEQ_MULTIPLIER);
+  if (!inode){
+  	err = -ENOMEM;
+  	goto out;
+  }
+  err = 0;
+  down (&inode->i_sem);
+  inode->i_mode = (mode & S_IRWXUGO) | S_IFIFO;
+  inode->i_op   = &msg_inode_operations;
+  d_instantiate(dent, inode);
+  up (&inode->i_sem);
+
+out:
+  up(&msg_ids.sem);
+  return err;
+}
+
+static int msg_readdir (struct file *filp, void *dirent, filldir_t filldir)
+{
+  struct inode * inode = filp->f_dentry->d_inode;
+  struct msg_queue *msq;
+  off_t nr;
+
+  nr = filp->f_pos;
+
+  switch(nr)
+  {
+  case 0:
+      if (filldir(dirent, ".", 1, nr, inode->i_ino, DT_DIR) < 0)
+          return 0;
+      filp->f_pos = ++nr;
+      /* fall through */
+  case 1:
+      if (filldir(dirent, "..", 2, nr, inode->i_ino, DT_DIR) < 0)
+          return 0;
+      filp->f_pos = ++nr;
+      /* fall through */
+  default:
+      down(&msg_ids.sem);
+      for (; nr-2 <= msg_ids.max_id; nr++) {
+          if (!(msq = msg_get (nr-2)))
+              continue;
+          if (msq->q_flags & MSG_UNLK)
+              continue;
+          if (filldir(dirent, msq->q_name, msq->q_namelen, nr, nr, DT_FIFO) < 0)
+              break;;
+      }
+      filp->f_pos = nr;
+      up(&msg_ids.sem);
+      break;
+  }
+
+  UPDATE_ATIME(inode);
+  return 0;
+}
+
+static struct dentry *msg_lookup (struct inode *dir, struct dentry *dent)
+{
+  int i, err = 0;
+  struct msg_queue* msq;
+  struct inode *inode = NULL;
+
+  if (dent->d_name.len > MSG_NAME_LEN)
+      return ERR_PTR(-ENAMETOOLONG);
+
+  down(&msg_ids.sem);
+  for(i = 0; i <= msg_ids.max_id; i++) {
+      if (!(msq = msg_lock(i)))
+          continue;
+      if (!(msq->q_flags & MSG_UNLK) &&
+          dent->d_name.len == msq->q_namelen &&
+          strncmp(dent->d_name.name, msq->q_name, msq->q_namelen) == 0)
+          goto found;
+      msg_unlock(i);
+  }
+
+  /*
+   * prevent the reserved names as negative dentries.
+   * This also prevents object creation through the filesystem
+   */
+  if (dent->d_name.len == MSG_FMT_LEN &&
+      memcmp (MSG_FMT, dent->d_name.name, MSG_FMT_LEN - 8) == 0)
+      err = -EINVAL;  /* EINVAL to give IPC_RMID the right error */
+
+  goto out;
+
+found:
+  msg_unlock(i);
+  inode = iget(dir->i_sb, i);
+
+  if (!inode)
+      err = -EACCES;
+out:
+  if (err == 0)
+      d_add (dent, inode);
+  up (&msg_ids.sem);
+  return ERR_PTR(err);
+}
+
+static inline int msg_do_unlink (struct inode *dir, struct dentry *dent, int sysv)
+{
+  struct inode * inode = dent->d_inode;
+  struct msg_queue *msq;
+
+  down (&msg_ids.sem);
+  if (!(msq = msg_lock (inode->i_ino)))
+      BUG();
+  if (sysv) {
+      int ret = 0;
+
+      if (!(msq->q_flags & MSG_SYSV))
+          ret = -EINVAL;
+      else if (current->euid != msq->q_perm.cuid &&
+           current->euid != msq->q_perm.uid && !capable(CAP_SYS_ADMIN))
+          ret = -EPERM;
+      if (ret) {
+          msg_unlock (inode->i_ino);
+          up (&msg_ids.sem);
+          return ret;
+      }
+  }
+  msq->q_flags |= MSG_UNLK;
+  msq->q_perm.key = IPC_PRIVATE; /* Do not find it any more */
+  msg_unlock (inode->i_ino);
+  up (&msg_ids.sem);
+  inode->i_nlink -= 1;
+  /*
+   * If it's a reserved name we have to drop the dentry instead
+   * of creating a negative dentry
+   */
+  if (dent->d_name.len == MSG_FMT_LEN &&
+      memcmp (MSG_FMT, dent->d_name.name, MSG_FMT_LEN - 8) == 0)
+      d_drop (dent);
+  return 0;
+}
+
+static int msg_unlink (struct inode *dir, struct dentry *dent)
+{
+  return msg_do_unlink (dir, dent, 0);
+}
+static int msg_setattr (struct dentry *dentry, struct iattr *attr)
+{
+  int error;
+  struct inode *inode = dentry->d_inode;
+  struct msg_queue *msq;
+
+  error = inode_change_ok(inode, attr);
+  if (error)
+      return error;
+  if (attr->ia_valid & ATTR_SIZE)
+      return -EINVAL;
+
+  if (attr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)) {
+      if (!(msq = msg_lock(inode->i_ino)))
+          BUG();
+      if (attr->ia_valid & ATTR_MODE)
+          msq->q_flags = (msq->q_flags & ~S_IRWXUGO)
+              | (S_IRWXUGO & attr->ia_mode);
+      if (attr->ia_valid & ATTR_UID)
+          msq->q_perm.uid = attr->ia_uid;
+      if (attr->ia_valid & ATTR_GID)
+          msq->q_perm.gid = attr->ia_gid;
+      msq->q_ctime = attr->ia_ctime;
+      msg_unlock (inode->i_ino);
+  }
+
+  inode_setattr(inode, attr);
+  return error;
+}
+
+static int msg_root_ioctl (struct inode * inode, struct file * filp, unsigned int cmd, unsigned long arg)
+{
+  struct mq_open o;
+  struct mq_link link;
+  int ret;
+
+  if (cmd != MQ_OPEN)
+      return -EINVAL;
+  ret = -EFAULT;
+  if (copy_from_user(&o, (struct mq_open *)arg, sizeof(struct mq_open)))
+      goto out;
+  ret = -EINVAL;
+  if ((unsigned long)o.mq_attr.mq_msgsize > msg_ctlmnb ||
+      (unsigned long)o.mq_attr.mq_maxmsg > msg_ctlmnb ||
+      o.mq_attr.mq_msgsize * o.mq_attr.mq_maxmsg > msg_ctlmnb)
+      goto out;
+  link.attr = &o.mq_attr;
+  link.tsk = current;
+  down(&msg_ids.sem);
+  list_add(&link.link, &mq_open_links);
+  up(&msg_ids.sem);
+  /* FIXME: Shouldn't we check here whether mq_name is really a file within the msg filesystem?
+     Otherwise people tracing the open(2) syscall might miss this place... */
+  ret = sys_open(o.mq_name, o.mq_oflag, o.mq_mode);
+  down(&msg_ids.sem);
+  list_del(&link.link);
+  up(&msg_ids.sem);
+out:
+  return ret;
+}
+
+static int msg_ioctl (struct inode * inode, struct file * filp, unsigned int cmd, unsigned long arg)
+{
+  int ret = -EINVAL;
+  struct msg_queue *msq;
+  struct mq_sndrcv sr;
+
+  switch (cmd) {
+  case MQ_GETATTR: {
+      struct mq_attr attr;
+      memset(&attr, 0, sizeof(attr));
+      msq = msg_lock (inode->i_ino);
+      if (msq == NULL)
+          BUG();
+      attr.mq_maxmsg = msq->q_maxmsg;
+      attr.mq_msgsize = msq->q_msgsize;
+      attr.mq_curmsgs = msq->q_qnum;
+      attr.mq_flags = filp->f_flags & O_NONBLOCK;
+      msg_unlock (inode->i_ino);
+      ret = copy_to_user((struct mq_attr *)arg, &attr, sizeof(attr)) ? -EFAULT : 0;
+      break;
+      }
+  case MQ_SEND:
+      ret = -EBADF;
+      if (!(filp->f_mode & FMODE_WRITE))
+          break;
+      ret = -EFAULT;
+      if (copy_from_user(&sr, (struct mq_sndrcv *)arg, sizeof(sr)))
+          break;
+      ret = -EINVAL;
+      if (sr.mq_type <= 0)
+          break;
+      ret = msg_send (inode, filp, sr.mq_buf, sr.mq_len, sr.mq_type);
+      break;
+  case MQ_RECEIVE:
+      ret = -EBADF;
+      if (!(filp->f_mode & FMODE_READ))
+          break;
+      ret = -EFAULT;
+      if (copy_from_user(&sr, (struct mq_sndrcv *)arg, sizeof(sr)))
+          break;
+      ret = msg_receive (inode, filp, sr.mq_buf, sr.mq_len, &sr.mq_type);
+      if (!ret && put_user (sr.mq_type, &((struct mq_sndrcv *)arg)->mq_type))
+          ret = -EFAULT;
+      break;
+  case MQ_NOTIFY: {
+      struct sigevent sev;
+      struct msg_queue *msg;
+      ret = -EFAULT;
+      if (copy_from_user(&sev, (struct sigevent *)arg, sizeof(sev)))
+          break;
+      ret = -EINVAL;
+      if (sev.sigev_notify != SIGEV_SIGNAL && sev.sigev_notify != SIGEV_NONE)
+          break;
+      if (sev.sigev_signo <= 0 || sev.sigev_signo > _NSIG)
+          break;
+      msg = msg_lock(inode->i_ino);
+      if (!msg) BUG();
+      ret = 0;
+      if (msg->q_signo)
+          ret = -EBUSY;
+      else if (sev.sigev_notify == SIGEV_SIGNAL) {
+          msg->q_signo = sev.sigev_signo;
+          msg->q_sigval = sev.sigev_value;
+      } else
+          msg->q_signo = 0;
+      msg_unlock(inode->i_ino);
+      }
+  default:
+      break;
+  }
+  return ret;
+}
+
+static ssize_t msg_write(struct file * file, 
+	const char * buf, size_t count, loff_t *ppos)
+{
+  int ret = msg_send(file->f_dentry->d_inode, file, buf, count, MQ_DEFAULT_TYPE);
+  return ret ?: count;
+}
+
+static ssize_t msg_read(struct file * file, 
+	char * buf, size_t count, loff_t *ppos)
+{
+  return msg_receive(file->f_dentry->d_inode, file, buf, count, NULL);
+}
+
+static int msg_release (struct inode *ino, struct file *filp)
+{
+  struct msg_queue *msq = msg_lock(ino->i_ino);
+  if (!msq) BUG();
+  if (msq->q_signo && msq->q_pid == current->pid)
+      msq->q_signo = 0;
+  msg_unlock(ino->i_ino);
+  return 0;
+}
+
+static int msg_flush (struct file *filp)
+{
+  return msg_release(filp->f_dentry->d_inode, filp);
+}
+
+static int newque (key_t key, const char *name, int namelen, 
+	struct mq_attr *attr, int msgflg)
 {
 	int id;
 	int retval;
 	struct msg_queue *msq;
 
-	msq  = (struct msg_queue *) kmalloc (sizeof (*msq), GFP_KERNEL);
+	if (namelen > MSG_NAME_LEN)
+		return -ENAMETOOLONG;
+	msq = (struct msg_queue *) kmalloc (sizeof (*msq) + namelen, GFP_KERNEL);
+
 	if (!msq) 
 		return -ENOMEM;
 
@@ -113,18 +670,94 @@
 		kfree(msq);
 		return -ENOSPC;
 	}
+	msq->q_flags = (msgflg & S_IRWXUGO);
+	msq->q_perm.key = key;
 
 	msq->q_stime = msq->q_rtime = 0;
 	msq->q_ctime = CURRENT_TIME;
 	msq->q_cbytes = msq->q_qnum = 0;
 	msq->q_qbytes = msg_ctlmnb;
 	msq->q_lspid = msq->q_lrpid = 0;
+	msq->q_signo = 0;
+
 	INIT_LIST_HEAD(&msq->q_messages);
 	INIT_LIST_HEAD(&msq->q_receivers);
 	INIT_LIST_HEAD(&msq->q_senders);
+	msq->id = msg_buildid(id, msq->q_perm.seq);
+	if (name) {
+	  msq->q_maxmsg = attr->mq_maxmsg;
+	  msq->q_msgsize = attr->mq_msgsize;
+	  msq->q_qbytes = msq->q_maxmsg * msq->q_msgsize;
+	  msq->q_namelen = namelen;
+	  memcpy(msq->q_name, name, namelen);
+	} else {
+	  msq->q_qbytes = msg_ctlmnb;
+	  msq->q_maxmsg = msg_ctlmnb;
+	  msq->q_msgsize = msg_ctlmax;
+	  msq->q_flags |= MSG_SYSV;
+	  msq->q_namelen = sprintf(msq->q_name, MSG_FMT, msq->id);
+	}
 	msg_unlock(id);
 
-	return msg_buildid(id,msq->q_perm.seq);
+	return msq->id;
+}
+
+/* FIXME: maybe we need lock_kernel() here */
+static void msg_delete (struct inode *ino)
+{
+  int msgid = ino->i_ino;
+  struct msg_queue *msq;
+
+  down(&msg_ids.sem);
+  msq = msg_lock(msgid);
+  if(msq==NULL)
+      BUG();
+  freeque(msgid);
+  up(&msg_ids.sem);
+  clear_inode(ino);
+}
+
+static int msg_remove_name(int msqid)
+{
+  struct dentry *dir;
+  struct dentry *dentry;
+  struct msg_queue *msq;
+  int error, id;
+  char name[MSG_FMT_LEN+1];
+
+  down(&msg_ids.sem);
+  msq = msg_lock(msqid);
+  if (msq == NULL)
+      return -EINVAL;
+  id = msq->id;
+  if (msg_checkid (msq, msqid)) {
+      msg_unlock(msqid);
+      return -EIDRM;
+  }
+  msg_unlock(msqid);
+  up(&msg_ids.sem);
+  sprintf (name, MSG_FMT, id);
+  dir=msg_sb->s_root;
+  down(&dir->d_inode->i_sem);
+  dentry = lookup_one_len(name, dir, strlen(name) );
+  error = PTR_ERR(dentry);
+  if (!IS_ERR(dentry)) {
+      /*
+       * We have to do our own unlink to prevent the vfs
+       * permission check. We'll do the SYSV IPC style check
+       * inside of msg_do_unlink when we hold msg lock and
+       * msg_ids semaphore.
+       */
+      struct inode *inode = dir->d_inode;
+      down(&inode->i_sem);
+      error = msg_do_unlink(inode, dentry, 1);
+      if (!error)
+          d_delete(dentry);
+      up(&inode->i_sem);
+      dput(dentry);
+  }
+  up(&dir->d_inode->i_sem);
+  return error;
 }
 
 static void free_msg(struct msg_msg* msg)
@@ -139,7 +772,7 @@
 	}
 }
 
-static struct msg_msg* load_msg(void* src, int len)
+static struct msg_msg* load_msg(const char * src, int len)
 {
 	struct msg_msg* msg;
 	struct msg_msgseg** pseg;
@@ -191,9 +824,9 @@
 	return ERR_PTR(err);
 }
 
-static int store_msg(void* dest, struct msg_msg* msg, int len)
+static int store_msg(void* dest, struct msg_msg* msg, size_t len)
 {
-	int alen;
+	size_t alen;
 	struct msg_msgseg *seg;
 
 	alen = len;
@@ -213,7 +846,7 @@
 			return -1;
 		len -= alen;
 		dest = ((char*)dest)+alen;
-		seg=seg->next;
+		seg = seg->next;
 	}
 	return 0;
 }
@@ -272,7 +905,7 @@
 	expunge_all(msq,-EIDRM);
 	ss_wakeup(&msq->q_senders,1);
 	msg_unlock(id);
-		
+
 	tmp = msq->q_messages.next;
 	while(tmp != &msq->q_messages) {
 		struct msg_msg* msg = list_entry(tmp,struct msg_msg,m_list);
@@ -292,12 +925,12 @@
 	
 	down(&msg_ids.sem);
 	if (key == IPC_PRIVATE) 
-		ret = newque(key, msgflg);
+		ret = newque(key, NULL, MSG_FMT_LEN + 1, NULL, msgflg);
 	else if ((id = ipc_findkey(&msg_ids, key)) == -1) { /* key not used */
 		if (!(msgflg & IPC_CREAT))
 			ret = -ENOENT;
 		else
-			ret = newque(key, msgflg);
+			ret = newque(key, NULL, MSG_FMT_LEN + 1, NULL, msgflg);
 	} else if (msgflg & IPC_CREAT && msgflg & IPC_EXCL) {
 		ret = -EEXIST;
 	} else {
@@ -358,13 +991,6 @@
 	}
 }
 
-struct msq_setbuf {
-	unsigned long	qbytes;
-	uid_t		uid;
-	gid_t		gid;
-	mode_t		mode;
-};
-
 static inline unsigned long copy_msqid_from_user(struct msq_setbuf *out, void *buf, int version)
 {
 	switch(version) {
@@ -468,10 +1094,13 @@
 			return -EINVAL;
 
 		if(cmd == MSG_STAT) {
+			err = -EINVAL;
+			if (!(msq->q_flags & MSG_SYSV))
+				goto out_unlock;
 			success_return = msg_buildid(msqid, msq->q_perm.seq);
 		} else {
-			err = -EIDRM;
-			if (msg_checkid(msq,msqid))
+			err = msg_checkid(msq,msqid);
+			if (err)
 				goto out_unlock;
 			success_return = 0;
 		}
@@ -480,6 +1109,7 @@
 			goto out_unlock;
 
 		kernel_to_ipc64_perm(&msq->q_perm, &tbuf.msg_perm);
+		tbuf.msg_perm.mode &= S_IRWXUGO;
 		tbuf.msg_stime  = msq->q_stime;
 		tbuf.msg_rtime  = msq->q_rtime;
 		tbuf.msg_ctime  = msq->q_ctime;
@@ -500,7 +1130,7 @@
 			return -EFAULT;
 		break;
 	case IPC_RMID:
-		break;
+		return msg_remove_name(msqid);
 	default:
 		return  -EINVAL;
 	}
@@ -521,12 +1151,11 @@
 	    /* We _could_ check for CAP_CHOWN above, but we don't */
 		goto out_unlock_up;
 
-	switch (cmd) {
-	case IPC_SET:
-	{
+	if (cmd == IPC_SET) {
 		if (setbuf.qbytes > msg_ctlmnb && !capable(CAP_SYS_RESOURCE))
 			goto out_unlock_up;
 		msq->q_qbytes = setbuf.qbytes;
+		msq->q_maxmsg = setbuf.qbytes;
 
 		ipcp->uid = setbuf.uid;
 		ipcp->gid = setbuf.gid;
@@ -542,11 +1171,6 @@
 		 */
 		ss_wakeup(&msq->q_senders,0);
 		msg_unlock(msqid);
-		break;
-	}
-	case IPC_RMID:
-		freeque (msqid); 
-		break;
 	}
 	err = 0;
 out_up:
@@ -608,6 +1232,105 @@
 	return 0;
 }
 
+static int msg_do_send (struct msg_queue **msqp, int msqid,
+			struct msg_msg *msg, size_t msgsz, int nowait)
+{
+	struct msg_queue *msq = *msqp;
+
+	if(msgsz + msq->q_cbytes > msq->q_qbytes ||
+	   1 + msq->q_qnum > msq->q_maxmsg) {
+		struct msg_sender s;
+
+		if(nowait)
+			return -EAGAIN;
+
+		ss_add(msq, &s);
+		msg_unlock(msqid);
+		schedule();
+		current->state = TASK_RUNNING;
+
+		*msqp = msq = msg_lock(msqid);
+		if(msq==NULL)
+			return -EIDRM;
+		ss_del(&s);
+		
+		if (signal_pending(current))
+			return -EINTR;
+		return -EBUSY;
+	}
+
+	if(!pipelined_send(msq,msg)) {
+		/* noone is waiting for this message, enqueue it */
+		list_add_tail(&msg->m_list,&msq->q_messages);
+		msq->q_cbytes += msgsz;
+		msq->q_qnum++;
+		atomic_add(msgsz,&msg_bytes);
+		atomic_inc(&msg_hdrs);
+		if (msq->q_qnum == 1 && msq->q_signo) {
+			struct task_struct *p;
+			siginfo_t si;
+			read_lock(&tasklist_lock);
+			p = find_task_by_pid(msq->q_pid);
+			if (p) {
+				si.si_signo = msq->q_signo;
+				si.si_errno = 0;
+				si.si_code = SI_MESGQ;
+				si.si_pid = current->pid;
+				si.si_uid = current->euid;
+				si.si_value = msq->q_sigval;
+				if (!send_sig_info(msq->q_signo, &si, p))
+					send_sig(msq->q_signo, p, 1);
+			}
+			read_unlock(&tasklist_lock);
+			msq->q_signo = 0;
+		}
+	}
+
+	msq->q_lspid = current->pid;
+	msq->q_stime = CURRENT_TIME;
+	return 0;
+}
+
+static ssize_t msg_send (struct inode *ino, struct file *filp, const char *mtext, size_t msgsz, long mtype)
+{
+	struct msg_queue *msq;
+	struct msg_msg *msg;
+	int err = 0;
+	
+	if (mtype < 1)
+		return -EINVAL;
+	msq = msg_lock(ino->i_ino);
+	if (!msq) BUG();
+	if (msgsz > msq->q_msgsize)
+		err = -EMSGSIZE;
+	msg_unlock(ino->i_ino);
+	if (err) return err;
+
+	msg = load_msg(mtext, msgsz);
+	if(IS_ERR(msg))
+		return PTR_ERR(msg);
+
+	msg->m_type = mtype;
+	msg->m_ts = msgsz;
+
+	msq = msg_lock(ino->i_ino);
+	if (!msq) BUG();
+
+	do {
+		err = -EACCES;
+		if (msq->q_flags & MSG_SYSV && ipcperms(&msq->q_perm, S_IWUGO))
+			break;
+
+		err = msg_do_send(&msq, ino->i_ino, msg, msgsz, filp->f_flags & O_NONBLOCK);
+
+	} while (err == -EBUSY);
+
+	msg_unlock(ino->i_ino);
+	if (msg && err)
+		free_msg(msg);
+	return err;
+}
+
 asmlinkage long sys_msgsnd (int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg)
 {
 	struct msg_queue *msq;
@@ -633,60 +1356,23 @@
 	err=-EINVAL;
 	if(msq==NULL)
 		goto out_free;
-retry:
-	err= -EIDRM;
-	if (msg_checkid(msq,msqid))
-		goto out_unlock_free;
-
-	err=-EACCES;
-	if (ipcperms(&msq->q_perm, S_IWUGO)) 
-		goto out_unlock_free;
-
-	if(msgsz + msq->q_cbytes > msq->q_qbytes ||
-		1 + msq->q_qnum > msq->q_qbytes) {
-		struct msg_sender s;
-
-		if(msgflg&IPC_NOWAIT) {
-			err=-EAGAIN;
-			goto out_unlock_free;
-		}
-		ss_add(msq, &s);
-		msg_unlock(msqid);
-		schedule();
-		current->state= TASK_RUNNING;
+	do {
+	  err= -EIDRM;
+	  if (msg_checkid(msq,msqid))
+    	  break;
 
-		msq = msg_lock(msqid);
-		err = -EIDRM;
-		if(msq==NULL)
-			goto out_free;
-		ss_del(&s);
-		
-		if (signal_pending(current)) {
-			err=-EINTR;
-			goto out_unlock_free;
-		}
-		goto retry;
-	}
+	  err=-EACCES;
+	  if (ipcperms(&msq->q_perm, S_IWUGO))
+    	  break;
 
-	msq->q_lspid = current->pid;
-	msq->q_stime = CURRENT_TIME;
+	  err = msg_do_send(&msq, msqid, msg, msgsz, msgflg & IPC_NOWAIT);
 
-	if(!pipelined_send(msq,msg)) {
-		/* noone is waiting for this message, enqueue it */
-		list_add_tail(&msg->m_list,&msq->q_messages);
-		msq->q_cbytes += msgsz;
-		msq->q_qnum++;
-		atomic_add(msgsz,&msg_bytes);
-		atomic_inc(&msg_hdrs);
-	}
-	
-	err = 0;
-	msg = NULL;
+	} while (err == -EBUSY);
 
-out_unlock_free:
-	msg_unlock(msqid);
+	if (msq)
+	  msg_unlock(msqid);
 out_free:
-	if(msg!=NULL)
+	if (msg && err)
 		free_msg(msg);
 	return err;
 }
@@ -710,127 +1396,169 @@
 	return SEARCH_EQUAL;
 }
 
+static struct msg_msg *
+msg_do_receive (struct msg_queue *msq, int *msqidp, size_t msgsz,
+      long msgtyp, int mode, int msgflg)
+{
+  struct msg_receiver msr_d;
+  struct list_head *tmp;
+  struct msg_msg *msg, *found_msg;
+  int msqid = *msqidp;
+
+  for (;;) {
+      if (msq->q_flags & MSG_SYSV && ipcperms (&msq->q_perm, S_IRUGO))
+          return ERR_PTR(-EACCES);
+
+      tmp = msq->q_messages.next;
+      found_msg = NULL;
+      while (tmp != &msq->q_messages) {
+          msg = list_entry(tmp,struct msg_msg,m_list);
+          if(testmsg(msg, msgtyp, mode)) {
+              found_msg = msg;
+              if(mode == SEARCH_LESSEQUAL && msg->m_type != 1)
+                  msgtyp = msg->m_type - 1;
+              else
+                  break;
+          }
+          tmp = tmp->next;
+      }
+      if (found_msg) {
+          msg = found_msg;
+          if ((msgsz < msg->m_ts) && !(msgflg & MSG_NOERROR))
+              return ERR_PTR(-E2BIG);
+          list_del(&msg->m_list);
+          msq->q_qnum--;
+          msq->q_rtime = CURRENT_TIME;
+          msq->q_lrpid = current->pid;
+          msq->q_cbytes -= msg->m_ts;
+          atomic_sub(msg->m_ts,&msg_bytes);
+          atomic_dec(&msg_hdrs);
+          ss_wakeup(&msq->q_senders,0);
+          msg_unlock(msqid);
+          return msg;
+      } else {
+          struct msg_queue *t;
+          /* no message waiting. Prepare for pipelined
+           * receive.
+           */
+          if (msgflg & IPC_NOWAIT)
+              return ERR_PTR(-ENOMSG);
+          list_add_tail(&msr_d.r_list,&msq->q_receivers);
+          msr_d.r_tsk = current;
+          msr_d.r_msgtype = msgtyp;
+          msr_d.r_mode = mode;
+          if(msgflg & MSG_NOERROR)
+              msr_d.r_maxsize = INT_MAX;
+          else
+              msr_d.r_maxsize = msgsz;
+          msr_d.r_msg = ERR_PTR(-EAGAIN);
+          current->state = TASK_INTERRUPTIBLE;
+          msg_unlock(msqid);
+
+          schedule();
+          current->state = TASK_RUNNING;
+
+          msg = (struct msg_msg*) msr_d.r_msg;
+          if(!IS_ERR(msg))
+              return msg;
+
+          t = msg_lock(msqid);
+          if(t == NULL)
+              *msqidp = msqid = -1;
+          msg = (struct msg_msg*)msr_d.r_msg;
+          if(!IS_ERR(msg)) {
+              /* our message arived while we waited for
+               * the spinlock. Process it.
+               */
+              if (msqid != -1)
+                  msg_unlock(msqid);
+              return msg;
+          }
+          if(PTR_ERR(msg) == -EAGAIN) {
+              if(msqid == -1)
+                  BUG();
+              list_del(&msr_d.r_list);
+              if (signal_pending(current))
+                  return ERR_PTR(-EINTR);
+              else
+                  continue;
+          }
+          return msg;
+      }
+  }
+}
+
+static int msg_receive (struct inode *ino, struct file *filp, char *mtext,
+          size_t msgsz, long *msgtypp)
+{
+  struct msg_queue *msq;
+  struct msg_msg *msg;
+  long msgtyp;
+  int err, mode, msqid = ino->i_ino;
+
+  if (msgtypp)
+      msgtyp = *msgtypp;
+  else
+      msgtyp = -MQ_DEFAULT_TYPE;
+  mode = convert_mode(&msgtyp, 0);
+  msq = msg_lock(msqid);
+  if (!msq) BUG();
+  if (msgtypp && msgsz < msq->q_msgsize) {
+      msg_unlock(msqid);
+      return -EMSGSIZE;
+  }
+
+  msg = msg_do_receive (msq, &msqid, msgsz, msgtyp, mode,
+                (filp->f_flags & O_NONBLOCK) ? IPC_NOWAIT : 0);
+  if (!IS_ERR (msg)) {
+      msgsz = (msgsz > msg->m_ts) ? msg->m_ts : msgsz;
+      if (store_msg(mtext, msg, msgsz))
+          msgsz = -EFAULT;
+      else if (msgtypp)
+          *msgtypp = msg->m_type;
+      free_msg(msg);
+      return msgsz;
+  }
+  if (msqid != -1)
+      msg_unlock(msqid);
+  err = PTR_ERR(msg);
+  switch (err) {
+  case -ENOMSG: err = -EAGAIN; break;
+  case -E2BIG: err = -EMSGSIZE; break;
+  }
+  return err;
+}
+
 asmlinkage long sys_msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz,
 			    long msgtyp, int msgflg)
 {
 	struct msg_queue *msq;
-	struct msg_receiver msr_d;
-	struct list_head* tmp;
-	struct msg_msg* msg, *found_msg;
-	int err;
+	struct msg_msg *msg;
 	int mode;
 
 	if (msqid < 0 || (long) msgsz < 0)
 		return -EINVAL;
-	mode = convert_mode(&msgtyp,msgflg);
+	mode = convert_mode(&msgtyp, msgflg);
 
-	msq = msg_lock(msqid);
-	if(msq==NULL)
+	msq = msg_lock (msqid);
+	if (msq==NULL)
+		return -EINVAL;
+	if (!(msq->q_flags & MSG_SYSV)) {
+		msg_unlock (msqid);
 		return -EINVAL;
-retry:
-	err = -EIDRM;
-	if (msg_checkid(msq,msqid))
-		goto out_unlock;
-
-	err=-EACCES;
-	if (ipcperms (&msq->q_perm, S_IRUGO))
-		goto out_unlock;
-
-	tmp = msq->q_messages.next;
-	found_msg=NULL;
-	while (tmp != &msq->q_messages) {
-		msg = list_entry(tmp,struct msg_msg,m_list);
-		if(testmsg(msg,msgtyp,mode)) {
-			found_msg = msg;
-			if(mode == SEARCH_LESSEQUAL && msg->m_type != 1) {
-				found_msg=msg;
-				msgtyp=msg->m_type-1;
-			} else {
-				found_msg=msg;
-				break;
-			}
-		}
-		tmp = tmp->next;
 	}
-	if(found_msg) {
-		msg=found_msg;
-		if ((msgsz < msg->m_ts) && !(msgflg & MSG_NOERROR)) {
-			err=-E2BIG;
-			goto out_unlock;
-		}
-		list_del(&msg->m_list);
-		msq->q_qnum--;
-		msq->q_rtime = CURRENT_TIME;
-		msq->q_lrpid = current->pid;
-		msq->q_cbytes -= msg->m_ts;
-		atomic_sub(msg->m_ts,&msg_bytes);
-		atomic_dec(&msg_hdrs);
-		ss_wakeup(&msq->q_senders,0);
-		msg_unlock(msqid);
-out_success:
+	msg = msg_do_receive (msq, &msqid, msgsz, msgtyp, mode, msgflg);
+	if (!IS_ERR (msg)) {
 		msgsz = (msgsz > msg->m_ts) ? msg->m_ts : msgsz;
-		if (put_user (msg->m_type, &msgp->mtype) ||
-		    store_msg(msgp->mtext, msg, msgsz)) {
-			    msgsz = -EFAULT;
-		}
-		free_msg(msg);
-		return msgsz;
-	} else
-	{
-		struct msg_queue *t;
-		/* no message waiting. Prepare for pipelined
-		 * receive.
-		 */
-		if (msgflg & IPC_NOWAIT) {
-			err=-ENOMSG;
-			goto out_unlock;
-		}
-		list_add_tail(&msr_d.r_list,&msq->q_receivers);
-		msr_d.r_tsk = current;
-		msr_d.r_msgtype = msgtyp;
-		msr_d.r_mode = mode;
-		if(msgflg & MSG_NOERROR)
-			msr_d.r_maxsize = INT_MAX;
-		 else
-		 	msr_d.r_maxsize = msgsz;
-		msr_d.r_msg = ERR_PTR(-EAGAIN);
-		current->state = TASK_INTERRUPTIBLE;
-		msg_unlock(msqid);
-
-		schedule();
-		current->state = TASK_RUNNING;
-
-		msg = (struct msg_msg*) msr_d.r_msg;
-		if(!IS_ERR(msg)) 
-			goto out_success;
-
-		t = msg_lock(msqid);
-		if(t==NULL)
-			msqid=-1;
-		msg = (struct msg_msg*)msr_d.r_msg;
-		if(!IS_ERR(msg)) {
-			/* our message arived while we waited for
-			 * the spinlock. Process it.
-			 */
-			if(msqid!=-1)
-				msg_unlock(msqid);
-			goto out_success;
-		}
-		err = PTR_ERR(msg);
-		if(err == -EAGAIN) {
-			if(msqid==-1)
-				BUG();
-			list_del(&msr_d.r_list);
-			if (signal_pending(current))
-				err=-EINTR;
-			 else
-				goto retry;
-		}
-	}
-out_unlock:
-	if(msqid!=-1)
-		msg_unlock(msqid);
-	return err;
+    	if (put_user (msg->m_type, &msgp->mtype) ||
+    	  store_msg(msgp->mtext, msg, msgsz))
+    	  msgsz = -EFAULT;
+    	free_msg(msg);
+    	return msgsz;
+	}
+	if (msqid != -1)
+    	msg_unlock(msqid);
+	return PTR_ERR(msg);
 }
 
 #ifdef CONFIG_PROC_FS
@@ -841,16 +1569,16 @@
 	int i, len = 0;
 
 	down(&msg_ids.sem);
-	len += sprintf(buffer, "       key      msqid perms      cbytes       qnum lspid lrpid   uid   gid  cuid  cgid      stime      rtime      ctime\n");
+	len += sprintf(buffer, "       key      msqid perms      cbytes       qnum lspid lrpid   uid   gid  cuid  cgid      stime      rtime      ctime 	name(POSIX)\n");
 
 	for(i = 0; i <= msg_ids.max_id; i++) {
 		struct msg_queue * msq;
 		msq = msg_lock(i);
 		if(msq != NULL) {
-			len += sprintf(buffer + len, "%10d %10d  %4o  %10lu %10lu %5u %5u %5u %5u %5u %5u %10lu %10lu %10lu\n",
+			len += sprintf(buffer + len, "%10d %10d  %4o  %10lu %10lu %5u %5u %5u %5u %5u %5u %10lu %10lu %10lu %.*s%s\n",
 				msq->q_perm.key,
 				msg_buildid(i,msq->q_perm.seq),
-				msq->q_perm.mode,
+				msq->q_flags & S_IRWXUGO,
 				msq->q_cbytes,
 				msq->q_qnum,
 				msq->q_lspid,
@@ -861,7 +1589,10 @@
 				msq->q_perm.cgid,
 				msq->q_stime,
 				msq->q_rtime,
-				msq->q_ctime);
+				msq->q_ctime,
+				msq->q_namelen,
+				msq->q_name,
+				msq->q_flags & MSG_UNLK ? " (deleted)" : "");
 			msg_unlock(i);
 
 			pos += len;

^ permalink raw reply

* Re: rootfs exposure in /proc/mounts
From: Christoph Hellwig @ 2002-10-27 15:09 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Andreas Haumer, linux-kernel, willy
In-Reply-To: <3DBC0007.8020005@pobox.com>

On Sun, Oct 27, 2002 at 10:02:31AM -0500, Jeff Garzik wrote:
> symlinks directly to /proc/mounts is fine with me -- just don't expect 
> any sympathy when userspace tools don't handle things like $subject.  :) 
>  The answer will be "fix the userspace tools" not "add special case code 
> to the kernel" :)

well, better link to /proc/self/mounts directly, that's where /proc/mounts
links to.  That's another reason why the /etc/mtab-concept is broken:
you might have very different mounts in different processes.


^ permalink raw reply

* Re: Patch(2.5.44 and 2.4.x): 6 files referenced pci_dev.driver_data instead of pci_{g,s}et_drv_data
From: Jeff Garzik @ 2002-10-27 15:06 UTC (permalink / raw)
  To: Adam J. Richter
  Cc: alan, andre, axboe, netwerk, jerdfelt, neilb, mikep, linux-tr,
	arjanv, henrique, linux-kernel
In-Reply-To: <20021027013619.A5918@baldur.yggdrasil.com>

Patch looks good to me.  I'll queue for Linus unless someone else has 
already done so.

could you be talked into doing a similar patch for 2.4.x?



^ permalink raw reply

* Re: Swap doesn't work
From: Alan Cox @ 2002-10-27 15:21 UTC (permalink / raw)
  To: Vladimír T Tý; +Cc: Alex Riesen, Linux Kernel Mailing List, clock
In-Reply-To: <000801c27dc8$044f43f0$4500a8c0@cybernet.cz>

On Sun, 2002-10-27 at 14:48, Vladimír Třebický wrote:
> > > That's not a badblock. That's an kernel IDE bug. Andre Hedrick and Alan
> > > Cox will love to see this.
> >
> > Not on a kernel built with an untrusted hand built tool chain
> >
> Well, I don't know what could possibly cause this kind of error except
> kernel.
> No matter what application I use to read or write /dev/hda6. Which part
> of my tool chain do you have in mind?

gcc and binutils. I get so many weird never duplicated reports from
linux from scratch people that don't happen to anyone else that I treat
them with deep suspicion.  Especially because it sometimes goes away if
they instead build the same kernel with Debian/Red Hat/.. binutils/gcc


^ permalink raw reply

* Re: rootfs exposure in /proc/mounts
From: Jeff Garzik @ 2002-10-27 15:02 UTC (permalink / raw)
  To: Andreas Haumer; +Cc: linux-kernel, willy
In-Reply-To: <3DBBBE1B.5050809@xss.co.at>

symlinks directly to /proc/mounts is fine with me -- just don't expect 
any sympathy when userspace tools don't handle things like $subject.  :) 
 The answer will be "fix the userspace tools" not "add special case code 
to the kernel" :)

    Jeff





^ permalink raw reply

* Re: Swap doesn't work
From: Vladimír Třebický @ 2002-10-27 14:48 UTC (permalink / raw)
  To: Alan Cox; +Cc: Alex Riesen, Linux Kernel Mailing List, clock
In-Reply-To: <1035724348.30403.15.camel@irongate.swansea.linux.org.uk>

> > That's not a badblock. That's an kernel IDE bug. Andre Hedrick and Alan
> > Cox will love to see this.
>
> Not on a kernel built with an untrusted hand built tool chain
>
Well, I don't know what could possibly cause this kind of error except
kernel.
No matter what application I use to read or write /dev/hda6. Which part
of my tool chain do you have in mind?

Thanks,

Vladimir Trebicky

--
Vladimir Trebicky
guru@cimice.yo.cz


^ permalink raw reply

* Re: New nanosecond stat patch for 2.5.44 - new patch II
From: Andi Kleen @ 2002-10-27 14:33 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kernel
In-Reply-To: <20021027121318.GA2249@averell>

> ftp://ftp.firstfloor.org/pub/ak/v2.5/nsec-2.5.44-1.bz2

This version unfortunately had some problems. I removed it now
and replaced it with 

ftp://ftp.firstfloor.org/pub/ak/v2.5/nsec-2.5.44-2.bz2

If you already got -1 please redownload.

Thank you,
-Andi

^ permalink raw reply

* Re: [PATCH]: linux-2.5.44uc1 (MMU-less support)
From: Greg Ungerer @ 2002-10-27 14:15 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: linux-kernel
In-Reply-To: <20021026201856.GA1670@mars.ravnborg.org>

Hi Sam,

Sam Ravnborg wrote:
> On Sun, Oct 27, 2002 at 02:19:38AM +1000, Greg Ungerer wrote:
> 
>>   - arch Makefiles rewritten
> 
> Took a look at them.
> See comments below.

Thanks.
Rolled on these in to the next patch set.

Had to make one small adjustment:

> +
> +arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \
> +				   include/config/MARKER
> +
> +include/asm-$(ARCH)/asm-offsets.h.tmp: arch/$(ARCH)/kernel/asm-offsets.s
> +	@$(generate-asm-offsets.h) < $< > $@
> +
> +include/asm-$(ARCH)/asm-offsets.h: include/asm-$(ARCH)/asm-offsets.h.tmp
> +	@echo -n '  Generating $@'
> +	@$(update-if-changed)
> Combine it like this instead:
> include/asm-$(ARCH)/asm-offsets.h: arch/$(ARCH)/kernel/asm-offsets.s \
> 				   include/asm include/linux/version.h \
> 				   include/config/MARKER
> 	@echo -n '  Generating $@'
> 	@$(generate-asm-offsets.h) < $< > $@
                                           ^^^

This needs to be $@.tmp, "update-if-changed" specifically looks
for the .tmp named file.

Regards
Greg


------------------------------------------------------------------------
Greg Ungerer  --  Chief Software Wizard        EMAIL:  gerg@snapgear.com
Snapgear Pty Ltd                               PHONE:    +61 7 3279 1822
825 Stanley St,                                  FAX:    +61 7 3279 1820
Woolloongabba, QLD, 4102, Australia              WEB:   www.SnapGear.com


^ permalink raw reply

* Re: [PATCH][RFC] 2.5.42 (2/2): Filesystem capabilities user tool
From: Andreas Gruenbacher @ 2002-10-27 13:55 UTC (permalink / raw)
  To: Olaf Dietsche; +Cc: linux-kernel
In-Reply-To: <87smz3mupw.fsf@goat.bogus.local>

On Friday 18 October 2002 21:07, Olaf Dietsche wrote:
> This is the change capabilities tool. It is a first cut at "managing"
> capabilities and not very comfortable.

Olaf, please start with reading the capabilities sections in POSIX 
1003.1e/1003.2c draft 17 (withdrawn). There It's available online at 
<http://wt.xpilot.org/publications/posix.1e/>. A number of people have 
already spent a lot of time figuring out how this could work.

--Andreas.

^ permalink raw reply

* Re: [BUG]Kernel Panic while booting 2.5.44
From: Alan Cox @ 2002-10-27 14:10 UTC (permalink / raw)
  To: Andreas Tscharner; +Cc: Linux Kernel Mailinglist
In-Reply-To: <20021027143305.42aa7463.starfire@dplanet.ch>

On Sun, 2002-10-27 at 13:33, Andreas Tscharner wrote:
> Hello World,
> 
> I got a Kernel Panic when I try to boot 2.5.44. Bug output and
> configuration below. GCC version 2.95.4
> 
> 
> kernel BUG at kernel/workqueue.c:69!
> invalid operand: 0000

Does this help ?

--- drivers/scsi/ppa.c~	2002-10-27 14:05:37.000000000 +0000
+++ drivers/scsi/ppa.c	2002-10-27 14:05:37.000000000 +0000
@@ -201,6 +201,8 @@
 	default:		/* Never gets here */
 	    continue;
 	}
+	
+	INIT_WORK(&ppa_hosts[i].ppa_tq, ppa_interrupt, &ppa_hosts[i]);
 
 	host->can_queue = PPA_CAN_QUEUE;
 	host->sg_tablesize = ppa_sg;

^ permalink raw reply

* Re: Posix capabilities
From: Andreas Gruenbacher @ 2002-10-27 13:46 UTC (permalink / raw)
  To: Pavel Machek; +Cc: linux-kernel
In-Reply-To: <20021020141647.GB6280@elf.ucw.cz>

On Sunday 20 October 2002 16:16, Pavel Machek wrote:
> Hi!
>
> > > Ah, ok... I thought that things work like this: the capabilities
> > > support already is in the kernel, and to give an app a particular
> > > capability, one has to add a particalar extended attribute to the
> > > application executable. So I'm wrong here it seems?
> >
> > First of all, you can't use a standard user extended attribute, since
> > anyone with write access to the file will be allowed to set the
> > extended attribute.  This isn't good if you're going to be granting
>
> What are extended attributes good for, then?

Extended attributes support different namespaces, like user.* and system.*. 
The user.* namespace is treaded similarly to the file contents permission 
wise, so users can associate attributes with files. Things like ACLs, 
Capabilities, etc. are intended to be added to the system.* namespace. They 
differ from user.* in that they require different permissions/capabilities 
from the calling process.

ACLs are named system.posix_acl_access and system.posix_acl_default. 
Capabilities could be named system.posix_caps, for example.

You can look this all up in the attr(5) manual page at 
<http://acl.bestbits.at/cgi-man/attr.5>.

--Andreas.

^ permalink raw reply

* [PATCH] fix broken machine check bits in 2.5.44-ac4
From: Dave Jones @ 2002-10-27 13:45 UTC (permalink / raw)
  To: Linux Kernel; +Cc: Alan Cox

This should do the trick for CONFIG_X86_MCE=n

diff -u linux-2.5/arch/i386/kernel/cpu/Makefile linux-2.5/arch/i386/kernel/cpu/Makefile
--- linux-2.5/arch/i386/kernel/cpu/Makefile	2002-10-25 18:02:31.000000000 -0100
+++ linux-2.5/arch/i386/kernel/cpu/Makefile	2002-10-27 12:24:39.000000000 -0100
@@ -13,7 +13,7 @@
 obj-y	+=	nexgen.o
 obj-y	+=	umc.o
 
-obj-y	+=	mcheck/
+obj-$(CONFIG_X86_MCE)	+=	mcheck/
 
 obj-$(CONFIG_MTRR)	+= 	mtrr/
 obj-$(CONFIG_CPU_FREQ)	+=	cpufreq/
diff -u linux-2.5/arch/i386/kernel/cpu/common.c linux-2.5/arch/i386/kernel/cpu/common.c
--- linux-2.5/arch/i386/kernel/cpu/common.c	2002-10-25 18:02:31.000000000 -0100
+++ linux-2.5/arch/i386/kernel/cpu/common.c	2002-10-27 12:24:39.000000000 -0100
@@ -354,7 +354,9 @@
 	       boot_cpu_data.x86_capability[3]);
 
 	/* Init Machine Check Exception if available. */
+#ifdef CONFIG_X86_MCE
 	mcheck_init(c);
+#endif
 }
 /*
  *	Perform early boot up checks for a valid TSC. See arch/i386/kernel/time.c
diff -u linux-2.5/arch/i386/kernel/cpu/mcheck/mce.c linux-2.5/arch/i386/kernel/cpu/mcheck/mce.c
--- linux-2.5/arch/i386/kernel/cpu/mcheck/mce.c	2002-10-25 18:02:32.000000000 -0100
+++ linux-2.5/arch/i386/kernel/cpu/mcheck/mce.c	2002-10-27 12:24:39.000000000 -0100
@@ -13,8 +13,6 @@
 
 #include "mce.h"
 
-#ifdef CONFIG_X86_MCE
-
 int mce_disabled __initdata = 0;
 
 /* Handle unconfigured int18 (should never happen) */
@@ -79,6 +77,0 @@
-
-#else
-asmlinkage void do_machine_check(struct pt_regs * regs, long error_code) {}
-asmlinkage void smp_thermal_interrupt(struct pt_regs regs) {}
-void __init mcheck_init(struct cpuinfo_x86 *c) {}
-#endif
diff -u linux-2.5/arch/i386/kernel/traps.c linux-2.5/arch/i386/kernel/traps.c
--- linux-2.5/arch/i386/kernel/traps.c	2002-10-25 18:02:31.000000000 -0100
+++ linux-2.5/arch/i386/kernel/traps.c	2002-10-27 12:24:39.000000000 -0100
@@ -916,7 +916,9 @@
 	set_trap_gate(15,&spurious_interrupt_bug);
 	set_trap_gate(16,&coprocessor_error);
 	set_trap_gate(17,&alignment_check);
+#ifdef CONFIG_X86_MCE
 	set_trap_gate(18,&machine_check);
+#endif
 	set_trap_gate(19,&simd_coprocessor_error);
 
 	set_system_gate(SYSCALL_VECTOR,&system_call);
--- bk-linus/arch/i386/kernel/entry.S	2002-10-20 20:21:21.000000000 -0100
+++ linux-2.5/arch/i386/kernel/entry.S	2002-10-27 12:24:39.000000000 -0100
@@ -471,10 +471,12 @@ ENTRY(page_fault)
 	pushl $do_page_fault
 	jmp error_code
 
+#ifdef CONFIG_X86_MCE
 ENTRY(machine_check)
 	pushl $0
 	pushl $do_machine_check
 	jmp error_code
+#endif
 
 ENTRY(spurious_interrupt_bug)
 	pushl $0

-- 
| Dave Jones.        http://www.codemonkey.org.uk

^ permalink raw reply

* Re: 2.4 very slow memory access on abit kd7raid (kt400); ten times slower than on kg7raid
From: KORN Andras @ 2002-10-27 13:33 UTC (permalink / raw)
  To: linux-kernel
In-Reply-To: <Pine.LNX.4.33.0210270139530.22820-100000@coffee.psychology.mcmaster.ca>

On Sun, Oct 27, 2002 at 01:44:26AM -0400, Mark Hahn wrote:

> >  raid5: measuring checksumming speed
> > -   8regs     :  2343.600 MB/sec
...
> > -raid5: using function: pIII_sse (4163.600 MB/sec)
> > +   8regs     :   228.400 MB/sec
...
> > +raid5: using function: pIII_sse (352.000 MB/sec)
> caching is disabled.

That was what it looked like to me, but I read in the FAQ I shouldn't jump
to conclusions. :)

> > What could be causing this? I believe it is a kernel issue because
> > memtest86 reports realistic memory bandwidths (about 590MB/s).
> 590 MB/s is quite low.  but I believe memtest86 also explicitly manages
> cache and mtrr's.

It does. With 'realistic' I meant it's on the same order of magnitude as
with the other MB.

> > reg00: base=0x00000000 (   0MB), size=1024MB: write-back, count=1
> I wonder if it's lying.

How can I find out? (Well, it sure looks like it's lying, so there's little
point in going to great lengths to confirm it; but why does it lie?)

> > +ACPI: Thermal Zone found
> any idea whether the CPU is hot?  (ie, there's usually a temp monitoring
> screen in the bios.)

It's not. Never seen it go above 40 degrees Celsius (about 104 Fahrenheit).

On Sun, Oct 27, 2002 at 08:53:46AM +0100, Willy Tarreau wrote:
> > What could be causing this? I believe it is a kernel issue because
> > memtest86 reports realistic memory bandwidths (about 590MB/s).
> does memtest86 report high speeds for the L2 cache ?

Over 3000MB/s for L2 and over 9000MB/s for L1. (I can't check exactly right
now.)

> I don't know if a buggy bios can slow it down that much, but that could
> explain your problem.

To me, everything looks right in memtest86. The values are slightly higher
than with the old MB.

> you can also take a look at /proc/interrupts to see if one source (NMI,
> machine check...) is bombing (ie more than tens of thousands/sec), thus
> letting no more time for other operations.

Sorry, I meant to include that in my original post. Here goes (without APIC):

           CPU0
  0:    3657439          XT-PIC  timer
  1:          2          XT-PIC  keyboard
  2:          0          XT-PIC  cascade
  5:    1187394          XT-PIC  eth1, eth2
  8:          3          XT-PIC  rtc
  9:          0          XT-PIC  acpi
 10:     245852          XT-PIC  ide2, ide3
 11:     461019          XT-PIC  eth3
 12:      86306          XT-PIC  eth0
 14:          3          XT-PIC  ide0
NMI:          0
ERR:          0
 
This is after 10 hours of uptime (with load continually in excess of 20). It
doesn't look suspicious to me. I could probably shuffle eth1 and eth2 around
so they don't share IRQs, but that wouldn't make much of a difference, I
think.

Andrew

Ps. Please keep Cc:ing me with replies, if it's not too much trouble.

-- 
          Andrew Korn (Korn Andras) <korn at chardonnay.math.bme.hu>
           Finger korn at chardonnay.math.bme.hu for pgp key. QOTD:
                     Why did Kamikaze pilots wear helmets?

^ permalink raw reply

* [BUG]Kernel Panic while booting 2.5.44
From: Andreas Tscharner @ 2002-10-27 13:33 UTC (permalink / raw)
  To: Linux Kernel Mailinglist

Hello World,

I got a Kernel Panic when I try to boot 2.5.44. Bug output and
configuration below. GCC version 2.95.4


kernel BUG at kernel/workqueue.c:69!
invalid operand: 0000

CPU
EIP:    0060:[<c0122325>]    Not tainted
EFLAGS: 00010013
EIP is at queue_work+0x25/0x98

eax: 00000000   ebx: dffc6000   ecx: dffe826c   edx: c03650f4
esi: c03650f4   edi: c03650f8   ebp: dffe826c   esp: dffc7de8
ds: 0068   es: 0068   ss: 0068

Process swapper (pid:1, threadinfo=dffc6000 task=dffc4040)

stack 00000000 c03650f0 dfd89800 dfd89600 c0122af7 c0208811 00000000
dffc6000
      00000297 c01fff76 dfd89800 c0200434 dfd89800 dfd89a8c dfd3a000
dffc7e54
      00000000 c020588c dfd89800 dfd89800 dfd3a028 dfd89a8c 00000002
dfd89600 

Call Trace:
[<c0122af7>] schedule_work+0xf/0x10
[<c0208811>] ppa_queuecommand+0x79/0x84
[<c01fff76>] scsi_dispatch_cmd+0x11a/0x1e4
[<c0200434>] scsi_done+0x0/0x68
[<c020588c>] scsi_request_fn+0x39c/0x3bc
[<c01df6f1>] blk_insert_request+0x59/0x80
[<c0204d0e>] scsi_insert_sepcial_req+0x1a/0x20
[<c0200189>] scsi_do_req+0x91/0x98
[<c02000db>] scsi_wait_req+0x7d/0xb8
[<c01ff828>] scsi_wait_done+0x0/0x5c
[<c0206825>] scsi_probe_lun+0x59/0x194
[<c0206dc3>] scsi_probe_and_add_lun+0x5f/0x154
[<c0206fab>] scsi_scan_target+0x43/0x74
[<c020718f>] scan_scsis+0x7b/0xac
[<c0202001>] scsi_register_host+0x101/0x1e4
[<c0105086>] init+0x20/0x178
[<c0105058>] init+0x0/0x178
[<c01054b9>] kerenl_thread_helper+0x5/0xc

Code: 0f 0b 45 00 de 34 27 c0 8d 76 00 89 6e 14 9c 5a fa ff 43 10
 <0> Kernel panic: Attemted to kill init!



The .configuration
#
# Automatically generated by make menuconfig: don't edit
#
CONFIG_X86=y
# CONFIG_SBUS is not set
CONFIG_UID16=y
CONFIG_GENERIC_ISA_DMA=y

#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y

#
# General setup
#
CONFIG_NET=y
CONFIG_SYSVIPC=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_SYSCTL=y

#
# Loadable module support
#
CONFIG_MODULES=y
# CONFIG_MODVERSIONS is not set
CONFIG_KMOD=y

#
# Processor type and features
#
# CONFIG_M386 is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
# CONFIG_M686 is not set
CONFIG_MPENTIUMIII=y
# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
# CONFIG_MELAN is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP2 is not set
# CONFIG_MWINCHIP3D is not set
# CONFIG_MCYRIXIII is not set
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_CMPXCHG=y
CONFIG_X86_XADD=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_X86_L1_CACHE_SHIFT=5
CONFIG_X86_TSC=y
CONFIG_X86_GOOD_APIC=y
CONFIG_X86_USE_PPRO_CHECKSUM=y
# CONFIG_HUGETLB_PAGE is not set
# CONFIG_SMP is not set
CONFIG_PREEMPT=y
# CONFIG_X86_UP_APIC is not set
# CONFIG_X86_UP_IOAPIC is not set
CONFIG_X86_MCE=y
# CONFIG_X86_MCE_NONFATAL is not set
# CONFIG_X86_MCE_P4THERMAL is not set
# CONFIG_CPU_FREQ is not set
# CONFIG_TOSHIBA is not set
# CONFIG_I8K is not set
# CONFIG_MICROCODE is not set
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
# CONFIG_EDD is not set
CONFIG_NOHIGHMEM=y
# CONFIG_HIGHMEM4G is not set
# CONFIG_HIGHMEM64G is not set
# CONFIG_MATH_EMULATION is not set
CONFIG_MTRR=y
CONFIG_HAVE_DEC_LOCK=y

#
# Power management options (ACPI, APM)
#

#
# ACPI Support
#
CONFIG_ACPI=y
CONFIG_ACPI_BOOT=y
# CONFIG_ACPI_SLEEP is not set
# CONFIG_ACPI_AC is not set
# CONFIG_ACPI_BATTERY is not set
# CONFIG_ACPI_BUTTON is not set
CONFIG_ACPI_FAN=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_TOSHIBA is not set
# CONFIG_ACPI_DEBUG is not set
CONFIG_ACPI_BOOT=y
CONFIG_ACPI_BUS=y
CONFIG_ACPI_INTERPRETER=y
CONFIG_ACPI_EC=y
CONFIG_ACPI_POWER=y
CONFIG_ACPI_PCI=y
# CONFIG_ACPI_SLEEP is not set
CONFIG_ACPI_SYSTEM=y
CONFIG_PM=y
# CONFIG_APM is not set

#
# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
#
CONFIG_PCI=y
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GODIRECT is not set
CONFIG_PCI_GOANY=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
# CONFIG_SCx200 is not set
CONFIG_PCI_NAMES=y
# CONFIG_ISA is not set
# CONFIG_EISA is not set
# CONFIG_MCA is not set
# CONFIG_HOTPLUG is not set
# CONFIG_PCMCIA is not set
# CONFIG_HOTPLUG_PCI is not set

#
# Executable file formats
#
CONFIG_KCORE_ELF=y
# CONFIG_KCORE_AOUT is not set
CONFIG_BINFMT_AOUT=m
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m

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

#
# Parallel port support
#
CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y
CONFIG_PARPORT_PC_CML1=y
# CONFIG_PARPORT_SERIAL is not set
# CONFIG_PARPORT_PC_FIFO is not set
# CONFIG_PARPORT_PC_SUPERIO is not set
# CONFIG_PARPORT_AMIGA is not set
# CONFIG_PARPORT_MFC3 is not set
# CONFIG_PARPORT_ATARI is not set
# CONFIG_PARPORT_GSC is not set
# CONFIG_PARPORT_SUNBPP is not set
# CONFIG_PARPORT_OTHER is not set
CONFIG_PARPORT_1284=y

#
# Plug and Play configuration
#
# CONFIG_PNP is not set
# CONFIG_PNP_NAMES is not set
# CONFIG_PNP_DEBUG is not set
# CONFIG_ISAPNP is not set
# CONFIG_PNPBIOS is not set

#
# Block devices
#
CONFIG_BLK_DEV_FD=y
# CONFIG_BLK_DEV_XD is not set
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_CISS_SCSI_TAPE is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_LBD is not set

#
# ATA/ATAPI/MFM/RLL device support
#
CONFIG_IDE=y

#
# IDE, ATA and ATAPI Block devices
#
CONFIG_BLK_DEV_IDE=y
# CONFIG_BLK_DEV_HD_IDE is not set
# CONFIG_BLK_DEV_HD is not set
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDEDISK_MULTI_MODE=y
# CONFIG_IDEDISK_STROKE is not set
# CONFIG_BLK_DEV_IDECS is not set
CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDEFLOPPY is not set
CONFIG_BLK_DEV_IDESCSI=m
# CONFIG_IDE_TASK_IOCTL is not set
# CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
# CONFIG_BLK_DEV_ISAPNP is not set
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_BLK_DEV_GENERIC=y
CONFIG_IDEPCI_SHARE_IRQ=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_IDE_TCQ is not set
# CONFIG_BLK_DEV_IDE_TCQ_DEFAULT is not set
# CONFIG_BLK_DEV_OFFBOARD is not set
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
CONFIG_IDEDMA_PCI_AUTO=y
# CONFIG_IDEDMA_ONLYDISK is not set
CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDEDMA_PCI_WIP is not set
# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set
CONFIG_BLK_DEV_ADMA=y
# CONFIG_BLK_DEV_AEC62XX is not set
# CONFIG_BLK_DEV_ALI15X3 is not set
# CONFIG_WDC_ALI15X3 is not set
# CONFIG_BLK_DEV_AMD74XX is not set
# CONFIG_AMD74XX_OVERRIDE is not set
# CONFIG_BLK_DEV_CMD64X is not set
# CONFIG_BLK_DEV_CY82C693 is not set
# CONFIG_BLK_DEV_CS5530 is not set
# CONFIG_BLK_DEV_HPT34X is not set
# CONFIG_HPT34X_AUTODMA is not set
# CONFIG_BLK_DEV_HPT366 is not set
# CONFIG_BLK_DEV_PIIX is not set
# CONFIG_BLK_DEV_NFORCE is not set
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_OPTI621 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_PDC202XX_BURST is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
# CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_RZ1000 is not set
# CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIIMAGE is not set
# CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set
CONFIG_IDEDMA_AUTO=y
# CONFIG_IDEDMA_IVB is not set
# CONFIG_DMA_NONPCI is not set
CONFIG_BLK_DEV_IDE_MODES=y

#
# SCSI device support
#
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not set
# CONFIG_BLK_DEV_SR is not set
CONFIG_CHR_DEV_SG=y
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_REPORT_LUNS is not set
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set

#
# SCSI low-level drivers
#
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_DMA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
CONFIG_SCSI_PPA=y
# CONFIG_SCSI_IMM is not set
# CONFIG_SCSI_IZIP_EPP16 is not set
# CONFIG_SCSI_IZIP_SLOW_CTR is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_NCR53C8XX is not set
# CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG is not set

#
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
# CONFIG_MD_RAID1 is not set
# CONFIG_MD_RAID5 is not set
# CONFIG_MD_MULTIPATH is not set
# CONFIG_BLK_DEV_LVM is not set

#
# Fusion MPT device support
#
# CONFIG_FUSION is not set
# CONFIG_FUSION_BOOT is not set
# CONFIG_FUSION_ISENSE is not set
# CONFIG_FUSION_CTL is not set
# CONFIG_FUSION_LAN is not set

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

#
# I2O device support
#
# CONFIG_I2O is not set
# CONFIG_I2O_PCI is not set
# CONFIG_I2O_BLOCK is not set
# CONFIG_I2O_LAN is not set
# CONFIG_I2O_SCSI is not set
# CONFIG_I2O_PROC is not set

#
# Networking options
#
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
# CONFIG_NETLINK_DEV is not set
# CONFIG_NETFILTER is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
# CONFIG_IP_PNP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_ARPD is not set
# CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
CONFIG_IPV6=m

#
#    SCTP Configuration (EXPERIMENTAL)
#
CONFIG_IPV6_SCTP__=m
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_LLC is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_DEV_APPLETALK is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set
# CONFIG_NET_HW_FLOWCONTROL is not set

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

#
# Network device support
#
CONFIG_NETDEVICES=y

#
# ARCnet devices
#
# CONFIG_ARCNET is not set
CONFIG_DUMMY=m
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set

#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
# CONFIG_SUNLANCE is not set
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNBMAC is not set
# CONFIG_SUNQE is not set
# CONFIG_SUNGEM is not set
CONFIG_NET_VENDOR_3COM=y
# CONFIG_EL1 is not set
# CONFIG_EL2 is not set
# CONFIG_ELPLUS is not set
# CONFIG_EL16 is not set
# CONFIG_ELMC is not set
# CONFIG_ELMC_II is not set
CONFIG_VORTEX=y
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set

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

#
# Ethernet (1000 Mbit)
#
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_E1000 is not set
# CONFIG_E1000_NAPI is not set
# CONFIG_MYRI_SBUS is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_SK98LIN is not set
# CONFIG_TIGON3 is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PLIP is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set

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

#
# Token Ring devices
#
# CONFIG_TR is not set
# CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set

#
# Wan interfaces
#
# CONFIG_WAN is not set

#
# Amateur Radio support
#
# CONFIG_HAMRADIO is not set

#
# IrDA (infrared) support
#
# CONFIG_IRDA is not set

#
# ISDN subsystem
#
# CONFIG_ISDN_BOOL is not set

#
# Telephony Support
#
# CONFIG_PHONE is not set
# CONFIG_PHONE_IXJ is not set
# CONFIG_PHONE_IXJ_PCMCIA is not set

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
# CONFIG_GAMEPORT_NS558 is not set
# CONFIG_GAMEPORT_L4 is not set
# CONFIG_GAMEPORT_EMU10K1 is not set
# CONFIG_GAMEPORT_VORTEX is not set
# CONFIG_GAMEPORT_FM801 is not set
# CONFIG_GAMEPORT_CS461x is not set
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_INPORT is not set
# CONFIG_MOUSE_LOGIBM is not set
# CONFIG_MOUSE_PC110PAD is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_JOYSTICK_ANALOG is not set
# CONFIG_JOYSTICK_A3D is not set
# CONFIG_JOYSTICK_ADI is not set
# CONFIG_JOYSTICK_COBRA is not set
# CONFIG_JOYSTICK_GF2K is not set
# CONFIG_JOYSTICK_GRIP is not set
# CONFIG_JOYSTICK_GRIP_MP is not set
# CONFIG_JOYSTICK_GUILLEMOT is not set
# CONFIG_JOYSTICK_INTERACT is not set
# CONFIG_JOYSTICK_SIDEWINDER is not set
# CONFIG_JOYSTICK_TMDC is not set
# CONFIG_JOYSTICK_IFORCE is not set
# CONFIG_JOYSTICK_WARRIOR is not set
# CONFIG_JOYSTICK_MAGELLAN is not set
# CONFIG_JOYSTICK_SPACEORB is not set
# CONFIG_JOYSTICK_SPACEBALL is not set
# CONFIG_JOYSTICK_STINGER is not set
# CONFIG_JOYSTICK_TWIDDLER is not set
# CONFIG_JOYSTICK_DB9 is not set
# CONFIG_JOYSTICK_GAMECON is not set
# CONFIG_JOYSTICK_TURBOGRAFX is not set
# CONFIG_INPUT_JOYDUMP is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_INPUT_MISC is not set
# CONFIG_INPUT_PCSPKR is not set
# CONFIG_INPUT_UINPUT is not set

#
# Character devices
#
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_SERIAL_NONSTANDARD is not set

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_CONSOLE is not set
# CONFIG_SERIAL_8250_CS is not set
# CONFIG_SERIAL_8250_EXTENDED is not set
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set
CONFIG_SERIAL_CORE=y
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
CONFIG_PRINTER=y
# CONFIG_LP_CONSOLE is not set
# CONFIG_PPDEV is not set
# CONFIG_TIPAR is not set

#
# I2C support
#
# CONFIG_I2C is not set

#
# Mice
#
# CONFIG_BUSMOUSE is not set
# CONFIG_QIC02_TAPE is not set

#
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
CONFIG_INTEL_RNG=y
# CONFIG_AMD_RNG is not set
# CONFIG_NVRAM is not set
CONFIG_RTC=y
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_SONYPI is not set

#
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
CONFIG_AGP=y
CONFIG_AGP_INTEL=y
# CONFIG_AGP_I810 is not set
# CONFIG_AGP_VIA is not set
# CONFIG_AGP_AMD is not set
# CONFIG_AGP_SIS is not set
# CONFIG_AGP_ALI is not set
# CONFIG_AGP_SWORKS is not set
# CONFIG_AGP_AMD_8151 is not set
CONFIG_DRM=y
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_R128 is not set
# CONFIG_DRM_RADEON is not set
# CONFIG_DRM_I810 is not set
# CONFIG_DRM_I830 is not set
# CONFIG_DRM_MGA is not set
# CONFIG_MWAVE is not set
# CONFIG_SCx200_GPIO is not set
# CONFIG_RAW_DRIVER is not set

#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set

#
# File systems
#
# CONFIG_QUOTA is not set
# CONFIG_QFMT_V1 is not set
# CONFIG_QFMT_V2 is not set
# CONFIG_AUTOFS_FS is not set
CONFIG_AUTOFS4_FS=y
CONFIG_REISERFS_FS=y
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_BFS_FS is not set
CONFIG_EXT3_FS=m
CONFIG_JBD=m
# CONFIG_JBD_DEBUG is not set
CONFIG_FAT_FS=m
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
CONFIG_VFAT_FS=m
# CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_TMPFS is not set
CONFIG_RAMFS=y
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
# CONFIG_ZISOFS is not set
# CONFIG_JFS_FS is not set
# CONFIG_JFS_DEBUG is not set
# CONFIG_JFS_STATISTICS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
CONFIG_DEVFS_FS=y
CONFIG_DEVFS_MOUNT=y
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set
# CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set
CONFIG_UDF_FS=m
# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set
# CONFIG_UFS_FS_WRITE is not set
# CONFIG_XFS_FS is not set
# CONFIG_XFS_RT is not set
# CONFIG_XFS_QUOTA is not set

#
# Network File Systems
#
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
# CONFIG_NFS_FS is not set
# CONFIG_NFS_V3 is not set
# CONFIG_NFS_V4 is not set
# CONFIG_ROOT_NFS is not set
# CONFIG_NFSD is not set
# CONFIG_NFSD_V3 is not set
# CONFIG_NFSD_V4 is not set
# CONFIG_NFSD_TCP is not set
# CONFIG_SUNRPC is not set
# CONFIG_LOCKD is not set
# CONFIG_EXPORTFS is not set
# CONFIG_CIFS is not set
# CONFIG_SMB_FS is not set
# CONFIG_NCP_FS is not set
# CONFIG_NCPFS_PACKET_SIGNING is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set
# CONFIG_NCPFS_STRONG is not set
# CONFIG_NCPFS_NFS_NS is not set
# CONFIG_NCPFS_OS2_NS is not set
# CONFIG_NCPFS_SMALLDOS is not set
# CONFIG_NCPFS_NLS is not set
# CONFIG_NCPFS_EXTRAS is not set
# CONFIG_AFS_FS is not set
# CONFIG_ZISOFS_FS is not set

#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
# CONFIG_SMB_NLS is not set
CONFIG_NLS=y

#
# Native Language Support
#
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=m
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
CONFIG_NLS_CODEPAGE_850=m
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
CONFIG_NLS_ISO8859_15=m
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
# CONFIG_NLS_UTF8 is not set

#
# Console drivers
#
CONFIG_VGA_CONSOLE=y
CONFIG_VIDEO_SELECT=y
# CONFIG_MDA_CONSOLE is not set

#
# Frame-buffer support
#
# CONFIG_FB is not set

#
# Sound
#
CONFIG_SOUND=y

#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set

#
# Advanced Linux Sound Architecture
#
CONFIG_SND=m
CONFIG_SND_SEQUENCER=m
# CONFIG_SND_SEQ_DUMMY is not set
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_RTCTIMER=m
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
# CONFIG_SND_DEBUG_MEMORY is not set
# CONFIG_SND_DEBUG_DETECT is not set

#
# Generic devices
#
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set

#
# PCI devices
#
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_CS46XX_NEW_DSP is not set
# CONFIG_SND_CS4281 is not set
CONFIG_SND_EMU10K1=m
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_YMFPCI is not set
# CONFIG_SND_ALS4000 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_FM801 is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_INTEL8X0 is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_VIA82XX is not set

#
# ALSA USB devices
#
# CONFIG_SND_USB_AUDIO is not set

#
# USB support
#
CONFIG_USB=y
# CONFIG_USB_DEBUG is not set
# CONFIG_USB_DEVICEFS is not set
# CONFIG_USB_LONG_TIMEOUT is not set
# CONFIG_USB_BANDWIDTH is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_EHCI_HCD is not set
# CONFIG_USB_OHCI_HCD is not set
CONFIG_USB_UHCI_HCD_ALT=y
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_MIDI is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_HP8200e is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_HID is not set
# CONFIG_USB_HIDINPUT is not set
# CONFIG_HID_FF is not set
# CONFIG_HID_PID is not set
# CONFIG_LOGITECH_FF is not set
# CONFIG_USB_HIDDEV is not set

#
# USB HID Boot Protocol drivers
#
# CONFIG_USB_KBD is not set
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_SCANNER is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
# CONFIG_USB_DABUSB is not set
# CONFIG_USB_VICAM is not set
# CONFIG_USB_DSBR is not set
# CONFIG_USB_IBMCAM is not set
# CONFIG_USB_KONICAWC is not set
# CONFIG_USB_OV511 is not set
# CONFIG_USB_PWC is not set
# CONFIG_USB_SE401 is not set
# CONFIG_USB_STV680 is not set
# CONFIG_USB_CATC is not set
# CONFIG_USB_CDCETHER is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
# CONFIG_USB_USS720 is not set

#
# USB Serial Converter support
#
# CONFIG_USB_SERIAL is not set
# CONFIG_USB_SERIAL_GENERIC is not set
# CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_EMPEG is not set
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_IPAQ is not set
# CONFIG_USB_SERIAL_IR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
# CONFIG_USB_SERIAL_KLSI is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_SAFE is not set
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_XIRCOM is not set
# CONFIG_USB_SERIAL_OMNINET is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_TIGL is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_BRLVGER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_SPEEDTOUCH is not set
# CONFIG_USB_TEST is not set

#
# Bluetooth support
#
# CONFIG_BT is not set

#
# Profiling support
#
# CONFIG_PROFILING is not set

#
# Kernel hacking
#
# CONFIG_SOFTWARE_SUSPEND is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_STACKOVERFLOW is not set
CONFIG_DEBUG_SLAB=y
# CONFIG_DEBUG_IOVIRT is not set
CONFIG_MAGIC_SYSRQ=y
# CONFIG_DEBUG_SPINLOCK is not set
CONFIG_KALLSYMS=y

#
# Security options
#
CONFIG_SECURITY_CAPABILITIES=y

#
# Library routines
#
# CONFIG_CRC32 is not set
# CONFIG_ZLIB_INFLATE is not set
# CONFIG_ZLIB_DEFLATE is not set
CONFIG_X86_BIOS_REBOOT=y


Regards
	Andreas
-- 
Andreas Tscharner                                  starfire@dplanet.ch
----------------------------------------------------------------------
"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs, and the Universe trying
to produce bigger and better idiots. So far, the Universe is winning."
                                                          -- Rich Cook 

^ permalink raw reply

* Re: [PATCH,RFC] faster kmalloc lookup
From: Manfred Spraul @ 2002-10-27 13:29 UTC (permalink / raw)
  To: Manfred Spraul; +Cc: Alan Cox, Linux Kernel Mailing List
In-Reply-To: <3DBBBB30.20409@colorfullife.com>

I've run my slab microbenchmark over the 3 versions:
- current
- generic_fls
- i386 asm optimized fls

The test reports the fastest time for 100 kmalloc calls in a tight loop 
(Duron 700). Loop/test overhead substracted.

32-byte alloc:
current:        41 ticks
generic_fls: 56 ticks
bsrl:            54 ticks

4096 byte alloc: 84 ticks
generic_fls: 53 ticks
bsrl:        54 ticks

40 ticks difference for -current between 4096 and 32 bytes - ~4 cycles 
for each loop.
bit scan is 10 ticks slower for 32 byte allocs, 30 ticks faster for 4096 
byte allocs.

No difference between generic_fls and bsrl - the branch predictor can 
easily predict all branches in generic_fls for constant kmalloc calls.

--
    Manfred


^ permalink raw reply

* [Benchmark] Chat results
From: Paolo Ciarrocchi @ 2002-10-27 13:17 UTC (permalink / raw)
  To: linux-kernel

		--- What is the chat benchmark ---
Usage: chat_s ip_addr [port]

       ip_addr:	ip address that the server binds to listening socket.
       [port]:	port number server binds to the listening socket.
		default is 9999.

Usage: chat_c ip_addr [num_rooms] [num_messages] [server_port]

       ip_addr:		server ip address that the client connects to.
       [num_rooms]:	the number of chat rooms.
			default is 10.
       [num_messages]:	the number of messages sent by each chat room member.
			default is 100.	
       [port]:		server port number the client connects to.
			default is 9999.

This benchmark includes both a client and server.  The benchmark is
modeled after a chat room.  This benchmark will create a lot of threads,
tcp connections, and send and receive a lot of messages.  The client side
of the benchmark will report the number of messages sent per second.

The number of chat rooms and messages will control the workload.
The default number of chat rooms is 10.
The default number of messages is 100.  The size of each message is 100 bytes.
Both of these parameters are specified on the client side.

(1) Each chat room has 20 users.
(2) 10 chat rooms represents 20*10 or 200 users.
(3) For each user in the chat room, the client will make a connection
    to the server.
(4) 10 chat rooms will create 10*20 or 200 connections between the client
    and server.
(5) For each user (or connection) in the chat room, 1 'send' thread is created
    and 1 'receive' thread is created.
(6) 10 chat rooms will create 10*20*2 or 400 client threads and 400 server
    threads for a total of 800 threads.
(7) Each client 'send' thread will send the specified number of messages
    to the server.
(8) For 10 chat rooms and 100 messages, the client will send 10*20*100 or
    20,000 messages.  The server 'receive' thread will receive the
    corresponding number of messages.
(9) The chat room server will echo each of the messages back to the other
    users in the chat room.
(10) For 10 chat rooms and 100 messages, the server 'send' thread will send
     10*20*100*19 or 380,000 messages.  The client 'receive' thread will
     receive the corresponding number of messages.
(11) The client will report the message throughput at the end of the test.
(12) The server loops and accepts another start message from the client.

		--- The scripts I used ---
#!/bin/sh
/etc/init.d/network stop
/etc/init.d/network start
./chat_s 127.0.0.1 &
> `uname -r`_total.results
for i in `seq 1 1 10`
do
	./chat_c 127.0.0.1 30 1000 9999 >>`uname -r`_total.results
done
grep Average `uname -r`_total.results | awk '{tot+=$4}; END {print "Average throughput: " tot/NR " messages per second"}' > `uname -r`.average
grep Average `uname -r`_total.results|sort >`uname -r`.sort
echo -n "Min throughput:" >> `uname -r`.average
head -1 `uname -r`.sort|cut -d ":" -f 2 >> `uname -r`.average
echo -n "Max throughput:" >> `uname -r`.average
tail -1 `uname -r`.sort|cut -d ":" -f 2 >> `uname -r`.average


#!/bin/bash
out=(`ls *.average|sort`)
total=`echo ${out[@]}|wc -w`
# echo $total 
> summary.txt
for i in `seq 0 1 $[total-1]`
do
kernel_version=`echo ${out[i]}|cut -d "." --fields=1-3`
	echo -e "\t\tKernel version: $kernel_version" >> summary.txt
	cat ${out[i]} >> summary.txt
	echo >> summary.txt
done;


		--- Results --- 
		
		Kernel version: 2.4.19-ck7
Average throughput: 57210.1 messages per second
Min throughput: 55007 messages per second
Max throughput: 61988 messages per second

		Kernel version: 2.4.19
Average throughput: 47250.9 messages per second
Min throughput: 45634 messages per second
Max throughput: 50940 messages per second

		Kernel version: 2.5.38
Average throughput: 62543.3 messages per second
Min throughput: 58416 messages per second
Max throughput: 64196 messages per second

		Kernel version: 2.5.40
Average throughput: 60115.4 messages per second
Min throughput: 52443 messages per second
Max throughput: 63264 messages per second

		Kernel version: 2.5.43
Average throughput: 58807.5 messages per second
Min throughput: 55376 messages per second
Max throughput: 60617 messages per second

		Kernel version: 2.5.44-mm1
Average throughput: 56060.7 messages per second
Min throughput: 53250 messages per second
Max throughput: 58617 messages per second

		Kernel version: 2.5.44-mm5
Average throughput: 56778.8 messages per second
Min throughput: 54685 messages per second
Max throughput: 59737 messages per second

		Kernel version: 2.5.44
Average throughput: 57906.2 messages per second
Min throughput: 49808 messages per second
Max throughput: 60197 messages per second



Comments/suggestions ?


		Paolo


-- 

Powered by Outblaze

^ permalink raw reply

* Re: Swap doesn't work
From: Alan Cox @ 2002-10-27 13:12 UTC (permalink / raw)
  To: Alexander.Riesen; +Cc: Vladim?r T?ebick?, Linux Kernel Mailing List
In-Reply-To: <20021027125021.GA1578@riesen-pc.gr05.synopsys.com>

On Sun, 2002-10-27 at 12:50, Alex Riesen wrote:
> On Sun, Oct 27, 2002 at 12:07:44PM +0100, Vladim?r T?ebick? wrote:
> > > Wow. Any of the errors above prevents swap partition from being used.
> > > How did you manage to see anything in /proc/swaps?
> > > I suggest you do:
> > >  swapoff /dev/hda6
> > >  badblocks /dev/hda6
> > Badblocks finds each time ONE bad block at the end of the partition no
> > matter where I create it or how large the partition is. Syslog shows this
> > message:
> > Oct 27 10:57:45 shunka kernel: attempt to access beyond end of device
> > Oct 27 10:57:45 shunka kernel: 03:06: rw=0, want=594376, limit=594373
> 
> That's not a badblock. That's an kernel IDE bug. Andre Hedrick and Alan
> Cox will love to see this.

Not on a kernel built with an untrusted hand built tool chain


^ permalink raw reply

* Re: Swap doesn't work
From: Alex Riesen @ 2002-10-27 12:50 UTC (permalink / raw)
  To: Vladim?r T?ebick?; +Cc: Linux Kernel Mailing List
In-Reply-To: <002501c27da9$2524d0f0$4500a8c0@cybernet.cz>

On Sun, Oct 27, 2002 at 12:07:44PM +0100, Vladim?r T?ebick? wrote:
> > Wow. Any of the errors above prevents swap partition from being used.
> > How did you manage to see anything in /proc/swaps?
> > I suggest you do:
> >  swapoff /dev/hda6
> >  badblocks /dev/hda6
> Badblocks finds each time ONE bad block at the end of the partition no
> matter where I create it or how large the partition is. Syslog shows this
> message:
> Oct 27 10:57:45 shunka kernel: attempt to access beyond end of device
> Oct 27 10:57:45 shunka kernel: 03:06: rw=0, want=594376, limit=594373

That's not a badblock. That's an kernel IDE bug. Andre Hedrick and Alan
Cox will love to see this.

> > Look for "SWAP-SPACE" (old swap) or "SWAPSPACE2" (the new one).
> > Just to make sure you've initialized the partition properly.
> > Than turn it on: swapon /dev/hda6; tail /var/log/syslog
> where should I try to find it? ("SWAP-SPACE" | "SWAPSPACE2")

At the beginning. The searching for it doesn't make sense now.

> What mean the problems I (only) once noticed about the signature?

Nothing special. You just have something broken in a particularly
unpredictable way.


^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox