* Re: [tip:x86/headers] x86: truncate ISA addresses to unsigned int [not found] <tip-a7eb518998529c08cc53fef17756d9fe433b0c23@kernel.org> @ 2009-02-17 21:24 ` James Bottomley 2009-02-17 21:25 ` H. Peter Anvin 2009-02-17 21:55 ` Ingo Molnar 0 siblings, 2 replies; 3+ messages in thread From: James Bottomley @ 2009-02-17 21:24 UTC (permalink / raw) To: hpa, mingo, tglx, hpa, linux-kernel; +Cc: linux-tip-commits On Tue, 2009-02-17 at 21:12 +0000, H. Peter Anvin wrote: > Author: H. Peter Anvin <hpa@linux.intel.com> > AuthorDate: Tue, 17 Feb 2009 13:01:51 -0800 > Commit: H. Peter Anvin <hpa@linux.intel.com> > CommitDate: Tue, 17 Feb 2009 13:01:51 -0800 > > x86: truncate ISA addresses to unsigned int > > Impact: Cleanup; fix inappropriate macro use > > ISA addresses on x86 are mapped 1:1 with the physical address space. > Since the ISA address space is only 24 bits (32 for VLB or LPC) it > will always fit in an unsigned int, and at least in the aha1542 driver > using a wider type would cause an undesirable promotion. Hence > explicitly cast the ISA bus addresses to unsigned int. > > Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> > Cc: James Bottomley <James.Bottomley@hansenpartnership.com> > > > --- > arch/x86/include/asm/io.h | 11 ++++++++--- > 1 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h > index 4f8e820..683d0b4 100644 > --- a/arch/x86/include/asm/io.h > +++ b/arch/x86/include/asm/io.h > @@ -124,10 +124,15 @@ static inline void *phys_to_virt(phys_addr_t address) > > /* > * ISA I/O bus memory addresses are 1:1 with the physical address. > + * However, we truncate the address to unsigned int to avoid undesirable > + * promitions in legacy drivers. > */ > -#define isa_virt_to_bus (unsigned long)virt_to_phys > -#define isa_page_to_bus page_to_phys > -#define isa_bus_to_virt phys_to_virt > +static inline unsigned int isa_virt_to_bus(volatile void *address) The rest looks fine, but why is the address volatile? The macro below never actually dereferences it. > +{ > + return (unsigned int)virt_to_phys(address); > +} > +#define isa_page_to_bus(page) ((unsigned int)page_to_phys(page)) > +#define isa_bus_to_virt phys_to_virt > > /* > * However PCI ones are not necessarily 1:1 and therefore these interfaces James ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [tip:x86/headers] x86: truncate ISA addresses to unsigned int 2009-02-17 21:24 ` [tip:x86/headers] x86: truncate ISA addresses to unsigned int James Bottomley @ 2009-02-17 21:25 ` H. Peter Anvin 2009-02-17 21:55 ` Ingo Molnar 1 sibling, 0 replies; 3+ messages in thread From: H. Peter Anvin @ 2009-02-17 21:25 UTC (permalink / raw) To: James Bottomley; +Cc: hpa, mingo, tglx, linux-kernel, linux-tip-commits James Bottomley wrote: >> +static inline unsigned int isa_virt_to_bus(volatile void *address) > > The rest looks fine, but why is the address volatile? The macro below > never actually dereferences it. > Because a volatile is permitted. virt_to_phys() takes a volatile pointer for that reason. -hpa ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [tip:x86/headers] x86: truncate ISA addresses to unsigned int 2009-02-17 21:24 ` [tip:x86/headers] x86: truncate ISA addresses to unsigned int James Bottomley 2009-02-17 21:25 ` H. Peter Anvin @ 2009-02-17 21:55 ` Ingo Molnar 1 sibling, 0 replies; 3+ messages in thread From: Ingo Molnar @ 2009-02-17 21:55 UTC (permalink / raw) To: James Bottomley; +Cc: hpa, mingo, tglx, hpa, linux-kernel, linux-tip-commits * James Bottomley <James.Bottomley@HansenPartnership.com> wrote: > On Tue, 2009-02-17 at 21:12 +0000, H. Peter Anvin wrote: > > Author: H. Peter Anvin <hpa@linux.intel.com> > > AuthorDate: Tue, 17 Feb 2009 13:01:51 -0800 > > Commit: H. Peter Anvin <hpa@linux.intel.com> > > CommitDate: Tue, 17 Feb 2009 13:01:51 -0800 > > > > x86: truncate ISA addresses to unsigned int > > > > Impact: Cleanup; fix inappropriate macro use > > > > ISA addresses on x86 are mapped 1:1 with the physical address space. > > Since the ISA address space is only 24 bits (32 for VLB or LPC) it > > will always fit in an unsigned int, and at least in the aha1542 driver > > using a wider type would cause an undesirable promotion. Hence > > explicitly cast the ISA bus addresses to unsigned int. > > > > Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> > > Cc: James Bottomley <James.Bottomley@hansenpartnership.com> > > > > > > --- > > arch/x86/include/asm/io.h | 11 ++++++++--- > > 1 files changed, 8 insertions(+), 3 deletions(-) > > > > diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h > > index 4f8e820..683d0b4 100644 > > --- a/arch/x86/include/asm/io.h > > +++ b/arch/x86/include/asm/io.h > > @@ -124,10 +124,15 @@ static inline void *phys_to_virt(phys_addr_t address) > > > > /* > > * ISA I/O bus memory addresses are 1:1 with the physical address. > > + * However, we truncate the address to unsigned int to avoid undesirable > > + * promitions in legacy drivers. > > */ > > -#define isa_virt_to_bus (unsigned long)virt_to_phys > > -#define isa_page_to_bus page_to_phys > > -#define isa_bus_to_virt phys_to_virt > > +static inline unsigned int isa_virt_to_bus(volatile void *address) > > The rest looks fine, but why is the address volatile? The macro below > never actually dereferences it. That is because the volatile keyword here broadens the permitted _input_ type. Ingo ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2009-02-17 21:55 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <tip-a7eb518998529c08cc53fef17756d9fe433b0c23@kernel.org>
2009-02-17 21:24 ` [tip:x86/headers] x86: truncate ISA addresses to unsigned int James Bottomley
2009-02-17 21:25 ` H. Peter Anvin
2009-02-17 21:55 ` Ingo Molnar
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.