[PATCH 03/22] pHype specific stuff

Christoph Hellwig hch at infradead.org
Sat Feb 18 23:23:17 EST 2006


> +u64 hipz_galpa_load(struct h_galpa galpa, u32 offset)
> +{
> +	u64 addr = galpa.fw_handle + offset;
> +	u64 out;
> +	EDEB_EN(7, "addr=%lx offset=%x ", addr, offset);
> +	out = *(u64 *) addr;

why does this cast an u64 to a pointer?

> +#ifndef EHCA_USERDRIVER
> +inline static int hcall_map_page(u64 physaddr, u64 * mapaddr)
> +{
> +	*mapaddr = (u64)(ioremap(physaddr, 4096));
> +
> +	EDEB(7, "ioremap physaddr=%lx mapaddr=%lx", physaddr, *mapaddr);
> +	return 0;

ioremap returns void __iomem * and casting that to any integer type is
wrong.

> +inline static int hcall_unmap_page(u64 mapaddr)
> +{
> +	EDEB(7, "mapaddr=%lx", mapaddr);
> +	iounmap((void *)(mapaddr));
> +	return 0;

dito for iounmap and casting back.

guys, please run this driver through sparse, thanks.

> +	/* if phype returns LongBusyXXX,
> +	 * we retry several times, but not forever */
> +	for (i = 0; i < 5; i++) {
> +		__asm__ __volatile__("mr 3,%10\n"
> +				     "mr 4,%11\n"
> +				     "mr 5,%12\n"

assembly code under drivers/ is not acceptable.  please create
and <asm/ehca.h> for it or something similar.




More information about the Linuxppc64-dev mailing list