<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/3.32.2">
</HEAD>
<BODY>
On Tue, 2011-11-15 at 10:27 +0200, Martin-&#201;ric Racine wrote:
<BLOCKQUOTE TYPE=CITE>
<PRE>
Gaetan,

Thanks for this patch.

I'm really wondering whether _LARGEFILE64_SOURCE was intentionally
defined or not i.e. do the Durango and MSR codes require explicit
64-bit support or not. IIRC there were similar defines in the Cimarron
code as well. Let's see what the AMD guys have to say.
</PRE>
</BLOCKQUOTE>
It'd be nice to know if the geode really needs large file descriptor indeed.<BR>
If not, we simply remove AC_SYS_LARGEFILE from the path and we are done.<BR>
<BR>
I scanned 50 xorg video drivers and found only one (ati) with AC_SYS_LARGEFILE<BR>
but I don't think it uses any transitional extension xxx64 functions.<BR>
Only a hand full of xorg modules out of 240 uses large file support.<BR>
<BR>
I doubt the code can handle large file support as it seems to me that it is &quot;hard coded&quot; for 32 bit.
<BLOCKQUOTE>
<PRE>
GeodeReadMSR(unsigned long addr, unsigned long *lo, unsigned long *hi)
{
&nbsp;&nbsp;&nbsp; unsigned int data[2];
&nbsp;&nbsp;&nbsp; int fd = _msr_open();
&nbsp;&nbsp;&nbsp; int ret;

&nbsp;&nbsp;&nbsp; if (fd == -1)
        return -1;

&nbsp;&nbsp;&nbsp; ret = lseek(fd, (off_t) addr, SEEK_SET);
[...]

</PRE>
</BLOCKQUOTE>
It is casting an unsigned long type (32 bit) to an off_t type (which could be 64 bit). It also does not check for an overflow condition which it should do when supporting 64 bit seek operations on a 32 bit system. I am no expert in this area.<BR>
<BR>
<BR>
<BLOCKQUOTE TYPE=CITE>
<PRE>

Basically, if this clears ok with them, the only thing we'd need in
addition to this to support arbitrary ports would be conditionaly
enabling compilation of the z4l.c driver upon detection of the
header's presence.

Martin-&#201;ric

2011/11/14 Gaetan Nadon &lt;<A HREF="mailto:memsize@videotron.ca">memsize@videotron.ca</A>&gt;:
&gt; The &quot;transitional extension&quot; API is deprecated and is not available on FreeBSD.
&gt; It gets replaced with defining _FILE_OFFSET_BITS.
&gt; <A HREF="http://www.unix.org/version2/whatsnew/lfs20mar.html#3.0">http://www.unix.org/version2/whatsnew/lfs20mar.html#3.0</A>
&gt;
&gt; _LARGEFILE64_SOURCE
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Expose definitions for the alternative API specified by the LFS (Large
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;File Summit) as a &quot;transitional extension&quot; to the Single UNIX
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Specification. &nbsp;(See <A HREF="http://opengroup.org/platform/lfs.html">http://opengroup.org/platform/lfs.html</A>.) &nbsp;The
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;alternative API consists of a set of new objects (i.e., functions and
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;types) whose names are suffixed with &quot;64&quot; (e.g., off64_t versus off_t,
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lseek64() versus lseek(), etc.). &nbsp;New programs should not employ this
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;interface; instead _FILE_OFFSET_BITS=64 should be employed.
&gt;
&gt; _FILE_OFFSET_BITS
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Defining this macro with the value 64 automatically converts references
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;to 32-bit functions and data types related to file I/O and file system
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;operations into references to their 64-bit counterparts. &nbsp;This is
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;useful for performing I/O on large files (&gt; 2 Gigabytes) on 32-bit
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;systems. &nbsp;(Defining this macro permits correctly written programs to
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;use large files with only a recompilation being required.) &nbsp;64-bit
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;systems naturally permit file sizes greater than 2 Gigabytes, and on
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;those systems this macro has no effect.
&gt;
&gt; An example using open():
&gt; -----------------------------------------------------------------------
&gt; int
&gt; main (void)
&gt; {
&gt; &nbsp;return open (&quot;.&quot;, O_RDONLY) &lt; 0;
&gt; }
&gt;
&gt; it should compile and run just fine, with either Sun C or GCC. &nbsp;In the
&gt; latter case, the return statement expands via the preprocessor to:
&gt;
&gt; &nbsp;return open64 (&quot;.&quot;, 0) &lt; 0;
&gt;
&gt; so you don't need to have any instances of open64 in your code.
&gt; -------------------------------------------------------------------------
&gt;
&gt; The file _FILE_OFFSET_BITS macro will be defined by AC_SYS_LARGEFILE
&gt; which gets included by the generated config.h.
&gt;
&gt; This is consistent with all X.Org modules using large file support,
&gt; including the server. Recently large file support was added to xorg
&gt; app/sessreg which uses lseek.
&gt; Only AC_SYS_LARGEFILE was added in sessreg configure.ac.
&gt;
&gt; It is still unsure if geode driver need support for large file descriptor &gt;2G
&gt;
&gt; Signed-off-by: Gaetan Nadon &lt;<A HREF="mailto:memsize@videotron.ca">memsize@videotron.ca</A>&gt;
&gt; ---
&gt; &nbsp;configure.ac &nbsp; &nbsp;| &nbsp; &nbsp;1 +
&gt; &nbsp;src/durango.c &nbsp; | &nbsp; &nbsp;2 --
&gt; &nbsp;src/geode_msr.c | &nbsp; &nbsp;9 ++++++---
&gt; &nbsp;3 files changed, 7 insertions(+), 5 deletions(-)
&gt;
&gt; diff --git a/configure.ac b/configure.ac
&gt; index 483caff..31e5fe0 100644
&gt; --- a/configure.ac
&gt; +++ b/configure.ac
&gt; @@ -30,6 +30,7 @@ AC_INIT([xf86-video-geode],
&gt; &nbsp;AC_CONFIG_SRCDIR([Makefile.am])
&gt; &nbsp;AM_CONFIG_HEADER([config.h])
&gt; &nbsp;AC_CONFIG_AUX_DIR(.)
&gt; +AC_SYS_LARGEFILE
&gt;
&gt; &nbsp;# Require xorg-macros: XORG_DEFAULT_OPTIONS
&gt; &nbsp;m4_ifndef([XORG_MACROS_VERSION],
&gt; diff --git a/src/durango.c b/src/durango.c
&gt; index 9d6970b..8795d41 100644
&gt; --- a/src/durango.c
&gt; +++ b/src/durango.c
&gt; @@ -32,8 +32,6 @@
&gt; &nbsp;#include &quot;config.h&quot;
&gt; &nbsp;#endif
&gt;
&gt; -#define _LARGEFILE64_SOURCE
&gt; -
&gt; &nbsp;#include &lt;unistd.h&gt;
&gt; &nbsp;#include &lt;errno.h&gt;
&gt; &nbsp;#include &lt;compiler.h&gt;
&gt; diff --git a/src/geode_msr.c b/src/geode_msr.c
&gt; index 6de693f..26fd78f 100644
&gt; --- a/src/geode_msr.c
&gt; +++ b/src/geode_msr.c
&gt; @@ -1,4 +1,7 @@
&gt; -#define _LARGEFILE64_SOURCE
&gt; +#ifdef HAVE_CONFIG_H
&gt; +#include &quot;config.h&quot;
&gt; +#endif
&gt; +
&gt; &nbsp;#include &lt;stdio.h&gt;
&gt; &nbsp;#include &lt;unistd.h&gt;
&gt; &nbsp;#include &lt;fcntl.h&gt;
&gt; @@ -31,7 +34,7 @@ GeodeReadMSR(unsigned long addr, unsigned long *lo, unsigned long *hi)
&gt; &nbsp; &nbsp; if (fd == -1)
&gt; &nbsp; &nbsp; &nbsp; &nbsp;return -1;
&gt;
&gt; - &nbsp; &nbsp;ret = lseek64(fd, (off64_t) addr, SEEK_SET);
&gt; + &nbsp; &nbsp;ret = lseek(fd, (off_t) addr, SEEK_SET);
&gt;
&gt; &nbsp; &nbsp; if (ret == -1)
&gt; &nbsp; &nbsp; &nbsp; &nbsp;return -1;
&gt; @@ -56,7 +59,7 @@ GeodeWriteMSR(unsigned long addr, unsigned long lo, unsigned long hi)
&gt; &nbsp; &nbsp; if (fd == -1)
&gt; &nbsp; &nbsp; &nbsp; &nbsp;return -1;
&gt;
&gt; - &nbsp; &nbsp;if (lseek64(fd, (off64_t) addr, SEEK_SET) == -1)
&gt; + &nbsp; &nbsp;if (lseek(fd, (off_t) addr, SEEK_SET) == -1)
&gt; &nbsp; &nbsp; &nbsp; &nbsp;return -1;
&gt;
&gt; &nbsp; &nbsp; data[0] = lo;
&gt; --
&gt; 1.7.4.1
&gt;
&gt; _______________________________________________
&gt; Xorg-driver-geode mailing list
&gt; <A HREF="mailto:Xorg-driver-geode@lists.x.org">Xorg-driver-geode@lists.x.org</A>
&gt; <A HREF="http://lists.x.org/mailman/listinfo/xorg-driver-geode">http://lists.x.org/mailman/listinfo/xorg-driver-geode</A>
&gt;
</PRE>
</BLOCKQUOTE>
<BR>
</BODY>
</HTML>