2010-08-18 04:13:38

by Olof Johansson

[permalink] [raw]
Subject: [PATCH] mmc: make number of mmcblk minors configurable

The old limit of number of minor numbers per mmcblk device was hardcoded
at 8. This isn't enough for some of the more elaborate partitioning
schemes, for example those used by Chrome OS.

Since there might be a bunch of systems out there with static /dev
contents that relies on the old numbering scheme, let's make it a
build-time option with the default set to the previous 8.

Signed-off-by: Olof Johansson <[email protected]>
---
drivers/mmc/card/Kconfig | 10 ++++++++++
drivers/mmc/card/block.c | 20 ++++++++------------
2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/drivers/mmc/card/Kconfig b/drivers/mmc/card/Kconfig
index 3f2a912..e939dcf 100644
--- a/drivers/mmc/card/Kconfig
+++ b/drivers/mmc/card/Kconfig
@@ -14,6 +14,16 @@ config MMC_BLOCK
mount the filesystem. Almost everyone wishing MMC support
should say Y or M here.

+config MMC_BLOCK_MINORS
+ int "Number of minors per block device"
+ range 4 32
+ default 8
+ help
+ Number of minors per block device. One is needed for every
+ partition (plus one for the whole device).
+ Default is 8 to be backwards compatible with previous
+ hardcoded device numbering.
+
config MMC_BLOCK_BOUNCE
bool "Use bounce buffer for simple hosts"
depends on MMC_BLOCK
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index d545f79..524e232 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -45,13 +45,9 @@

MODULE_ALIAS("mmc:block");

-/*
- * max 8 partitions per card
- */
-#define MMC_SHIFT 3
-#define MMC_NUM_MINORS (256 >> MMC_SHIFT)
+#define MMC_MAX_DEVICES ((255 + CONFIG_MMC_BLOCK_MINORS) / CONFIG_MMC_BLOCK_MINORS)

-static DECLARE_BITMAP(dev_use, MMC_NUM_MINORS);
+static DECLARE_BITMAP(dev_use, MMC_MAX_DEVICES);

/*
* There is one mmc_blk_data per slot.
@@ -88,10 +84,10 @@ static void mmc_blk_put(struct mmc_blk_data *md)
md->usage--;
if (md->usage == 0) {
int devmaj = MAJOR(disk_devt(md->disk));
- int devidx = MINOR(disk_devt(md->disk)) >> MMC_SHIFT;
+ int devidx = MINOR(disk_devt(md->disk)) / CONFIG_MMC_BLOCK_MINORS;

if (!devmaj)
- devidx = md->disk->first_minor >> MMC_SHIFT;
+ devidx = md->disk->first_minor / CONFIG_MMC_BLOCK_MINORS;

blk_cleanup_queue(md->queue.queue);

@@ -567,8 +563,8 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
struct mmc_blk_data *md;
int devidx, ret;

- devidx = find_first_zero_bit(dev_use, MMC_NUM_MINORS);
- if (devidx >= MMC_NUM_MINORS)
+ devidx = find_first_zero_bit(dev_use, MMC_MAX_DEVICES);
+ if (devidx >= MMC_MAX_DEVICES)
return ERR_PTR(-ENOSPC);
__set_bit(devidx, dev_use);

@@ -585,7 +581,7 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
*/
md->read_only = mmc_blk_readonly(card);

- md->disk = alloc_disk(1 << MMC_SHIFT);
+ md->disk = alloc_disk(CONFIG_MMC_BLOCK_MINORS);
if (md->disk == NULL) {
ret = -ENOMEM;
goto err_kfree;
@@ -602,7 +598,7 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
md->queue.data = md;

md->disk->major = MMC_BLOCK_MAJOR;
- md->disk->first_minor = devidx << MMC_SHIFT;
+ md->disk->first_minor = devidx * CONFIG_MMC_BLOCK_MINORS;
md->disk->fops = &mmc_bdops;
md->disk->private_data = md;
md->disk->queue = md->queue.queue;
--
1.5.6.5


2010-08-19 00:17:14

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] mmc: make number of mmcblk minors configurable

On Tue, 17 Aug 2010 23:13:33 -0500
Olof Johansson <[email protected]> wrote:

> The old limit of number of minor numbers per mmcblk device was hardcoded
> at 8. This isn't enough for some of the more elaborate partitioning
> schemes, for example those used by Chrome OS.
>
> Since there might be a bunch of systems out there with static /dev
> contents that relies on the old numbering scheme, let's make it a
> build-time option with the default set to the previous 8.
>

How does the numbering scheme change? What's the user-visible effect
of setting CONFIG_MMC_BLOCK_MINORS to, say, 16?

> ---
> drivers/mmc/card/Kconfig | 10 ++++++++++
> drivers/mmc/card/block.c | 20 ++++++++------------
> 2 files changed, 18 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/mmc/card/Kconfig b/drivers/mmc/card/Kconfig
> index 3f2a912..e939dcf 100644
> --- a/drivers/mmc/card/Kconfig
> +++ b/drivers/mmc/card/Kconfig
> @@ -14,6 +14,16 @@ config MMC_BLOCK
> mount the filesystem. Almost everyone wishing MMC support
> should say Y or M here.
>
> +config MMC_BLOCK_MINORS
> + int "Number of minors per block device"
> + range 4 32
> + default 8
> + help
> + Number of minors per block device. One is needed for every
> + partition (plus one for the whole device).
> + Default is 8 to be backwards compatible with previous
> + hardcoded device numbering.

If possible it would be better to do this with a kernel boot (or
modprobe) parameter. That permits vendors to ship packaged kernels
with full functionality, etc. Possible? The default value of the
runtime-settable parameter could be Kconfigurable is there's a real
need for that.


> config MMC_BLOCK_BOUNCE
> bool "Use bounce buffer for simple hosts"
> depends on MMC_BLOCK
> diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
> index d545f79..524e232 100644
> --- a/drivers/mmc/card/block.c
> +++ b/drivers/mmc/card/block.c
> @@ -45,13 +45,9 @@
>
> MODULE_ALIAS("mmc:block");
>
> -/*
> - * max 8 partitions per card
> - */
> -#define MMC_SHIFT 3
> -#define MMC_NUM_MINORS (256 >> MMC_SHIFT)
> +#define MMC_MAX_DEVICES ((255 + CONFIG_MMC_BLOCK_MINORS) / CONFIG_MMC_BLOCK_MINORS)

So if I increase CONFIG_MMC_BLOCK_MINORS, I can no longer support as
many devices? That'd be worth mentioning somewhere?

fwiw, the above could use DIV_ROUND_UP().

2010-08-19 03:22:33

by Olof Johansson

[permalink] [raw]
Subject: Re: [PATCH] mmc: make number of mmcblk minors configurable

Hi,

On Wed, Aug 18, 2010 at 05:16:36PM -0700, Andrew Morton wrote:
> On Tue, 17 Aug 2010 23:13:33 -0500
> Olof Johansson <[email protected]> wrote:
>
> > The old limit of number of minor numbers per mmcblk device was hardcoded
> > at 8. This isn't enough for some of the more elaborate partitioning
> > schemes, for example those used by Chrome OS.
> >
> > Since there might be a bunch of systems out there with static /dev
> > contents that relies on the old numbering scheme, let's make it a
> > build-time option with the default set to the previous 8.
> >
>
> How does the numbering scheme change? What's the user-visible effect
> of setting CONFIG_MMC_BLOCK_MINORS to, say, 16?

mmcblk0 will be 0, mmcblk0p1 1, etc. mmcblk1 (second device) will be
bumped up to start at minor 16 instead of 8 before, which is why I didn't
just bump up the static default and went with a config option instead.

FWIW, udev will happily keep creating device nodes for higher partitions,
so without this patch you end up with overlapping device entries where
mmcblk1p1 and mmcblk0p9 will be the same major/minor.

> > ---
> > drivers/mmc/card/Kconfig | 10 ++++++++++
> > drivers/mmc/card/block.c | 20 ++++++++------------
> > 2 files changed, 18 insertions(+), 12 deletions(-)
> >
> > diff --git a/drivers/mmc/card/Kconfig b/drivers/mmc/card/Kconfig
> > index 3f2a912..e939dcf 100644
> > --- a/drivers/mmc/card/Kconfig
> > +++ b/drivers/mmc/card/Kconfig
> > @@ -14,6 +14,16 @@ config MMC_BLOCK
> > mount the filesystem. Almost everyone wishing MMC support
> > should say Y or M here.
> >
> > +config MMC_BLOCK_MINORS
> > + int "Number of minors per block device"
> > + range 4 32
> > + default 8
> > + help
> > + Number of minors per block device. One is needed for every
> > + partition (plus one for the whole device).
> > + Default is 8 to be backwards compatible with previous
> > + hardcoded device numbering.
>
> If possible it would be better to do this with a kernel boot (or
> modprobe) parameter. That permits vendors to ship packaged kernels
> with full functionality, etc. Possible? The default value of the
> runtime-settable parameter could be Kconfigurable is there's a real
> need for that.

I considered just doing a runtime option, but it would be suboptimal in
our case (Chrome OS) since it would mean that we had yet another kernel
arg we always have to include on all platforms that boot from mmc devices.
Modprobe args won't work there because the driver is statically linked in
(and no ramdisk).

I can definitely change it to take the default from the Kconfig and make
it possible to override with boot/modprobe parameters though. Revised
patch to follow.

> > config MMC_BLOCK_BOUNCE
> > bool "Use bounce buffer for simple hosts"
> > depends on MMC_BLOCK
> > diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
> > index d545f79..524e232 100644
> > --- a/drivers/mmc/card/block.c
> > +++ b/drivers/mmc/card/block.c
> > @@ -45,13 +45,9 @@
> >
> > MODULE_ALIAS("mmc:block");
> >
> > -/*
> > - * max 8 partitions per card
> > - */
> > -#define MMC_SHIFT 3
> > -#define MMC_NUM_MINORS (256 >> MMC_SHIFT)
> > +#define MMC_MAX_DEVICES ((255 + CONFIG_MMC_BLOCK_MINORS) / CONFIG_MMC_BLOCK_MINORS)
>
> So if I increase CONFIG_MMC_BLOCK_MINORS, I can no longer support as
> many devices? That'd be worth mentioning somewhere?

Yep, I'll add a comment and clarify it in the Kconfig help.

> fwiw, the above could use DIV_ROUND_UP().

Good point, will do.


-Olof

2010-08-20 01:02:45

by Olof Johansson

[permalink] [raw]
Subject: [PATCH v2] mmc: add config and runtime option for number of mmcblk minors

The old limit of number of minor numbers per mmcblk device was hardcoded
at 8. This isn't enough for some of the more elaborate partitioning
schemes, for example those used by Chrome OS.

Since there might be a bunch of systems out there with static /dev
contents that relies on the old numbering scheme, let's make it a
build-time option with the default set to the previous 8.

Also provide a boot/modprobe-time parameter to override the config
default: mmcblk.perdev_minors.

Signed-off-by: Olof Johansson <[email protected]>

---

Changes since v1:
* Runtime override of config default
* Better help text
* DIV_ROUND_UP for max_devices calculation
* Clarify mmcblk device count limitations

drivers/mmc/card/Kconfig | 17 +++++++++++++++++
drivers/mmc/card/block.c | 43 +++++++++++++++++++++++++++++++------------
2 files changed, 48 insertions(+), 12 deletions(-)

diff --git a/drivers/mmc/card/Kconfig b/drivers/mmc/card/Kconfig
index 3f2a912..57e4416 100644
--- a/drivers/mmc/card/Kconfig
+++ b/drivers/mmc/card/Kconfig
@@ -14,6 +14,23 @@ config MMC_BLOCK
mount the filesystem. Almost everyone wishing MMC support
should say Y or M here.

+config MMC_BLOCK_MINORS
+ int "Number of minors per block device"
+ range 4 256
+ default 8
+ help
+ Number of minors per block device. One is needed for every
+ partition on the disk (plus one for the whole disk).
+
+ Number of total MMC minors available is 256, so your number
+ of supported block devices will be limited to 256 divided
+ by this number.
+
+ Default is 8 to be backwards compatible with previous
+ hardwired device numbering.
+
+ If unsure, say 8 here.
+
config MMC_BLOCK_BOUNCE
bool "Use bounce buffer for simple hosts"
depends on MMC_BLOCK
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index cb9fbc8..143b23e 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -43,14 +43,26 @@
#include "queue.h"

MODULE_ALIAS("mmc:block");
+#ifdef MODULE_PARAM_PREFIX
+#undef MODULE_PARAM_PREFIX
+#endif
+#define MODULE_PARAM_PREFIX "mmcblk."

-/*
- * max 8 partitions per card
+
+/*
+ * The defaults come from config options but can be overriden by module
+ * or bootarg options.
+ */
+static int perdev_minors = CONFIG_MMC_BLOCK_MINORS;
+
+/*
+ * We've only got one major, so number of mmcblk devices is
+ * limited to 256 / number of minors per device.
*/
-#define MMC_SHIFT 3
-#define MMC_NUM_MINORS (256 >> MMC_SHIFT)
+static int max_devices = DIV_ROUND_UP(256, CONFIG_MMC_BLOCK_MINORS);

-static DECLARE_BITMAP(dev_use, MMC_NUM_MINORS);
+/* 256 minors, so at most 256 separate devices */
+static DECLARE_BITMAP(dev_use, 256);

/*
* There is one mmc_blk_data per slot.
@@ -66,6 +78,9 @@ struct mmc_blk_data {

static DEFINE_MUTEX(open_lock);

+module_param(perdev_minors, int, 0644);
+MODULE_PARM_DESC(perdev_minors, "Minors numbers to allocate per device");
+
static struct mmc_blk_data *mmc_blk_get(struct gendisk *disk)
{
struct mmc_blk_data *md;
@@ -87,10 +102,10 @@ static void mmc_blk_put(struct mmc_blk_data *md)
md->usage--;
if (md->usage == 0) {
int devmaj = MAJOR(disk_devt(md->disk));
- int devidx = MINOR(disk_devt(md->disk)) >> MMC_SHIFT;
+ int devidx = MINOR(disk_devt(md->disk)) / perdev_minors;

if (!devmaj)
- devidx = md->disk->first_minor >> MMC_SHIFT;
+ devidx = md->disk->first_minor / perdev_minors;

blk_cleanup_queue(md->queue.queue);

@@ -482,8 +497,8 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
struct mmc_blk_data *md;
int devidx, ret;

- devidx = find_first_zero_bit(dev_use, MMC_NUM_MINORS);
- if (devidx >= MMC_NUM_MINORS)
+ devidx = find_first_zero_bit(dev_use, max_devices);
+ if (devidx >= max_devices)
return ERR_PTR(-ENOSPC);
__set_bit(devidx, dev_use);

@@ -500,7 +515,7 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
*/
md->read_only = mmc_blk_readonly(card);

- md->disk = alloc_disk(1 << MMC_SHIFT);
+ md->disk = alloc_disk(perdev_minors);
if (md->disk == NULL) {
ret = -ENOMEM;
goto err_kfree;
@@ -517,7 +532,7 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
md->queue.data = md;

md->disk->major = MMC_BLOCK_MAJOR;
- md->disk->first_minor = devidx << MMC_SHIFT;
+ md->disk->first_minor = devidx * perdev_minors;
md->disk->fops = &mmc_bdops;
md->disk->private_data = md;
md->disk->queue = md->queue.queue;
@@ -593,7 +608,6 @@ static int mmc_blk_probe(struct mmc_card *card)
{
struct mmc_blk_data *md;
int err;
-
char cap_str[10];

/*
@@ -683,6 +697,11 @@ static int __init mmc_blk_init(void)
{
int res;

+ if (perdev_minors != CONFIG_MMC_BLOCK_MINORS) {
+ pr_info("mmcblk: using %d minors per device\n", perdev_minors);
+ max_devices = DIV_ROUND_UP(256, perdev_minors);
+ }
+
res = register_blkdev(MMC_BLOCK_MAJOR, "mmc");
if (res)
goto out;
--
1.5.6.5

2010-08-20 22:13:26

by Olof Johansson

[permalink] [raw]
Subject: [PATCH v3] mmc: add config and runtime option for number of mmcblk minors

The old limit of number of minor numbers per mmcblk device was hardcoded
at 8. This isn't enough for some of the more elaborate partitioning
schemes, for example those used by Chrome OS.

Since there might be a bunch of systems out there with static /dev
contents that relies on the old numbering scheme, let's make it a
build-time option with the default set to the previous 8.

Also provide a boot/modprobe-time parameter to override the config
default: mmcblk.perdev_minors.

Signed-off-by: Olof Johansson <[email protected]>
Cc: Mandeep Baines <[email protected]>

---

Andrew, sorry for the churn but Mandeep had a couple of good points that
needed addressing.

Changes since v1:
* Runtime override of config default
* Better help text
* DIV_ROUND_UP for max_devices calculation
* Clarify mmcblk device count limitations

Changes since v2 based on feedback from Mandeep Baines:
* DIV_ROUND_UP is doing the wrong thing, we'll end up using
the last fractional range of minors which we shouldn't.
* Documentation/devices.txt update
* No need to compute max_devices twice, just do it at runtime.
* Permission fix for the module_param -- it's readonly.

Documentation/devices.txt | 6 ++++++
drivers/mmc/card/Kconfig | 17 +++++++++++++++++
drivers/mmc/card/block.c | 41 ++++++++++++++++++++++++++++++-----------
3 files changed, 53 insertions(+), 11 deletions(-)

diff --git a/Documentation/devices.txt b/Documentation/devices.txt
index 1d83d12..fdf3821 100644
--- a/Documentation/devices.txt
+++ b/Documentation/devices.txt
@@ -2518,6 +2518,12 @@ Your cooperation is appreciated.
8 = /dev/mmcblk1 Second SD/MMC card
...

+ The start of next SD/MMC card can be configured with
+ CONFIG_MMC_BLOCK_MINORS, or overridden at boot/modprobe
+ time using the mmcblk.perdev_minors option. That would
+ bump the offset between each card to be the configured
+ value instead of the default 8.
+
179 char CCube DVXChip-based PCI products
0 = /dev/dvxirq0 First DVX device
1 = /dev/dvxirq1 Second DVX device
diff --git a/drivers/mmc/card/Kconfig b/drivers/mmc/card/Kconfig
index 3f2a912..57e4416 100644
--- a/drivers/mmc/card/Kconfig
+++ b/drivers/mmc/card/Kconfig
@@ -14,6 +14,23 @@ config MMC_BLOCK
mount the filesystem. Almost everyone wishing MMC support
should say Y or M here.

+config MMC_BLOCK_MINORS
+ int "Number of minors per block device"
+ range 4 256
+ default 8
+ help
+ Number of minors per block device. One is needed for every
+ partition on the disk (plus one for the whole disk).
+
+ Number of total MMC minors available is 256, so your number
+ of supported block devices will be limited to 256 divided
+ by this number.
+
+ Default is 8 to be backwards compatible with previous
+ hardwired device numbering.
+
+ If unsure, say 8 here.
+
config MMC_BLOCK_BOUNCE
bool "Use bounce buffer for simple hosts"
depends on MMC_BLOCK
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index cb9fbc8..ec94f56 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -43,14 +43,26 @@
#include "queue.h"

MODULE_ALIAS("mmc:block");
+#ifdef MODULE_PARAM_PREFIX
+#undef MODULE_PARAM_PREFIX
+#endif
+#define MODULE_PARAM_PREFIX "mmcblk."
+
+
+/*
+ * The defaults come from config options but can be overriden by module
+ * or bootarg options.
+ */
+static int perdev_minors = CONFIG_MMC_BLOCK_MINORS;

/*
- * max 8 partitions per card
+ * We've only got one major, so number of mmcblk devices is
+ * limited to 256 / number of minors per device.
*/
-#define MMC_SHIFT 3
-#define MMC_NUM_MINORS (256 >> MMC_SHIFT)
+static int max_devices;

-static DECLARE_BITMAP(dev_use, MMC_NUM_MINORS);
+/* 256 minors, so at most 256 separate devices */
+static DECLARE_BITMAP(dev_use, 256);

/*
* There is one mmc_blk_data per slot.
@@ -66,6 +78,9 @@ struct mmc_blk_data {

static DEFINE_MUTEX(open_lock);

+module_param(perdev_minors, int, 0444);
+MODULE_PARM_DESC(perdev_minors, "Minors numbers to allocate per device");
+
static struct mmc_blk_data *mmc_blk_get(struct gendisk *disk)
{
struct mmc_blk_data *md;
@@ -87,10 +102,10 @@ static void mmc_blk_put(struct mmc_blk_data *md)
md->usage--;
if (md->usage == 0) {
int devmaj = MAJOR(disk_devt(md->disk));
- int devidx = MINOR(disk_devt(md->disk)) >> MMC_SHIFT;
+ int devidx = MINOR(disk_devt(md->disk)) / perdev_minors;

if (!devmaj)
- devidx = md->disk->first_minor >> MMC_SHIFT;
+ devidx = md->disk->first_minor / perdev_minors;

blk_cleanup_queue(md->queue.queue);

@@ -482,8 +497,8 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
struct mmc_blk_data *md;
int devidx, ret;

- devidx = find_first_zero_bit(dev_use, MMC_NUM_MINORS);
- if (devidx >= MMC_NUM_MINORS)
+ devidx = find_first_zero_bit(dev_use, max_devices);
+ if (devidx >= max_devices)
return ERR_PTR(-ENOSPC);
__set_bit(devidx, dev_use);

@@ -500,7 +515,7 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
*/
md->read_only = mmc_blk_readonly(card);

- md->disk = alloc_disk(1 << MMC_SHIFT);
+ md->disk = alloc_disk(perdev_minors);
if (md->disk == NULL) {
ret = -ENOMEM;
goto err_kfree;
@@ -517,7 +532,7 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
md->queue.data = md;

md->disk->major = MMC_BLOCK_MAJOR;
- md->disk->first_minor = devidx << MMC_SHIFT;
+ md->disk->first_minor = devidx * perdev_minors;
md->disk->fops = &mmc_bdops;
md->disk->private_data = md;
md->disk->queue = md->queue.queue;
@@ -593,7 +608,6 @@ static int mmc_blk_probe(struct mmc_card *card)
{
struct mmc_blk_data *md;
int err;
-
char cap_str[10];

/*
@@ -683,6 +697,11 @@ static int __init mmc_blk_init(void)
{
int res;

+ if (perdev_minors != CONFIG_MMC_BLOCK_MINORS)
+ pr_info("mmcblk: using %d minors per device\n", perdev_minors);
+
+ max_devices = 256 / perdev_minors;
+
res = register_blkdev(MMC_BLOCK_MAJOR, "mmc");
if (res)
goto out;
--
1.5.6.5

2010-08-20 22:18:11

by runcoderen

[permalink] [raw]
Subject: sys_init_module system call

hi all
I find sys_init_module system call in kernel/module.c file.
but it did not find any.
the source code version is linux-2.6.35

does the kernel have changed?

the book I am reading is LDD 3rd edition

--

/****************************************
http://runcoderen.wordpress.com/
****************************************/

2010-08-20 22:34:32

by Randy Dunlap

[permalink] [raw]
Subject: Re: sys_init_module system call

On Sat, 21 Aug 2010 06:18:04 +0800 runcoderen wrote:

> hi all
> I find sys_init_module system call in kernel/module.c file.
> but it did not find any.
> the source code version is linux-2.6.35
>
> does the kernel have changed?
>
> the book I am reading is LDD 3rd edition

You won't find a function in kernel/module.c that looks like it has
the name "sys_init_module". Instead, the function is defined by using
a macro, and it looks like this:

/* This is where the real work happens */
SYSCALL_DEFINE3(init_module, void __user *, umod,
unsigned long, len, const char __user *, uargs)
{



The use of SYSCALL_DEFINEx(func_name, args) is a fairly recent change
(well, January, 2009) that may be the reason why you think that there
has been a change. See
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1a94bc34768e463a93cb3751819709ab0ea80a01


---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

2010-08-20 22:50:45

by runcoderen

[permalink] [raw]
Subject: Re: sys_init_module system call

hi Randy:
yes, it does!
Thanks a lot!
runcoderen

在 2010-08-20五的 15:32 -0700,Randy Dunlap写道:
> On Sat, 21 Aug 2010 06:18:04 +0800 runcoderen wrote:
>
> > hi all
> > I find sys_init_module system call in kernel/module.c file.
> > but it did not find any.
> > the source code version is linux-2.6.35
> >
> > does the kernel have changed?
> >
> > the book I am reading is LDD 3rd edition
>
> You won't find a function in kernel/module.c that looks like it has
> the name "sys_init_module". Instead, the function is defined by using
> a macro, and it looks like this:
>
> /* This is where the real work happens */
> SYSCALL_DEFINE3(init_module, void __user *, umod,
> unsigned long, len, const char __user *, uargs)
> {
>
>
>
> The use of SYSCALL_DEFINEx(func_name, args) is a fairly recent change
> (well, January, 2009) that may be the reason why you think that there
> has been a change. See
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1a94bc34768e463a93cb3751819709ab0ea80a01
>
>
> ---
> ~Randy
> *** Remember to use Documentation/SubmitChecklist when testing your code ***

--

/****************************************
http://runcoderen.wordpress.com/
****************************************/