From: "Jörn Engel" <joern@logfs.org>
To: Adrian McMenamin <adrian@newgolddream.dyndns.info>
Cc: Paul Mundt <lethal@linux-sh.org>,
MTD <linux-mtd@lists.infradead.org>,
LKML <linux-kernel@vger.kernel.org>,
linux-sh <linux-sh@vger.kernel.org>
Subject: Re: [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Visual Memory Unit
Date: Mon, 24 Mar 2008 15:10:44 +0100 [thread overview]
Message-ID: <20080324141043.GB2899@logfs.org> (raw)
In-Reply-To: <1206367120.6283.15.camel@localhost.localdomain>
[-- Attachment #1: Type: text/plain, Size: 809 bytes --]
On Mon, 24 March 2008 13:58:40 +0000, Adrian McMenamin wrote:
>
> Tempting as it is to continue the war, discretion will be the better
> part of valour here and I will give you the last word.
>
> Of course I don't mind you sending patches. Indeed it would be very
> helpful and generous of you to do so.
Good. The first four shouldn't change any behaviour. Number five flips
positive error returns into negative ones. I believe the old behaviour
is a bug. Worth a second look to make sure.
All five patches are attached. Hope that doesn't cause any problems.
Jörn
--
There are two ways of constructing a software design: one way is to make
it so simple that there are obviously no deficiencies, and the other is
to make it so complicated that there are no obvious deficiencies.
-- C. A. R. Hoare
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: cu1.patch --]
[-- Type: text/x-diff; charset=utf-8, Size: 638 bytes --]
Directly include two headers. While unnecessary on sh, this allows the driver
to be compiled on i386 for those lacking a cross-compiler setup.
Signed-off-by: Jörn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 2 ++
1 file changed, 2 insertions(+)
--- maple/drivers/mtd/maps/vmu_flash.c~cu1 2008-03-24 14:36:51.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:39:05.000000000 +0100
@@ -12,6 +12,8 @@
* GNU General Public Licence
*/
#include <linux/init.h>
+#include <linux/sched.h>
+#include <linux/jiffies.h>
#include <linux/maple.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/map.h>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: cu2.patch --]
[-- Type: text/x-diff; charset=utf-8, Size: 2136 bytes --]
Minimal changes to make sparse happier.
Signed-off-by: Jörn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu2 2008-03-24 14:39:05.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:44:24.000000000 +0100
@@ -136,7 +136,7 @@ static int maple_vmu_read_block(unsigned
struct mdev_part *mpart;
struct maple_device *mdev;
int partition, error = 0, locking;
- void *sendbuf;
+ __be32 *sendbuf;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -162,8 +162,8 @@ static int maple_vmu_read_block(unsigned
goto fail_nosendbuf;
}
- ((unsigned long *)sendbuf)[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
- ((unsigned long *)sendbuf)[1] = cpu_to_be32(partition << 24 | num);
+ sendbuf[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
+ sendbuf[1] = cpu_to_be32(partition << 24 | num);
mdev->mq->sendbuf = sendbuf;
block_read = 0;
@@ -207,7 +207,7 @@ static int maple_vmu_write_block(unsigne
struct mdev_part *mpart;
struct maple_device *mdev;
int partition, error, locking, x, phaselen;
- void *sendbuf;
+ __be32 *sendbuf;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -224,7 +224,7 @@ static int maple_vmu_write_block(unsigne
goto fail_nosendbuf;
}
- ((unsigned long *)sendbuf)[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
+ sendbuf[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
for (x = 0; x < card->writecnt; x++) {
/* take the lock to protect the contents of sendbuf */
@@ -233,8 +233,7 @@ static int maple_vmu_write_block(unsigne
error = -EBUSY;
goto fail_nolock;
}
- ((unsigned long *)sendbuf)[1] =
- cpu_to_be32(partition << 24 | x << 16 | num);
+ sendbuf[1] = cpu_to_be32(partition << 24 | x << 16 | num);
memcpy(sendbuf + 8, buf + phaselen * x, phaselen);
mdev->mq->sendbuf = sendbuf;
maple_add_packet(mdev->mq);
@@ -467,7 +466,7 @@ failed:
static int vmu_flash_erase(struct mtd_info *mtd, struct erase_info *erase)
{
- int z;
+ size_t z;
erase->state = MTD_ERASING;
vmu_flash_write(mtd, erase->addr, erase->len, &z, "\0");
erase->state = MTD_ERASE_DONE;
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: cu3.patch --]
[-- Type: text/x-diff; charset=utf-8, Size: 2848 bytes --]
Shrink the goto logic where easily possible. Changing the return type to int
allows vmu_flash_read_char() to follow normal Linux style.
Signed-off-by: Jörn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 37 ++++++++++++++-----------------------
1 file changed, 14 insertions(+), 23 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu3 2008-03-24 14:44:50.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:55:22.000000000 +0100
@@ -76,22 +76,19 @@ static struct vmu_block *ofs_to_block(un
card = mdev->private_data;
if (src_ofs >= ((card->parts)[partition]).numblocks * card->blocklen)
- goto failed;
+ return NULL;
num = src_ofs / card->blocklen;
if (num > ((card->parts)[partition]).numblocks)
- goto failed;
+ return NULL;
vblock = kmalloc(sizeof(struct vmu_block), GFP_KERNEL);
if (!vblock)
- goto failed;
+ return NULL;
vblock->num = num;
vblock->ofs = src_ofs % card->blocklen;
return vblock;
-
-failed:
- return NULL;
}
@@ -264,15 +261,15 @@ fail_nosendbuf:
}
/* mtd function to simulate reading byte by byte */
-static unsigned char vmu_flash_read_char(unsigned long ofs, int *retval,
+static int vmu_flash_read_char(unsigned long ofs, int *retval,
struct mtd_info *mtd)
{
struct vmu_block *vblock;
struct memcard *card;
struct mdev_part *mpart;
struct maple_device *mdev;
- unsigned char *buf, ret;
- int partition, error;
+ unsigned char *buf;
+ int partition, ret;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -282,33 +279,27 @@ static unsigned char vmu_flash_read_char
buf = kmalloc(card->blocklen, GFP_KERNEL);
if (!buf) {
*retval = 1;
- error = -ENOMEM;
- goto fail_buffer;
+ return -ENOMEM;
}
vblock = ofs_to_block(ofs, mtd, partition);
if (!vblock) {
*retval = 3;
- error = -ENOMEM;
+ ret = -ENOMEM;
goto invalid_block;
}
- error = maple_vmu_read_block(vblock->num, buf, mtd);
- if (error) {
+ ret = maple_vmu_read_block(vblock->num, buf, mtd);
+ if (ret) {
*retval = 2;
goto failed_block;
}
ret = buf[vblock->ofs];
- kfree(buf);
- kfree(vblock);
- return ret;
-
failed_block:
kfree(vblock);
invalid_block:
kfree(buf);
-fail_buffer:
- return error;
+ return ret;
}
/* mtd higher order function to read flash */
@@ -321,7 +312,7 @@ static int vmu_flash_read(struct mtd_inf
struct vmu_cache *pcache;
struct vmu_block *vblock = NULL;
int index = 0, retval, partition, leftover, numblocks;
- unsigned char cx;
+ int cx;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -364,9 +355,9 @@ static int vmu_flash_read(struct mtd_inf
} else {
/* Not cached so read from the device */
cx = vmu_flash_read_char(from + index, &retval, mtd);
- if (retval) {
+ if (cx < 0) {
*retlen = index;
- return -EIO;
+ return cx;
}
memset(buf + index, cx, 1);
index++;
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: cu4.patch --]
[-- Type: text/x-diff; charset=utf-8, Size: 2606 bytes --]
Trivial comment reformatting. Old style was uncommon for Linux.
Signed-off-by: Jörn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu4 2008-03-24 14:55:22.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:57:38.000000000 +0100
@@ -140,10 +140,10 @@ static int maple_vmu_read_block(unsigned
partition = mpart->partition;
card = mdev->private_data;
- /***
- * Maple devices include a mutex to ensure packets injected into
- * the wait queue are not corrupted via scans for hotplug events etc
- */
+ /*
+ * Maple devices include a mutex to ensure packets injected into
+ * the wait queue are not corrupted via scans for hotplug events etc
+ */
locking = mutex_lock_interruptible(&mdev->mq->mutex);
if (locking) {
printk(KERN_INFO "Maple: VMU at (%d, %d) is locked -"
@@ -235,9 +235,9 @@ static int maple_vmu_write_block(unsigne
mdev->mq->sendbuf = sendbuf;
maple_add_packet(mdev->mq);
}
- /***
- * The Maple bus driver will unlock the mutex once the command
- * has been processed, so we'll just sleep waiting for the unlock */
+ /*
+ * The Maple bus driver will unlock the mutex once the command
+ * has been processed, so we'll just sleep waiting for the unlock */
locking = mutex_lock_interruptible(&mdev->mq->mutex);
if (locking) {
error = -EBUSY;
@@ -592,8 +592,8 @@ static int vmu_connect(struct maple_devi
test_flash_data = be32_to_cpu(mdev->devinfo.function);
/* Need to count how many bits are set - to find out which
- * function_data element has details of the memory card:
- * using Brian Kernighan's/Peter Wegner's method */
+ * function_data element has details of the memory card:
+ * using Brian Kernighan's/Peter Wegner's method */
for (c = 0; test_flash_data; c++)
test_flash_data &= test_flash_data - 1;
@@ -613,14 +613,14 @@ static int vmu_connect(struct maple_devi
card->partition = 0;
/* Not sure there are actually any multi-partition devices in the
- * real world, but the hardware supports them, so, so will we */
+ * real world, but the hardware supports them, so, so will we */
card->parts = kmalloc(sizeof(struct vmupart) * card->partitions,
GFP_KERNEL);
if (!card->parts) {
error = -ENOMEM;
goto fail_partitions;
}
- /*kzalloc this to ensure safe kfree-ing of NULL mparts on error*/
+ /* kzalloc this to ensure safe kfree-ing of NULL mparts on error */
card->mtd = kzalloc(sizeof(struct mtd_info) * card->partitions,
GFP_KERNEL);
if (!card->mtd) {
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #6: cu5.patch --]
[-- Type: text/x-diff; charset=utf-8, Size: 1435 bytes --]
Change return values.
- Turn -1 into -EIO. Possibly not the best value, but better than -EPERM.
- Change -error to error to return negative error values, as is standard.
Signed-off-by: Jörn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu5 2008-03-24 14:57:38.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 15:02:36.000000000 +0100
@@ -320,12 +320,12 @@ static int vmu_flash_read(struct mtd_inf
card = mdev->private_data;
if (len < 1)
- return -1;
+ return -EIO;
numblocks = card->parts[partition].numblocks;
if (from + len > numblocks * card->blocklen)
len = numblocks * card->blocklen - from;
if (len == 0)
- return -1;
+ return -EIO;
/* Have we cached this bit already? */
pcache = (card->parts[partition]).pcache;
do {
@@ -388,14 +388,14 @@ static int vmu_flash_write(struct mtd_in
/* simple sanity checks */
if (len < 1) {
- error = -1;
+ error = -EIO;
goto failed;
}
numblocks = card->parts[partition].numblocks;
if (to + len > numblocks * card->blocklen)
len = numblocks * card->blocklen - to;
if (len == 0) {
- error = -1;
+ error = -EIO;
goto failed;
}
@@ -661,7 +661,7 @@ fail_mtd_info:
fail_partitions:
kfree(card);
fail_nomem:
- return -error;
+ return error;
}
static void vmu_disconnect(struct maple_device *mdev)
WARNING: multiple messages have this Message-ID (diff)
From: "Jörn Engel" <joern@logfs.org>
To: Adrian McMenamin <adrian@newgolddream.dyndns.info>
Cc: Paul Mundt <lethal@linux-sh.org>,
MTD <linux-mtd@lists.infradead.org>,
LKML <linux-kernel@vger.kernel.org>,
linux-sh <linux-sh@vger.kernel.org>
Subject: Re: [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Visual Memory Unit
Date: Mon, 24 Mar 2008 14:10:44 +0000 [thread overview]
Message-ID: <20080324141043.GB2899@logfs.org> (raw)
In-Reply-To: <1206367120.6283.15.camel@localhost.localdomain>
[-- Attachment #1: Type: text/plain, Size: 809 bytes --]
On Mon, 24 March 2008 13:58:40 +0000, Adrian McMenamin wrote:
>
> Tempting as it is to continue the war, discretion will be the better
> part of valour here and I will give you the last word.
>
> Of course I don't mind you sending patches. Indeed it would be very
> helpful and generous of you to do so.
Good. The first four shouldn't change any behaviour. Number five flips
positive error returns into negative ones. I believe the old behaviour
is a bug. Worth a second look to make sure.
All five patches are attached. Hope that doesn't cause any problems.
Jörn
--
There are two ways of constructing a software design: one way is to make
it so simple that there are obviously no deficiencies, and the other is
to make it so complicated that there are no obvious deficiencies.
-- C. A. R. Hoare
[-- Attachment #2: cu1.patch --]
[-- Type: text/x-diff, Size: 640 bytes --]
Directly include two headers. While unnecessary on sh, this allows the driver
to be compiled on i386 for those lacking a cross-compiler setup.
Signed-off-by: J�rn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 2 ++
1 file changed, 2 insertions(+)
--- maple/drivers/mtd/maps/vmu_flash.c~cu1 2008-03-24 14:36:51.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:39:05.000000000 +0100
@@ -12,6 +12,8 @@
* GNU General Public Licence
*/
#include <linux/init.h>
+#include <linux/sched.h>
+#include <linux/jiffies.h>
#include <linux/maple.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/map.h>
[-- Attachment #3: cu2.patch --]
[-- Type: text/x-diff, Size: 2138 bytes --]
Minimal changes to make sparse happier.
Signed-off-by: J�rn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu2 2008-03-24 14:39:05.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:44:24.000000000 +0100
@@ -136,7 +136,7 @@ static int maple_vmu_read_block(unsigned
struct mdev_part *mpart;
struct maple_device *mdev;
int partition, error = 0, locking;
- void *sendbuf;
+ __be32 *sendbuf;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -162,8 +162,8 @@ static int maple_vmu_read_block(unsigned
goto fail_nosendbuf;
}
- ((unsigned long *)sendbuf)[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
- ((unsigned long *)sendbuf)[1] = cpu_to_be32(partition << 24 | num);
+ sendbuf[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
+ sendbuf[1] = cpu_to_be32(partition << 24 | num);
mdev->mq->sendbuf = sendbuf;
block_read = 0;
@@ -207,7 +207,7 @@ static int maple_vmu_write_block(unsigne
struct mdev_part *mpart;
struct maple_device *mdev;
int partition, error, locking, x, phaselen;
- void *sendbuf;
+ __be32 *sendbuf;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -224,7 +224,7 @@ static int maple_vmu_write_block(unsigne
goto fail_nosendbuf;
}
- ((unsigned long *)sendbuf)[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
+ sendbuf[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
for (x = 0; x < card->writecnt; x++) {
/* take the lock to protect the contents of sendbuf */
@@ -233,8 +233,7 @@ static int maple_vmu_write_block(unsigne
error = -EBUSY;
goto fail_nolock;
}
- ((unsigned long *)sendbuf)[1] =
- cpu_to_be32(partition << 24 | x << 16 | num);
+ sendbuf[1] = cpu_to_be32(partition << 24 | x << 16 | num);
memcpy(sendbuf + 8, buf + phaselen * x, phaselen);
mdev->mq->sendbuf = sendbuf;
maple_add_packet(mdev->mq);
@@ -467,7 +466,7 @@ failed:
static int vmu_flash_erase(struct mtd_info *mtd, struct erase_info *erase)
{
- int z;
+ size_t z;
erase->state = MTD_ERASING;
vmu_flash_write(mtd, erase->addr, erase->len, &z, "\0");
erase->state = MTD_ERASE_DONE;
[-- Attachment #4: cu3.patch --]
[-- Type: text/x-diff, Size: 2850 bytes --]
Shrink the goto logic where easily possible. Changing the return type to int
allows vmu_flash_read_char() to follow normal Linux style.
Signed-off-by: J�rn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 37 ++++++++++++++-----------------------
1 file changed, 14 insertions(+), 23 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu3 2008-03-24 14:44:50.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:55:22.000000000 +0100
@@ -76,22 +76,19 @@ static struct vmu_block *ofs_to_block(un
card = mdev->private_data;
if (src_ofs >= ((card->parts)[partition]).numblocks * card->blocklen)
- goto failed;
+ return NULL;
num = src_ofs / card->blocklen;
if (num > ((card->parts)[partition]).numblocks)
- goto failed;
+ return NULL;
vblock = kmalloc(sizeof(struct vmu_block), GFP_KERNEL);
if (!vblock)
- goto failed;
+ return NULL;
vblock->num = num;
vblock->ofs = src_ofs % card->blocklen;
return vblock;
-
-failed:
- return NULL;
}
@@ -264,15 +261,15 @@ fail_nosendbuf:
}
/* mtd function to simulate reading byte by byte */
-static unsigned char vmu_flash_read_char(unsigned long ofs, int *retval,
+static int vmu_flash_read_char(unsigned long ofs, int *retval,
struct mtd_info *mtd)
{
struct vmu_block *vblock;
struct memcard *card;
struct mdev_part *mpart;
struct maple_device *mdev;
- unsigned char *buf, ret;
- int partition, error;
+ unsigned char *buf;
+ int partition, ret;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -282,33 +279,27 @@ static unsigned char vmu_flash_read_char
buf = kmalloc(card->blocklen, GFP_KERNEL);
if (!buf) {
*retval = 1;
- error = -ENOMEM;
- goto fail_buffer;
+ return -ENOMEM;
}
vblock = ofs_to_block(ofs, mtd, partition);
if (!vblock) {
*retval = 3;
- error = -ENOMEM;
+ ret = -ENOMEM;
goto invalid_block;
}
- error = maple_vmu_read_block(vblock->num, buf, mtd);
- if (error) {
+ ret = maple_vmu_read_block(vblock->num, buf, mtd);
+ if (ret) {
*retval = 2;
goto failed_block;
}
ret = buf[vblock->ofs];
- kfree(buf);
- kfree(vblock);
- return ret;
-
failed_block:
kfree(vblock);
invalid_block:
kfree(buf);
-fail_buffer:
- return error;
+ return ret;
}
/* mtd higher order function to read flash */
@@ -321,7 +312,7 @@ static int vmu_flash_read(struct mtd_inf
struct vmu_cache *pcache;
struct vmu_block *vblock = NULL;
int index = 0, retval, partition, leftover, numblocks;
- unsigned char cx;
+ int cx;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -364,9 +355,9 @@ static int vmu_flash_read(struct mtd_inf
} else {
/* Not cached so read from the device */
cx = vmu_flash_read_char(from + index, &retval, mtd);
- if (retval) {
+ if (cx < 0) {
*retlen = index;
- return -EIO;
+ return cx;
}
memset(buf + index, cx, 1);
index++;
[-- Attachment #5: cu4.patch --]
[-- Type: text/x-diff, Size: 2608 bytes --]
Trivial comment reformatting. Old style was uncommon for Linux.
Signed-off-by: J�rn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu4 2008-03-24 14:55:22.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:57:38.000000000 +0100
@@ -140,10 +140,10 @@ static int maple_vmu_read_block(unsigned
partition = mpart->partition;
card = mdev->private_data;
- /***
- * Maple devices include a mutex to ensure packets injected into
- * the wait queue are not corrupted via scans for hotplug events etc
- */
+ /*
+ * Maple devices include a mutex to ensure packets injected into
+ * the wait queue are not corrupted via scans for hotplug events etc
+ */
locking = mutex_lock_interruptible(&mdev->mq->mutex);
if (locking) {
printk(KERN_INFO "Maple: VMU at (%d, %d) is locked -"
@@ -235,9 +235,9 @@ static int maple_vmu_write_block(unsigne
mdev->mq->sendbuf = sendbuf;
maple_add_packet(mdev->mq);
}
- /***
- * The Maple bus driver will unlock the mutex once the command
- * has been processed, so we'll just sleep waiting for the unlock */
+ /*
+ * The Maple bus driver will unlock the mutex once the command
+ * has been processed, so we'll just sleep waiting for the unlock */
locking = mutex_lock_interruptible(&mdev->mq->mutex);
if (locking) {
error = -EBUSY;
@@ -592,8 +592,8 @@ static int vmu_connect(struct maple_devi
test_flash_data = be32_to_cpu(mdev->devinfo.function);
/* Need to count how many bits are set - to find out which
- * function_data element has details of the memory card:
- * using Brian Kernighan's/Peter Wegner's method */
+ * function_data element has details of the memory card:
+ * using Brian Kernighan's/Peter Wegner's method */
for (c = 0; test_flash_data; c++)
test_flash_data &= test_flash_data - 1;
@@ -613,14 +613,14 @@ static int vmu_connect(struct maple_devi
card->partition = 0;
/* Not sure there are actually any multi-partition devices in the
- * real world, but the hardware supports them, so, so will we */
+ * real world, but the hardware supports them, so, so will we */
card->parts = kmalloc(sizeof(struct vmupart) * card->partitions,
GFP_KERNEL);
if (!card->parts) {
error = -ENOMEM;
goto fail_partitions;
}
- /*kzalloc this to ensure safe kfree-ing of NULL mparts on error*/
+ /* kzalloc this to ensure safe kfree-ing of NULL mparts on error */
card->mtd = kzalloc(sizeof(struct mtd_info) * card->partitions,
GFP_KERNEL);
if (!card->mtd) {
[-- Attachment #6: cu5.patch --]
[-- Type: text/x-diff, Size: 1437 bytes --]
Change return values.
- Turn -1 into -EIO. Possibly not the best value, but better than -EPERM.
- Change -error to error to return negative error values, as is standard.
Signed-off-by: J�rn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu5 2008-03-24 14:57:38.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 15:02:36.000000000 +0100
@@ -320,12 +320,12 @@ static int vmu_flash_read(struct mtd_inf
card = mdev->private_data;
if (len < 1)
- return -1;
+ return -EIO;
numblocks = card->parts[partition].numblocks;
if (from + len > numblocks * card->blocklen)
len = numblocks * card->blocklen - from;
if (len == 0)
- return -1;
+ return -EIO;
/* Have we cached this bit already? */
pcache = (card->parts[partition]).pcache;
do {
@@ -388,14 +388,14 @@ static int vmu_flash_write(struct mtd_in
/* simple sanity checks */
if (len < 1) {
- error = -1;
+ error = -EIO;
goto failed;
}
numblocks = card->parts[partition].numblocks;
if (to + len > numblocks * card->blocklen)
len = numblocks * card->blocklen - to;
if (len == 0) {
- error = -1;
+ error = -EIO;
goto failed;
}
@@ -661,7 +661,7 @@ fail_mtd_info:
fail_partitions:
kfree(card);
fail_nomem:
- return -error;
+ return error;
}
static void vmu_disconnect(struct maple_device *mdev)
WARNING: multiple messages have this Message-ID (diff)
From: "Jörn Engel" <joern@logfs.org>
To: Adrian McMenamin <adrian@newgolddream.dyndns.info>
Cc: Paul Mundt <lethal@linux-sh.org>,
linux-sh <linux-sh@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
MTD <linux-mtd@lists.infradead.org>
Subject: Re: [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Visual Memory Unit
Date: Mon, 24 Mar 2008 15:10:44 +0100 [thread overview]
Message-ID: <20080324141043.GB2899@logfs.org> (raw)
In-Reply-To: <1206367120.6283.15.camel@localhost.localdomain>
[-- Attachment #1: Type: text/plain, Size: 809 bytes --]
On Mon, 24 March 2008 13:58:40 +0000, Adrian McMenamin wrote:
>
> Tempting as it is to continue the war, discretion will be the better
> part of valour here and I will give you the last word.
>
> Of course I don't mind you sending patches. Indeed it would be very
> helpful and generous of you to do so.
Good. The first four shouldn't change any behaviour. Number five flips
positive error returns into negative ones. I believe the old behaviour
is a bug. Worth a second look to make sure.
All five patches are attached. Hope that doesn't cause any problems.
Jörn
--
There are two ways of constructing a software design: one way is to make
it so simple that there are obviously no deficiencies, and the other is
to make it so complicated that there are no obvious deficiencies.
-- C. A. R. Hoare
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: cu1.patch --]
[-- Type: text/x-diff; charset=utf-8, Size: 638 bytes --]
Directly include two headers. While unnecessary on sh, this allows the driver
to be compiled on i386 for those lacking a cross-compiler setup.
Signed-off-by: Jörn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 2 ++
1 file changed, 2 insertions(+)
--- maple/drivers/mtd/maps/vmu_flash.c~cu1 2008-03-24 14:36:51.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:39:05.000000000 +0100
@@ -12,6 +12,8 @@
* GNU General Public Licence
*/
#include <linux/init.h>
+#include <linux/sched.h>
+#include <linux/jiffies.h>
#include <linux/maple.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/map.h>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: cu2.patch --]
[-- Type: text/x-diff; charset=utf-8, Size: 2136 bytes --]
Minimal changes to make sparse happier.
Signed-off-by: Jörn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu2 2008-03-24 14:39:05.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:44:24.000000000 +0100
@@ -136,7 +136,7 @@ static int maple_vmu_read_block(unsigned
struct mdev_part *mpart;
struct maple_device *mdev;
int partition, error = 0, locking;
- void *sendbuf;
+ __be32 *sendbuf;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -162,8 +162,8 @@ static int maple_vmu_read_block(unsigned
goto fail_nosendbuf;
}
- ((unsigned long *)sendbuf)[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
- ((unsigned long *)sendbuf)[1] = cpu_to_be32(partition << 24 | num);
+ sendbuf[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
+ sendbuf[1] = cpu_to_be32(partition << 24 | num);
mdev->mq->sendbuf = sendbuf;
block_read = 0;
@@ -207,7 +207,7 @@ static int maple_vmu_write_block(unsigne
struct mdev_part *mpart;
struct maple_device *mdev;
int partition, error, locking, x, phaselen;
- void *sendbuf;
+ __be32 *sendbuf;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -224,7 +224,7 @@ static int maple_vmu_write_block(unsigne
goto fail_nosendbuf;
}
- ((unsigned long *)sendbuf)[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
+ sendbuf[0] = cpu_to_be32(MAPLE_FUNC_MEMCARD);
for (x = 0; x < card->writecnt; x++) {
/* take the lock to protect the contents of sendbuf */
@@ -233,8 +233,7 @@ static int maple_vmu_write_block(unsigne
error = -EBUSY;
goto fail_nolock;
}
- ((unsigned long *)sendbuf)[1] =
- cpu_to_be32(partition << 24 | x << 16 | num);
+ sendbuf[1] = cpu_to_be32(partition << 24 | x << 16 | num);
memcpy(sendbuf + 8, buf + phaselen * x, phaselen);
mdev->mq->sendbuf = sendbuf;
maple_add_packet(mdev->mq);
@@ -467,7 +466,7 @@ failed:
static int vmu_flash_erase(struct mtd_info *mtd, struct erase_info *erase)
{
- int z;
+ size_t z;
erase->state = MTD_ERASING;
vmu_flash_write(mtd, erase->addr, erase->len, &z, "\0");
erase->state = MTD_ERASE_DONE;
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: cu3.patch --]
[-- Type: text/x-diff; charset=utf-8, Size: 2848 bytes --]
Shrink the goto logic where easily possible. Changing the return type to int
allows vmu_flash_read_char() to follow normal Linux style.
Signed-off-by: Jörn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 37 ++++++++++++++-----------------------
1 file changed, 14 insertions(+), 23 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu3 2008-03-24 14:44:50.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:55:22.000000000 +0100
@@ -76,22 +76,19 @@ static struct vmu_block *ofs_to_block(un
card = mdev->private_data;
if (src_ofs >= ((card->parts)[partition]).numblocks * card->blocklen)
- goto failed;
+ return NULL;
num = src_ofs / card->blocklen;
if (num > ((card->parts)[partition]).numblocks)
- goto failed;
+ return NULL;
vblock = kmalloc(sizeof(struct vmu_block), GFP_KERNEL);
if (!vblock)
- goto failed;
+ return NULL;
vblock->num = num;
vblock->ofs = src_ofs % card->blocklen;
return vblock;
-
-failed:
- return NULL;
}
@@ -264,15 +261,15 @@ fail_nosendbuf:
}
/* mtd function to simulate reading byte by byte */
-static unsigned char vmu_flash_read_char(unsigned long ofs, int *retval,
+static int vmu_flash_read_char(unsigned long ofs, int *retval,
struct mtd_info *mtd)
{
struct vmu_block *vblock;
struct memcard *card;
struct mdev_part *mpart;
struct maple_device *mdev;
- unsigned char *buf, ret;
- int partition, error;
+ unsigned char *buf;
+ int partition, ret;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -282,33 +279,27 @@ static unsigned char vmu_flash_read_char
buf = kmalloc(card->blocklen, GFP_KERNEL);
if (!buf) {
*retval = 1;
- error = -ENOMEM;
- goto fail_buffer;
+ return -ENOMEM;
}
vblock = ofs_to_block(ofs, mtd, partition);
if (!vblock) {
*retval = 3;
- error = -ENOMEM;
+ ret = -ENOMEM;
goto invalid_block;
}
- error = maple_vmu_read_block(vblock->num, buf, mtd);
- if (error) {
+ ret = maple_vmu_read_block(vblock->num, buf, mtd);
+ if (ret) {
*retval = 2;
goto failed_block;
}
ret = buf[vblock->ofs];
- kfree(buf);
- kfree(vblock);
- return ret;
-
failed_block:
kfree(vblock);
invalid_block:
kfree(buf);
-fail_buffer:
- return error;
+ return ret;
}
/* mtd higher order function to read flash */
@@ -321,7 +312,7 @@ static int vmu_flash_read(struct mtd_inf
struct vmu_cache *pcache;
struct vmu_block *vblock = NULL;
int index = 0, retval, partition, leftover, numblocks;
- unsigned char cx;
+ int cx;
mpart = mtd->priv;
mdev = mpart->mdev;
@@ -364,9 +355,9 @@ static int vmu_flash_read(struct mtd_inf
} else {
/* Not cached so read from the device */
cx = vmu_flash_read_char(from + index, &retval, mtd);
- if (retval) {
+ if (cx < 0) {
*retlen = index;
- return -EIO;
+ return cx;
}
memset(buf + index, cx, 1);
index++;
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: cu4.patch --]
[-- Type: text/x-diff; charset=utf-8, Size: 2606 bytes --]
Trivial comment reformatting. Old style was uncommon for Linux.
Signed-off-by: Jörn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu4 2008-03-24 14:55:22.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 14:57:38.000000000 +0100
@@ -140,10 +140,10 @@ static int maple_vmu_read_block(unsigned
partition = mpart->partition;
card = mdev->private_data;
- /***
- * Maple devices include a mutex to ensure packets injected into
- * the wait queue are not corrupted via scans for hotplug events etc
- */
+ /*
+ * Maple devices include a mutex to ensure packets injected into
+ * the wait queue are not corrupted via scans for hotplug events etc
+ */
locking = mutex_lock_interruptible(&mdev->mq->mutex);
if (locking) {
printk(KERN_INFO "Maple: VMU at (%d, %d) is locked -"
@@ -235,9 +235,9 @@ static int maple_vmu_write_block(unsigne
mdev->mq->sendbuf = sendbuf;
maple_add_packet(mdev->mq);
}
- /***
- * The Maple bus driver will unlock the mutex once the command
- * has been processed, so we'll just sleep waiting for the unlock */
+ /*
+ * The Maple bus driver will unlock the mutex once the command
+ * has been processed, so we'll just sleep waiting for the unlock */
locking = mutex_lock_interruptible(&mdev->mq->mutex);
if (locking) {
error = -EBUSY;
@@ -592,8 +592,8 @@ static int vmu_connect(struct maple_devi
test_flash_data = be32_to_cpu(mdev->devinfo.function);
/* Need to count how many bits are set - to find out which
- * function_data element has details of the memory card:
- * using Brian Kernighan's/Peter Wegner's method */
+ * function_data element has details of the memory card:
+ * using Brian Kernighan's/Peter Wegner's method */
for (c = 0; test_flash_data; c++)
test_flash_data &= test_flash_data - 1;
@@ -613,14 +613,14 @@ static int vmu_connect(struct maple_devi
card->partition = 0;
/* Not sure there are actually any multi-partition devices in the
- * real world, but the hardware supports them, so, so will we */
+ * real world, but the hardware supports them, so, so will we */
card->parts = kmalloc(sizeof(struct vmupart) * card->partitions,
GFP_KERNEL);
if (!card->parts) {
error = -ENOMEM;
goto fail_partitions;
}
- /*kzalloc this to ensure safe kfree-ing of NULL mparts on error*/
+ /* kzalloc this to ensure safe kfree-ing of NULL mparts on error */
card->mtd = kzalloc(sizeof(struct mtd_info) * card->partitions,
GFP_KERNEL);
if (!card->mtd) {
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #6: cu5.patch --]
[-- Type: text/x-diff; charset=utf-8, Size: 1435 bytes --]
Change return values.
- Turn -1 into -EIO. Possibly not the best value, but better than -EPERM.
- Change -error to error to return negative error values, as is standard.
Signed-off-by: Jörn Engel <joern@logfs.org>
---
drivers/mtd/maps/vmu_flash.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
--- maple/drivers/mtd/maps/vmu_flash.c~cu5 2008-03-24 14:57:38.000000000 +0100
+++ maple/drivers/mtd/maps/vmu_flash.c 2008-03-24 15:02:36.000000000 +0100
@@ -320,12 +320,12 @@ static int vmu_flash_read(struct mtd_inf
card = mdev->private_data;
if (len < 1)
- return -1;
+ return -EIO;
numblocks = card->parts[partition].numblocks;
if (from + len > numblocks * card->blocklen)
len = numblocks * card->blocklen - from;
if (len == 0)
- return -1;
+ return -EIO;
/* Have we cached this bit already? */
pcache = (card->parts[partition]).pcache;
do {
@@ -388,14 +388,14 @@ static int vmu_flash_write(struct mtd_in
/* simple sanity checks */
if (len < 1) {
- error = -1;
+ error = -EIO;
goto failed;
}
numblocks = card->parts[partition].numblocks;
if (to + len > numblocks * card->blocklen)
len = numblocks * card->blocklen - to;
if (len == 0) {
- error = -1;
+ error = -EIO;
goto failed;
}
@@ -661,7 +661,7 @@ fail_mtd_info:
fail_partitions:
kfree(card);
fail_nomem:
- return -error;
+ return error;
}
static void vmu_disconnect(struct maple_device *mdev)
next prev parent reply other threads:[~2008-03-24 14:10 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-22 17:43 [PATCH] 0/3 - Add support for VMU flash memory and update maple bus driver on the SEGA Dreamcast Adrian McMenamin
2008-03-22 17:43 ` Adrian McMenamin
2008-03-22 17:43 ` [PATCH] 0/3 - Add support for VMU flash memory and update maple Adrian McMenamin
2008-03-22 17:56 ` [PATCH] 1/3 mtd: add Kbuild support and makefile support for Dreamcast VMU Adrian McMenamin
2008-03-22 17:56 ` Adrian McMenamin
2008-03-22 17:56 ` [PATCH] 1/3 mtd: add Kbuild support and makefile support for Adrian McMenamin
2008-03-24 3:09 ` [PATCH] 1/3 mtd: add Kbuild support and makefile support for Dreamcast VMU Paul Mundt
2008-03-24 3:09 ` Paul Mundt
2008-03-24 3:09 ` Paul Mundt
2008-03-22 18:03 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Visual Memory Unit Adrian McMenamin
2008-03-22 18:03 ` Adrian McMenamin
2008-03-22 18:03 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Adrian McMenamin
2008-03-22 18:32 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Visual Memory Unit Jörn Engel
2008-03-22 18:32 ` Jörn Engel
2008-03-22 18:32 ` Jörn Engel
2008-03-22 18:39 ` Adrian McMenamin
2008-03-22 18:39 ` Adrian McMenamin
2008-03-22 18:39 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Adrian McMenamin
2008-03-22 18:56 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Visual Memory Unit Jörn Engel
2008-03-22 18:56 ` Jörn Engel
2008-03-22 18:56 ` Jörn Engel
2008-03-24 2:08 ` Paul Mundt
2008-03-24 2:08 ` Paul Mundt
2008-03-24 2:08 ` Paul Mundt
2008-03-24 11:21 ` Jörn Engel
2008-03-24 11:21 ` Jörn Engel
2008-03-24 11:21 ` Jörn Engel
2008-03-24 12:06 ` Adrian McMenamin
2008-03-24 12:06 ` Adrian McMenamin
2008-03-24 12:06 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Adrian McMenamin
2008-03-24 13:21 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Visual Memory Unit Jörn Engel
2008-03-24 13:21 ` Jörn Engel
2008-03-24 13:21 ` Jörn Engel
2008-03-24 13:58 ` Adrian McMenamin
2008-03-24 13:58 ` Adrian McMenamin
2008-03-24 13:58 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Adrian McMenamin
2008-03-24 14:10 ` Jörn Engel [this message]
2008-03-24 14:10 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Visual Memory Unit Jörn Engel
2008-03-24 14:10 ` Jörn Engel
2008-03-24 14:43 ` Adrian McMenamin
2008-03-24 14:43 ` Adrian McMenamin
2008-03-24 14:43 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Adrian McMenamin
2008-03-24 14:46 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Visual Memory Unit Paul Mundt
2008-03-24 14:46 ` Paul Mundt
2008-03-24 14:46 ` Paul Mundt
2008-03-24 14:54 ` Jörn Engel
2008-03-24 14:54 ` Jörn Engel
2008-03-24 14:54 ` Jörn Engel
2008-03-24 18:45 ` Andrew Morton
2008-03-24 18:45 ` Andrew Morton
2008-03-24 18:45 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Andrew Morton
2008-03-24 23:11 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Visual Memory Unit Adrian McMenamin
2008-03-24 23:11 ` Adrian McMenamin
2008-03-24 23:11 ` [PATCH] 2/3 mtd: add support for flash on the SEGA Dreamcast Adrian McMenamin
2008-03-22 18:16 ` [PATCH] 3/3 maple: update bus driver to support Dreamcast VMU Adrian McMenamin
2008-03-22 18:16 ` Adrian McMenamin
2008-03-22 18:16 ` Adrian McMenamin
2008-03-24 3:33 ` Paul Mundt
2008-03-24 3:33 ` Paul Mundt
2008-03-24 3:33 ` Paul Mundt
2008-03-24 14:46 ` Jörn Engel
2008-03-24 14:46 ` Jörn Engel
2008-03-24 14:46 ` Jörn Engel
2008-03-24 15:06 ` Adrian McMenamin
2008-03-24 15:06 ` Adrian McMenamin
2008-03-24 15:06 ` Adrian McMenamin
2008-03-24 15:29 ` Jörn Engel
2008-03-24 15:29 ` Jörn Engel
2008-03-24 15:29 ` Jörn Engel
2008-03-24 15:51 ` Adrian McMenamin
2008-03-24 15:51 ` Adrian McMenamin
2008-03-24 15:51 ` Adrian McMenamin
2008-03-24 16:04 ` Jörn Engel
2008-03-24 16:04 ` Jörn Engel
2008-03-24 16:04 ` Jörn Engel
2008-03-24 17:07 ` Jörn Engel
2008-03-24 17:07 ` Jörn Engel
2008-03-24 17:07 ` Jörn Engel
2008-03-24 17:18 ` Adrian McMenamin
2008-03-24 17:18 ` Adrian McMenamin
2008-03-24 17:38 ` Jörn Engel
2008-03-24 17:38 ` Jörn Engel
2008-03-24 17:38 ` Jörn Engel
2008-03-24 17:55 ` Adrian McMenamin
2008-03-24 17:55 ` Adrian McMenamin
2008-03-24 19:54 ` Jörn Engel
2008-03-24 19:54 ` Jörn Engel
2008-03-24 19:54 ` Jörn Engel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080324141043.GB2899@logfs.org \
--to=joern@logfs.org \
--cc=adrian@newgolddream.dyndns.info \
--cc=lethal@linux-sh.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-sh@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.