This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

=== Week 2: Discuss TCP and memory changes, update jme driver === == TCP / memory topic == * Current heap size is fixed at 128K. * Although it only uses 128K, all-drivers image already overlapped with heap address. * Trying to figure out a way to obtain more memory, and report it to OS. * See if it is possiable to know how much heap size we can use out of code and stack. == jme driver == * From Joshua Oreman * jme_check_link(struct net_device *netdev, int testonly)\\ * In this function, I believe the code and string data used in constructing linkmsg will make it into even non-debug versions of the executable. If that's true it would be better if you could perform all the manipulations in the final DBG() line, using the ?: operator and such. It's possible the compiler is clever enough to know what strcat() does and see that linkmsg[] is not used in non-debug, though, so this may be moot. * From Michael Brown * if (memcmp(addr, netdev->hw_addr, ETH_ALEN)) * No need for this compare; just always write the MAC address. (This code will fail if you set the MAC to a non-default value, then try to set it back.) * Code cleanups * gPXE dose not use any DMA address that is above 4G <code C> #if __x86_64__ rxdesc->desc1.flags = RXFLAG_64BIT; #endif </code> * Use struct ethhdr and eth_ntoa(). * Drivers should generally not try to parse the packets they transmit and receive. * This code will break if/when software VLAN support is added. <code C> DBG2("Received packet: " "from %02x:%02x:%02x:%02x:%02x:%02x " "to %02x:%02x:%02x:%02x:%02x:%02x " "type %04x\n", *(uint8_t *)(rxbi->data + 6), *(uint8_t *)(rxbi->data + 7), *(uint8_t *)(rxbi->data + 8), *(uint8_t *)(rxbi->data + 9), *(uint8_t *)(rxbi->data + 10), *(uint8_t *)(rxbi->data + 11), *(uint8_t *)(rxbi->data + 0), *(uint8_t *)(rxbi->data + 1), *(uint8_t *)(rxbi->data + 2), *(uint8_t *)(rxbi->data + 3), *(uint8_t *)(rxbi->data + 4), *(uint8_t *)(rxbi->data + 5), be16_to_cpu(*(uint16_t *)(rxbi->data + 12))); </code> * %p should be used for printing out pointer values. <code C> DBG2("TX buffer address: %08lx(%08lx+%x)\n", (unsigned long)iob->data, mapping, len); </code> * This will behave poorly when memory runs out. Better is to have a refill routine that runs after the poll(), and always attempts to refill up to a specified level. <code C> rxdesc += idx; if (jme_make_new_rx_buf(rxring->bufinf + idx)) { DBG("Dropped packet due to memory allocation error.\n"); netdev_rx_err(netdev, NULL, -ENOMEM); } else { </code>


Navigation

* [[:start|Home]] * [[:about|About our Project]] * [[:download|Download]] * [[:screenshots|Screenshots]] * Documentation * [[:howtos|HowTo Guides]] * [[:appnotes|Application Notes]] * [[:faq:|FAQs]] * [[:doc|General Doc]] * [[:talks|Videos, Talks, and Papers]] * [[:hardwareissues|Hardware Issues]] * [[:mailinglists|Mailing lists]] * [[http://support.etherboot.org/|Bugtracker]] * [[:contributing|Contributing]] * [[:editing_permission|Wiki Edit Permission]] * [[:wiki:syntax|Wiki Syntax]] * [[:contact|Contact]] * [[:relatedlinks|Related Links]] * [[:commerciallinks|Commercial Links]] * [[:acknowledgements|Acknowledgements]] * [[:logos|Logo Art]]

QR Code
QR Code soc:2010:cooldavid:journal:week2 (generated for current page)