xbox360 extension for review/debug

Rene Ladan r.c.ladan at gmail.com
Sat Jan 6 16:52:56 PST 2007


Rene Ladan schreef:
> Poul-Henning Kamp schreef:
>> In message <45996C4F.8070700 at gmail.com>, Rene Ladan writes:
>>> Hi,
>>>
>>> I've written an extension to /sys/geom/geom_mbr.c to slice up xbox360
>>> hard disks and memory units.  The patch for revision 1.68 (i.e. CURRENT)
>>> is at http://home.tisali.nl/rladan/freebsd/geom_mbr.c.diff
>> This is wrong, you should make a geom_xbox360 class instead.
>>
> Ok, I made a geom_xbox360 class and restored geom_mbr.c
> 
> The new class consists of three files at the above website.
> 
> geom_xbox360.c : the class, put it in /sys/geom
> geom_xbox360::Makefile : Makefile for /sys/modules/geom/geom_xbox360/
> Makefile.diff : patch for /sys/modules/geom/Makefile
> 
>
I've uploaded a new version of geom_xbox360.c.  The class now works
correctly except for:

1) If you kldload the class and plug in a physical medium afterwards,
then pp->mediasize == 0 so the taste function fails.  This does not
happen if the medium is plugged in before the kldload or when using dd
images using mdconfig.  I think that the taste function is called before
the physical medium (here da0) is properly initialized.  MBR media don't
suffer from this because mbr_taste() doesn't check pp->mediasize.  A
dmesg is attached.

2) Trying to kldunload the class before removing the (physical) medium
results in g_event going haywire.  But this might be on design according
to Google.

> Regards,
> Rene

-- 
GPG fingerprint = E738 5471 D185 7013 0EE0  4FC8 3C1D 6F83 12E1 84F6
(subkeys.pgp.net)

"It won't fit on the line."
		-- me, 2001

-------------- next part --------------
umass0: <Microsoft Corporation Memory Unit, class 0/0, rev 2.00/1.01, addr 2> on uhub4
umass0:0:0:-1: Attached to scbus0
(probe0:umass-sim0:0:0:0): Down reving Protocol Version from 2 to 0?
(probe0:umass-sim0:0:0:0): Uninitialized Transport 5:26?
pass0 at umass-sim0 bus 0 target 0 lun 0
pass0: <MSFT Memory Unit 1.00> Removable Simplified Direct Access SCSI-0 device 
pass0: Serial Number \M-{
pass0: 40.000MB/s transfers
GEOM: new disk da0
da0 at umass-sim0 bus 0 target 0 lun 0
da0: <MSFT Memory Unit 1.00> Removable Simplified Direct Access SCSI-0 device 
da0: Serial Number \M-{
da0: 40.000MB/s transfers
da0: 62MB (127232 512 byte sectors: 64H 32S/T 62C)

# kldload geom_xbox360

mp=0xc5606d60 pp=0xc500c980
mp->name=XBOX360, pp->name=acd0
classname=ACD
g_xbox360_taste: size = 8796093020160
mp=0xc5606d60 pp=0xc500cc00
mp->name=XBOX360, pp->name=ad0s2
classname=MBR
g_xbox360_taste: size = 79135418880
mp=0xc5606d60 pp=0xc500cd00
mp->name=XBOX360, pp->name=ad0s1
classname=MBR
g_xbox360_taste: size = 40896059904
mp=0xc5606d60 pp=0xc500c700
mp->name=XBOX360, pp->name=ad0s2f
classname=BSD
g_xbox360_taste: size = 70598388224
mp=0xc5606d60 pp=0xc500c200
mp->name=XBOX360, pp->name=ad0s2e
classname=BSD
g_xbox360_taste: size = 536870912
mp=0xc5606d60 pp=0xc500c300
mp->name=XBOX360, pp->name=ad0s2d
classname=BSD
g_xbox360_taste: size = 3203399680
mp=0xc5606d60 pp=0xc500c400
mp->name=XBOX360, pp->name=ad0s2c
classname=BSD
g_xbox360_taste: size = 79135418880
mp=0xc5606d60 pp=0xc500c500
mp->name=XBOX360, pp->name=ad0s2b
classname=BSD
g_xbox360_taste: size = 4259889152
mp=0xc5606d60 pp=0xc500c600
mp->name=XBOX360, pp->name=ad0s2a
classname=BSD
g_xbox360_taste: size = 536870912
mp=0xc5606d60 pp=0xc5147580
mp->name=XBOX360, pp->name=da0
classname=DISK
g_xbox360_taste: size = 65142784
sectorsize = 512
mp=0xc5606d60 pp=0xc5081c80
mp->name=XBOX360, pp->name=cd0
classname=DISK
g_xbox360_taste: size = 0
mp=0xc5606d60 pp=0xc5044500
mp->name=XBOX360, pp->name=ad0
classname=DISK
g_xbox360_taste: size = 120034123776
mp=0xc5606d60 pp=0xc5653b00
mp->name=XBOX360, pp->name=da0s1
classname=XBOX360
mp=0xc5606d60 pp=0xc5082100
mp->name=XBOX360, pp->name=da0s2
classname=XBOX360
umass0: at uhub4 port 2 (addr 2) disconnected
(da0:umass-sim0:0:0:0): lost device
(da0:umass-sim0:0:0:0): removing device entry
(pass0:umass-sim0:0:0:0): lost device
(pass0:umass-sim0:0:0:0): removing device entry
umass0: detached

# reattach device with geom_xbox360 still loaded

umass0: <Microsoft Corporation Memory Unit, class 0/0, rev 2.00/1.01, addr 2> on uhub4
umass0:0:0:-1: Attached to scbus0
(probe0:umass-sim0:0:0:0): Down reving Protocol Version from 2 to 0?
(probe0:umass-sim0:0:0:0): Uninitialized Transport 5:26?
pass0 at umass-sim0 bus 0 target 0 lun 0
pass0: <MSFT Memory Unit 1.00> Removable Simplified Direct Access SCSI-0 device 
pass0: Serial Number \M-{
pass0: 40.000MB/s transfers
GEOM: new disk da0
mp=0xc5606d60 pp=0xc5bbd380
mp->name=XBOX360, pp->name=da0
classname=DISK
g_xbox360_taste: size = 0 <-- should be 65142784 ?
da0 at umass-sim0 bus 0 target 0 lun 0
da0: <MSFT Memory Unit 1.00> Removable Simplified Direct Access SCSI-0 device 
da0: Serial Number \M-{
da0: 40.000MB/s transfers
da0: 62MB (127232 512 byte sectors: 64H 32S/T 62C)

# mdconfig -a -t vnode -f mc360.img , geom_xbox360 still loaded

mp=0xc5606d60 pp=0xc5df3280
mp->name=XBOX360, pp->name=md0
classname=MD
g_xbox360_taste: size = 65142784
sectorsize = 512
mp=0xc5606d60 pp=0xc534a880
mp->name=XBOX360, pp->name=md0s1
classname=XBOX360
mp=0xc5606d60 pp=0xc5df3a80
mp->name=XBOX360, pp->name=md0s2
classname=XBOX360


More information about the freebsd-geom mailing list