Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6a7e1ec authored by Peter Chubb's avatar Peter Chubb Committed by Tony Luck
Browse files

[IA64] Allow simulator to use bigger disks



The simscsi code at present overflows an int if it's given a large
disk image.  The attached patch increases the possible size to 128G.
While it's unlikely that anyone will want to use SKI with such a
large drive, the same framework is currently being used for various
virtualisation experiments.

Signed-off-by: default avatarPeter Chubb <peterc@gelato.unsw.edu.au>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 444d1d9b
Loading
Loading
Loading
Loading
+8 −5
Original line number Original line Diff line number Diff line
@@ -205,10 +205,11 @@ simscsi_get_disk_size (int fd)
	char buf[512];
	char buf[512];


	/*
	/*
	 * This is a bit kludgey: the simulator doesn't provide a direct way of determining
	 * This is a bit kludgey: the simulator doesn't provide a
	 * the disk size, so we do a binary search, assuming a maximum disk size of 4GB.
	 * direct way of determining the disk size, so we do a binary
	 * search, assuming a maximum disk size of 128GB.
	 */
	 */
	for (bit = (4UL << 30)/512; bit != 0; bit >>= 1) {
	for (bit = (128UL << 30)/512; bit != 0; bit >>= 1) {
		req.addr = __pa(&buf);
		req.addr = __pa(&buf);
		req.len = sizeof(buf);
		req.len = sizeof(buf);
		ia64_ssc(fd, 1, __pa(&req), ((sectors | bit) - 1)*512, SSC_READ);
		ia64_ssc(fd, 1, __pa(&req), ((sectors | bit) - 1)*512, SSC_READ);
@@ -225,8 +226,10 @@ simscsi_readwrite10 (struct scsi_cmnd *sc, int mode)
{
{
	unsigned long offset;
	unsigned long offset;


	offset = (  (sc->cmnd[2] << 24) | (sc->cmnd[3] << 16)
	offset = (((unsigned long)sc->cmnd[2] << 24) 
		  | (sc->cmnd[4] <<  8) | (sc->cmnd[5] <<  0))*512;
		| ((unsigned long)sc->cmnd[3] << 16)
		| ((unsigned long)sc->cmnd[4] <<  8) 
		| ((unsigned long)sc->cmnd[5] <<  0))*512UL;
	if (sc->use_sg > 0)
	if (sc->use_sg > 0)
		simscsi_sg_readwrite(sc, mode, offset);
		simscsi_sg_readwrite(sc, mode, offset);
	else
	else