Rick Peralta wrote:
Hi Jeff,
Here are the notes on the endian notes. On first blush it looks like the basic
problems are related to I/O and structure alignment. Correcting the structure (in the
compiler) might be enough (if is supports endian pragmas or some such. The traditional
way is to hard code endian conversions of the data before it goes out over the network
and converting back on return. There are macros in the networking code that do the
core byte swaping function. I was looking from net_write() & net_read() to see
where they were called and what was passed to them. struct chunksrv_req & struct
chunksrv_resp_get seem to be the primary structures. Where to optimally put the
changes is less clear.
In struct chunksrv_req, only one member has the possibility of endian
problems: data_len. And it appears to me that this is already properly
converted:
[jgar...@bd chunkd]$ grep -w data_len */*.[ch]
include/chunk_msg.h: uint64_t data_len; /* len
of addn'l data */
lib/chunkdc.c: *plen = GUINT64_FROM_LE(resp.req.data_len);
lib/chunkdc.c: req.data_len = GUINT64_TO_LE(content_len);
lib/chunkdc.c: req.data_len = GUINT64_TO_LE(cont_len);
lib/chunkdc.c: content_len = GUINT64_FROM_LE(resp.req.data_len);
server/object.c: uint64_t content_len =
GUINT64_FROM_LE(cli->creq.data_len);
server/object.c: resp->req.data_len = GUINT32_TO_LE(obj->size);
server/server.c: resp->data_len = GUINT64_TO_LE(content_len);
server/server.c: (long long)
GUINT64_FROM_LE(req->data_len));
In struct chunksrv_resp_get, the only possibility of endian problem with
is the 'mtime' struct member, which is only referenced once in
server/object.c (the other uses are native-endian internal variables):
[jgar...@bd chunkd]$ grep -w mtime */*.[ch]
include/chunk_msg.h: uint64_t mtime;
lib/chunkdc.c: if (!net_read(stc, &resp.mtime, sizeof(resp) -
sizeof(resp.req)))
server/be-fs.c: obj->bo.mtime = st.st_mtime;
server/be-fs.c: ve->mtime = st.st_mtime;
server/chunkd.h: time_t mtime;
server/chunkd.h: time_t mtime; /* obj last-mod
time */
server/object.c: resp->mtime = GUINT64_TO_LE(obj->mtime);
server/server.c: time2str(timestr, ve->mtime),
What are the "basic problems of I/O and structure alignment"?
I cobbled on a VM to get the PPC vm working. It seemed to boot, but needed
more configuration than I had time to dope out. I was cool to see a
mini-laptop (using the atom processor) run windows (yetch), support a VM
running Fedora, support a VM running PPC code! I'm thinking a DVD could still
run in the background, on an external monitor...
Great!
Jeff
--
To unsubscribe from this list: send the line "unsubscribe hail-devel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html